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.unitymake.com/archives/unity/unity_technologyshare/2427
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
Unity Rigidbody Position位置同步问题
往往就因为物理系统位置没有及时同步,因同步时序问题可能导致逻辑发生错误。这个问题要特别注意了,这个问题一旦发生,是难以排查的,是项目中极大的隐患,严……
<<上一篇
下一篇>>
文章目录
关闭
目 录