首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity 2D C#奇怪的移动行为

问Unity 2D C#奇怪的移动行为
EN

Stack Overflow用户
提问于 2016-04-13 03:40:06
回答 2查看 151关注 0票数 0

我正在用C#制作一个统一的自上而下的2D游戏。目前只是在设置移动,但我已经遇到了一个我不能解决的问题。游戏是在一个网格中设置的,我只是使用箭头键来上下左右移动。这是我的脚本:

代码语言:javascript
复制
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.05,0.1,0.15等漂亮的平方数开始,但后来不知何故偏离了轨道,给出了像-0.05000001,-7.450581e-09,0.04999999这样的数字,这些数字接近想要的数字,但不够准确。有什么想法吗?感谢所有的建议。

EN

回答 2

Stack Overflow用户

发布于 2016-04-13 03:54:51

代码语言:javascript
复制
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 with float (或double),您将以偏移量结束。而且你也不能执行==。11.5 != 11.50001

票数 0
EN

Stack Overflow用户

发布于 2016-04-13 06:39:27

代码语言:javascript
复制
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);
            }

        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36582599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档