我刚刚开始学习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轴,但这没有用。有人可以告诉我我在搞砸吗?
您将Rigidbody
用Rigidbody.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.GetAxisRaw
或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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句