2016-04-12 7 views
0

私はC#で1次元でトップダウンの2Dゲームを作っています。現在のところ、動きの設定が始まっていますが、私はすでに私が把握できない問題にぶつかっています。ゲームはグリッドで設定されており、矢印キーを使って上下左右に移動しています。これは私のスクリプトです:Unity 2D C#奇妙な動きの振る舞い

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のような数字が与えられます数字は十分に正確ではありません。何か案は?すべての提案が高く評価されました。

+0

フロートの精度によるものではありませんか?つまり、0.0fは0.000000001fと同じですか? – Ceros

+0

は倍増するでしょうか? – oscaro

+0

おそらく、整数を使ってグリッドを作る方がよいでしょう。また、この 'Update'のためにします。 –

答えて

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にこれを除く外だろうが、印刷は、それがfloat(またはdouble)と+=フロートでは11.50001

に等しいことを示しています、あなたは、オフセットとなってしまいます。そして、あなたも==を実行することはできません。 11.5 != 11.50001

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

     } 
    }