簡體   English   中英

Unity 2D C#怪異的移動行為

[英]Unity 2D C# weird movement behaviour

我正在用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 ,這接近所需數字,但不夠准確。 有任何想法嗎? 所有建議表示贊賞。

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

+= float加上float(或double),您將得到一個偏移量。 而且您將也無法執行== 11.5 != 11.50001

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);
            }

        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM