移动 Rigidbody 游戏对象的正确方法

2024-04-19

我刚刚开始学习Unity。我尝试使用此脚本进行简单的盒子移动。前提是,每当有人按下“w”时,盒子就会向前移动。

public class PlayerMover : MonoBehaviour {

public float speed;
private Rigidbody rb;


public void Start () {
    rb = GetComponent<Rigidbody>();
}

public void Update () {
    bool w = Input.GetButton("w");

    if (w) {
        Vector3 move = new Vector3(0, 0, 1) * speed;
        rb.MovePosition(move);
        Debug.Log("Moved using w key");

    }

}
}

每当我使用此功能时,按“w”按键时该框不会向前移动。我的代码有什么问题吗?我想这可能就是我的方式矢量3move设置后,我尝试用速度替换 z 轴,但这不起作用。有人能告诉我我哪里搞砸了吗?


你挪开Rigidbody with Rigidbody.MovePosition https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html并旋转它Rigidbody.MoveRotation https://docs.unity3d.com/ScriptReference/Rigidbody.MoveRotation.html如果你想让它与周围的物体正确碰撞。Rigidbody不应通过其位置、旋转或平移变量/函数来移动。

“w”不是像这样预定义的谢林比努 https://stackoverflow.com/a/43714826/3785314提到但这不是唯一的问题。如果您定义它并使用KeyCode.W它仍然行不通。物体将移动一次并停止。

Change

Vector3 move = new Vector3(0, 0, 1) * speed;
rb.MovePosition(move);

to

tempVect = tempVect.normalized * speed * Time.deltaTime;
rb.MovePosition(transform.position + tempVect);

这应该可以做到:

public float speed;
private Rigidbody rb;


public void Start()
{
    rb = GetComponent<Rigidbody>();
}

public void Update()
{
    bool w = Input.GetKey(KeyCode.W);

    if (w)
    {
        Vector3 tempVect = new Vector3(0, 0, 1);
        tempVect = tempVect.normalized * speed * Time.deltaTime;
        rb.MovePosition(transform.position + tempVect);
    }
}

最后,我想你想用 wasd 键移动你的物体。如果是这种情况,那么使用Input.GetAxisRaw or Input.GetAxis.

public void Update()
{
    float h = Input.GetAxisRaw("Horizontal");
    float v = Input.GetAxisRaw("Vertical");

    Vector3 tempVect = new Vector3(h, 0, v);
    tempVect = tempVect.normalized * speed * Time.deltaTime;
    rb.MovePosition(transform.position + tempVect);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移动 Rigidbody 游戏对象的正确方法 的相关文章

随机推荐