C# 澄清Update()和FixedUpdate()的用法?单位2d
所以我知道FixedUpdate应该用于物理运算之类的,但我很难理解什么是物理。例如,我移动我的角色,通过观察按下的键,然后施加一个力。目前我正在Update()中执行此操作。由于addForce是应用于物理对象(播放器,因为它有刚体组件)的代码,是否应该将此功能移动到FixeUpdate() 但是,如果我将此代码移动到fixedUpdate(),在该方法中运行input.GetKey是否可以?我在某个地方读到,如果在FixedUpdate()中侦听输入,则输入可能会丢失?所以,是的,令人困惑……听起来好像Input.GetKey应该在Update()中,当按下一个键时,一个标志被激活。同时,FixedUpdate()中的功能正在监视是否激活相应的标志。这样…这种方式在Update()中处理输入,在FixedUpdate()中处理移动…我理解的对吗C# 澄清Update()和FixedUpdate()的用法?单位2d,c#,unity3d,design-patterns,syntax,physics-engine,C#,Unity3d,Design Patterns,Syntax,Physics Engine,所以我知道FixedUpdate应该用于物理运算之类的,但我很难理解什么是物理。例如,我移动我的角色,通过观察按下的键,然后施加一个力。目前我正在Update()中执行此操作。由于addForce是应用于物理对象(播放器,因为它有刚体组件)的代码,是否应该将此功能移动到FixeUpdate() 但是,如果我将此代码移动到fixedUpdate(),在该方法中运行input.GetKey是否可以?我在某个地方读到,如果在FixedUpdate()中侦听输入,则输入可能会丢失?所以,是的,令人困惑…
另外,我正在使用碰撞器和触发器,它们的代码是否也位于FixeUpdate()中?如果没有好的资源,这是最难理解的事情之一。这通常是新Unity开发者代码中大多数“初学者bug”的原因 在我们开始之前: 正如您在文档中所读到的,您可以理解以下内容 初始化顺序:
- 确定性
- 基于数学的
- 不依赖于渲染
- 输入绑定到框架
- 帧周期取决于渲染
- 尝试使用变换和物理(即刚体)更新游戏对象的位置。你应该尝试只在两个周期中的一个周期中更新游戏对象的位置。如果游戏对象预计会与物体碰撞或与重力等物理现象交互,请使用Rigidbody.move或Rigidbody.velocity
- 尝试以固定周期读取输入。由于固定周期每帧可能发生0到多次,因此可能会丢失输入。如果在一个帧上使用GetButtonDown(),但FixedCycle未运行,则会在FixedUpdate中“丢失”该输入。通常最好使用布尔或队列来管理输入和物理系统之间的差异。(如在更新中设置bool jump=true,以及在实际执行物理组件时在FixedUpdate中读取/更新bool jump)