Unity 2D C#奇怪的运动行为

时间:2016-04-12 19:40:06

标签: c# unity3d 2d

我在C#中以统一的方式制作自上而下的2D游戏。目前只是设置运动,但我已经遇到了一个我无法弄清楚的问题。游戏设置在网格中,我只是使用箭头键向上,向下,向左和向右移动。这是我的剧本:

public class Player : MonoBehaviour 
{

    public float playerSpeed;

    void FixedUpdate()
    {
        // Movement
        if (transform.position.x < 0.25)
        {
            if (Input.GetKeyUp(KeyCode.RightArrow))
            {
                transform.position += new Vector3(playerSpeed, 0, 0);
            }         
        }
        if (transform.position.x > -0.3)
        {
            if (Input.GetKeyUp(KeyCode.LeftArrow))
            {
                transform.position += new Vector3(-playerSpeed, 0, 0);
            }
        }
        if (transform.position.y < 0.15)
        {
            if (Input.GetKeyUp(KeyCode.UpArrow))
            {
                transform.position += new Vector3(0, playerSpeed, 0);
            }
        }
        if (transform.position.y > -0.10)
        {
            if (Input.GetKeyUp(KeyCode.DownArrow))
            {
                transform.position += new Vector3(0, -playerSpeed, 0);
            }
        }
    }
}

每个方向的第一个if语句是确保玩家不离开房间的边界。正在发生的令人讨厌的事情是,当它移动时,它会像0.050.10.15等那样以正方形数字开始,但是然后以某种方式偏离路线并给出类似的数字-0.05000001-7.450581e-090.04999999,它们与所需数字相近但不够准确。有任何想法吗?所有建议都表示赞赏。

2 个答案:

答案 0 :(得分:0)

static void Main(string[] args)
{
  float wMyFloat = 1.5f;
  for(int i = 0; i < 100; i++)
  {
    wMyFloat += 0.1f;
  }


  Console.WriteLine(wMyFloat.ToString());
  Console.ReadLine();
}

除此之外,您将等于11.5,但打印告诉您它等于11.50001

通过+=浮动浮动(或双重),您将得到一个偏移量。而你也无法执行==11.5 != 11.50001

答案 1 :(得分:0)

void FixedUpdate(){
        // Check to see if bounds left right
        if(transform.position.x < 0.25f && tranform.position.x > -0.3f){
            if (Input.GetKeyUp(KeyCode.RightArrow))
            {
                transform.position += new Vector3(playerSpeed, 0, 0);
            }    

            else if (Input.GetKeyUp(KeyCode.LeftArrow))
            {
                transform.position += new Vector3(-playerSpeed, 0, 0);
            }
        }
        // Check to see if bounds up and down
        if(transform.position.y < 0.15f && tranform.position.y > -0.1f){
            if (Input.GetKeyUp(KeyCode.UpArrow))
            {
                transform.position += new Vector3(0, playerSpeed, 0);
            }

            else if (Input.GetKeyUp(KeyCode.DownArrow))
            {
                transform.position += new Vector3(0, -playerSpeed, 0);
            }

        }
    }