正确的方法来移动刚体GameObject

派克D.

我刚刚开始学习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”按键上向前移动。我的代码有什么问题?我认为这可能是我设置Vector 3move的方式,所以我尝试用速度替换z轴,但这没有用。有人可以告诉我我在搞砸吗?

程序员

您将RigidbodyRigidbody.MovePosition与旋转它Rigidbody.MoveRotation,如果你想让它正确地碰撞与周围的物体。Rigidbody不应通过其位置,旋转或翻译变量/函数来移动。

“ w”不是像SherinBinu所提到的那样预定义的,但这不是唯一的问题。如果您定义并使用KeyCode.W它仍然无法正常工作。对象将移动一次并停止。

更改

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章