你挪开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);
}