字符在IEnumerator中不能移动精确的单位。

问题描述 投票:1回答:1

我正在做一个类似地铁冲浪的游戏。问题是当我按下移动控制时,角色的移动量超过了1个单位,如果我从-1移动到0,我的角色就会在0.02或类似的地方,所以当我按下移动控制A和D10-15次后,我的角色不在车道上,并且X=1.2,0.3,-0.8。所以在点击移动控制A和D10-15次后,我的角色不在车道上,并且走X=1.2,0.3,-0.8等......这个问题也是跳跃控制的问题,如何解决这个问题.......我对unity非常初级。这几天刚开始.请帮帮我.我的编码是

 private string lanechange = "n";
    private string jumpcontrol = "n";


    void Start()
    {
         GetComponent<Rigidbody>().velocity = new Vector3(0, 0, 3);
    }


    void Update()
    {
        if((Input.GetKey("a")) && (lanechange=="n") && (transform.position.x>-.9f)  )
    {
          GetComponent<Rigidbody>().velocity = new Vector3(-4, 0, 3);
        lanechange = "y";
        StartCoroutine (stoplanechange());

        }

      if((Input.GetKey("d")) && (lanechange=="n") && (transform.position.x<.9f) )
    {
          GetComponent<Rigidbody>().velocity = new Vector3(4, 0, 3);
        lanechange = "y";
        StartCoroutine (stoplanechange());

        }

        if ((Input.GetKey("space")) && (jumpcontrol == "n") )
          {
            GetComponent<Rigidbody>().velocity = new Vector3(0, 2, 3);
            jumpcontrol = "y";
            StartCoroutine(stopjump());
        }

    }

    IEnumerator stopjump()
    {

        yield return new WaitForSeconds(0.5f);
        GetComponent<Rigidbody>().velocity = new Vector3(0, -2, 3);
        yield return new WaitForSeconds(0.5f);
        GetComponent<Rigidbody>().velocity = new Vector3(0, 0, 3);
        jumpcontrol = "n";

    }

    IEnumerator stoplanechange()

    {
        yield return new WaitForSeconds(0.25f);


         GetComponent<Rigidbody>().velocity = new Vector3(0, 0, 3);



        lanechange = "n";
        Debug.Log(GetComponent<Transform>().position);

    }
unity3d
1个回答
2
投票

如果你是用Rigidbody和速度来让它移动,你是用物理系统来让你的角色移动。物理系统有一个不同的时间步长,它与物理系统中的 FixedUpdate() 函数,而不是Update。

但输入总是绑定到 Update(),这是与图形和键盘输入同步的。

所以这样的移动时机总是会有一点偏差,甚至取决于图形帧率。

我建议你建立一些逻辑,让你的角色锁定在离你最近的车道上。移动键使其大致移动,至少是一半的车道宽度,然后回中键接管并使他居中。

© www.soinside.com 2019 - 2024. All rights reserved.