这是我处理一个游戏对象的简单玩家移动的代码。它允许用户上下、左右移动对象,并实现旋转。
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 10f;
public float rotateSpeed = 10f;
public Rigidbody2D rb;
Vector2 movement;
void Update()
{
movement.x = Input.GetAxis("Horizontal");
movement.y = Input.GetAxis("Vertical");
if (Input.GetKey(KeyCode.Space))
{
transform.Rotate(Vector3.forward * rotateSpeed * Time.fixedDeltaTime);
}
}
void FixedUpdate()
{
rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);
}
}
我的印象是
Update()
被称为每一个gametick和而该。
FixedUpdate()
是每秒呼叫50次所以,如果我的按键输入检测是在 Update()
办法
if (Input.GetKey(KeyCode.Space))
{
transform.Rotate(Vector3.forward * rotateSpeed * Time.fixedDeltaTime);
}
那么我的旋转代码应该在 FixedUpdate()
. 如果是这样,我如何让它在那里运行,同时还能检测到在 Update()
?
固定更新 是用来与物理系统同步的。 你可以使用 固定更新 施力时(或在你的情况下。移动位置)到a 刚体.
至于你的 旋转,你应该在 更新. 这将为下一帧的渲染提供最准确的位置(即使是 更新 在下一帧之前被多次调用)。) 另外,你应该使用 时间.deltaTime 在你 更新 计算。 像这样。
transform.Rotate(Vector3.forward * rotateSpeed * Time.deltaTime);
Time. fixedDeltaTime 是为 固定更新.
参考文献。https:/docs.unity3d.comScriptReferenceMonoBehaviour.FixedUpdate.html。