C# Update()和FixedUpdate()之间有什么区别?如何将这些区别应用于控制移动?
这是我的代码,用于处理游戏对象的简单玩家移动。它允许用户上下左右移动对象,并启用旋转C# Update()和FixedUpdate()之间有什么区别?如何将这些区别应用于控制移动?,c#,unity3d,C#,Unity3d,这是我的代码,用于处理游戏对象的简单玩家移动。它允许用户上下左右移动对象,并启用旋转 public class PlayerMovement : MonoBehaviour { public float moveSpeed = 10f; public float rotateSpeed = 10f; public Rigidbody2D rb; Vector2 movement; void Update() { movement
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);
}
}
我的印象是:
会在每个gametick和Update()
- 它更适合一般检测,如按键
每秒调用50次fixeupdate()
- 这对于游戏对象转换更好
Update()
方法中
if (Input.GetKey(KeyCode.Space))
{
transform.Rotate(Vector3.forward * rotateSpeed * Time.fixedDeltaTime);
}
那么我的旋转代码应该在
FixedUpdate()
中吗。如果是这样的话,我如何让它运行在那里,同时仍然在Update()
中检测按键?FixedUpdate用于与物理系统同步。向刚体施加力(或在您的情况下,移动位置)时,可以使用固定更新
至于你的轮换,你应该在更新中进行。这将为下一个渲染帧提供最精确的位置(即使在下一帧之前多次调用Update)。此外,您应该在更新计算中使用Time.deltaTime。像这样:
transform.Rotate(Vector3.forward * rotateSpeed * Time.deltaTime);
Time.fixedDeltaTime用于FixedUpdate
参考: