Unity Rigidbody Position位置同步问题
往往就因为物理系统位置没有及时同步,因同步时序问题可能导致逻辑发生错误。这个问题要特别注意了,这个问题一旦发生,是难以排查的,是项目中极大的隐患,严重可能是致命的。
如果你只设置了Rigidbody的position,那么在这一帧里,程序获取到的transform的position是没有同步的。那么如何同步呢?让我们先分析一下原因。
代码:
void Start()
{
transform.position=new Vector3(-8.4f,-4.2f,7.0f);
}
void FixedUpdate()
{
rigidbody.position = Vector3.zero;
Debug.Log("FixedUpdate: " + transform.position + " frame count: " + Time.frameCount);
}
void Update()
{
Debug.Log("Update: " + transform.position + " frame count: " + Time.frameCount);
}
测试结果:
并不会立即改变transform.position,而会在下一个物理步执行时改变。如果手动改变transform.position/rotation不受影响
由于Unity rigidbody positions是在FixedUpdate结束、update开始前才同步变换到transform。
Rigidbody.positon官方解释:
This is similar to setting transform.position, however the position will only be applied to the transform at the end of the physics step. If you want to continously move a rigidbody or kinematic rigidbody use MovePosition and MoveRotation instead
这个类似设置transform.position,然而rigidbody.position只在物理步结束应用到transform。 如果你想连续移动一个刚体或运动学刚体,使用MovePosition和MoveRotation代替是最佳的。
作者:Miracle
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/unity/unity_technologyshare/2427/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/unity/unity_technologyshare/2427/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
0
打赏
海报
Unity Rigidbody Position位置同步问题
往往就因为物理系统位置没有及时同步,因同步时序问题可能导致逻辑发生错误。这个问题要特别注意了,这个问题一旦发生,是难以排查的,是项目中极大的隐患,严……
文章目录
关闭
[…] 为确保rigidbody旋转的同步问题,我们最好还是使用moveRotation对rotation进行变换。同步问题可见文章:Unity Rigidbody Position位置同步问题 […]