问题背景
- 通过Update方法同步对象A到对象B的Transform,如下:
// in object a
void Update()
{
a.transform.position = b.transform.position;
}
- 运行时发现,对象A并不紧随对象B,总差一点儿,而且还抖动(虚影),对象B移动速度(幅度)越大,此现象越明显。
问题解析
- Unity有个主循环,一直在更新物体位置,然后渲染物体。
- 如果在一次循环中,先更新B的Transform,再执行A和B的同步,那么结果会很完美。
- 如果先执行A和B的同步,然后又更新B的Transform,然后再渲染物体,显然A和B不在同一个位置,A就会出现抖动现象。
解决方案
https://www.jianshu.com/p/21ac16f190cf
- 可发现几个更新事件按顺序为:FixedUpdate()->Update()->LateUpdate()。
- 各个事件之间间隔诸多可能改变transform的处理过程。
- 最后为LateUpdate()事件,并且之后就是OnWillRenderObject(),要进行渲染了。
- 因此“将与最终渲染效果有关系的代码放在LateUpdate()事件中会得到比较稳定的渲染结果,比如同步对象的transform。”
网友评论