C# unity玩家即使以0.000000001f的速度移动也太快

C# unity玩家即使以0.000000001f的速度移动也太快,c#,unity3d,C#,Unity3d,我在游戏中的球上附加了以下脚本: public class MovePlayer : MonoBehaviour { //public GameObject packman; // Use this for initialization private Vector3 currentSpeed; void Start () { currentSpeed = new Vector3(0.0f, 0.0f, 0.0f); } // U

我在游戏中的球上附加了以下脚本:

public class MovePlayer : MonoBehaviour {
    //public GameObject packman;
    // Use this for initialization
    private Vector3 currentSpeed;
    void Start () {
        currentSpeed = new Vector3(0.0f, 0.0f, 0.0f);
    }

    // Update is called once per frame
    void Update () {

        if (Input.GetKey(KeyCode.LeftArrow)){
            currentSpeed.x = -(0.0001f);
        }
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            currentSpeed.x = 0.0001f;
        }
        else currentSpeed.x = 0;

        /*if (Input.GetKeyDown(KeyCode.UpArrow))
        {
        }*/

        //move packman
        this.transform.Translate(Time.deltaTime * currentSpeed.x, Time.deltaTime * currentSpeed.y,
            Time.deltaTime * currentSpeed.z);
    }
}
然后我在游戏中触到左箭头或右箭头,球向一个方向快速移动,即使触到另一个箭头也不会停止

我发现这是因为我添加了“物理->角色控制器”到 球。删除此组件完成了此工作。为什么是性格 产生所述效果的控制器丹尼尔·罗卡·洛佩兹

这听起来像是您意外添加的角色控制器,为对象的行为预先编写了值。
因此,在MovePlayer脚本的基础上,您还可以从CharacterController获得移动信息。

像这样使用FixeUpdate()

    public class MovePlayer : MonoBehaviour {
    //public GameObject packman;
    // Use this for initialization
    private Vector3 currentSpeed;
    void Start () {
        currentSpeed = new Vector3(0.0f, 0.0f, 0.0f);
    }

    // Update is called once every 1/60th second
    void FixedUpdate () {

        if (Input.GetKey(KeyCode.LeftArrow)){
            currentSpeed.x = -(0.0001f);
        }
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            currentSpeed.x = 0.0001f;
        }
        else currentSpeed.x = 0;

        /*if (Input.GetKeyDown(KeyCode.UpArrow))
        {
        }*/

        //move packman
        this.transform.Translate(Time.deltaTime * currentSpeed.x, Time.deltaTime * 
        currentSpeed.y, Time.deltaTime * currentSpeed.z);
    }
}

我不认为我在做任何事情,它不是+=,它是=而且当你放开键时,它应该设置速度=0并停止移动。。根据给出的代码,我看不出有什么问题。也许清理并重建解决方案。使用调试器确保值为
currentSpeed.x
y
z
;可能由于某种原因,
y
z
不是零。您显示的脚本没有您描述的效果。您的设置中一定有其他内容干扰了此脚本和/或导致您看到的行为。@Quantic我发现这是因为我在球上添加了“物理->角色控制器”。删除此组件完成了此工作。为什么角色控制器会产生所描述的效果?对不起,你是对的。出于某种原因,我把它看作是一种增值。如果是这种情况,我不认为使用
currentSpeed
变量类级别是可取的,它应该是本地的。