应该在 Start、Update 或 FixedUpate 函数中对刚体添加力
Posted
技术标签:
【中文标题】应该在 Start、Update 或 FixedUpate 函数中对刚体添加力【英文标题】:Should force be added force to Rigidbody in the Start, Update or FixedUpate function 【发布时间】:2019-01-09 02:06:12 【问题描述】:我是 Unity 新手。
我有Rigidbody2D
,我想在我的播放器中添加常量velocity
。
我想知道在Start
或Update
(或FixedUpate
)中将速度应用于Rigidbody2D
时有什么区别或优点/缺点或基本实践
当我在开始时应用速度一切正常,那么为什么我们每帧都添加速度(Update
方法)?
【问题讨论】:
【参考方案1】:我想为我的播放器添加恒定速度。
Start
函数在这种情况下被消除,因为它仅在脚本是 GameObject 并启用脚本时被调用一次。如果您需要一遍又一遍地施加力,那么Start
函数不是您应该使用的。
Update
函数用于每帧执行任何操作。例如,每帧手动移动对象。
FixedUpdate
函数用于对Rigidbody
执行某些操作,这包括在每个固定帧向其添加力。这是您需要使用的,因为您正在对 Rigidbody
对象执行操作。
您没有提到的另一个是LateUpdate
函数。当您想让 GameObject 跟随相机时使用此选项,因为它是在调用所有 Update
函数之后调用的。
Unity 还有一个ConstantForce
实用程序,可以简化向Rigidbody
添加恒力的过程。有了它,您可以在Start
函数中向ConstantForce
添加一次力,然后它会处理其余的,直到您更改力为止。
ConstantForce2D cForce = targetObj.GetComponent<ConstantForce2D>();
cForce.force = new Vector2(0, 100);
【讨论】:
但是当我在 Start 方法上添加速度(而不是 addForce)时一切正常,我的播放器正在移动,然后我为相机跟随制作脚本。所以我猜开始方法工作得很好,因为速度不应该需要添加每一帧它的速度,而不是恒定变量。 您没有添加速度。您正在设置速度,它会在不考虑当前力的情况下设置新力。它不是恒定的力量。 它最终会停止。你这么认为的原因是你给刚体增加了很大的力。如果你向它添加一个微小的力,你会看到它会因为阻力和重力而尽快开始减速。如果您想要恒定的力,请使用我提到的ConstantForce
组件并在Start
函数中执行,或者在FixedUpdate
函数中使用AddForce
手动执行。以上是关于应该在 Start、Update 或 FixedUpate 函数中对刚体添加力的主要内容,如果未能解决你的问题,请参考以下文章
在 django 中,我应该将执行 create_if_missing 或 update_if_exists 函数的方法放在哪里?
Tip8:Unity中诸如 Awake() Start() Update()等函数的 执行顺序
Java Web Start:自 Java 8 Update 111 以来无法通过代理隧道
如何正确继承Unity的回调函数,如Awake(),Start()和Update和FixedUpdate()?