Unity中FixedUpdate和Update的区别


   最近刚接触Unity一周,发现对于很多组件的原理不是十分清楚,其中一个就是脚本生命周期中的FixedUpdate和Update的区别。其实要想学好Unity必须具备计算机图形学的知识,奈何自己太无知,当初没有学习这门课程,现在只能咬牙自学。

   首先说结论:物理模拟放在FixedUpdate中。

   原因首先得说FixedUpdate和Update的区别,FixedUpdate是每隔一定的周期执行一次,比如每隔1秒执行30次;Update是每帧之前执行一次,比如一般的FPS为30,也就是1秒有30帧,那么也是1秒执行30次。但是每隔一定的周期执行与系统性能无关,无论系统怎么样,都会1秒执行30次。而帧与系统性能有关,通常受到渲染的影响。比如同样一款游戏,性能好的电脑的FPS是30,差一点的可能只有10。这样Update就不是固定的1秒30次了。这也是为什么你玩DOTA的时候为什么总感觉对面手速比你快,也可能是因为人家电脑比你好,同样的画面人家比你快1ms,你的电脑这些画面还在显卡里面处理,所以人家大招比你早放1ms,等你看到画面的时候就是死亡画面了。

  那么为什么物理模拟要放在FixedUpdate中呢?举个例子,A和B相距30米,一个人从A移动到B,在Unity中可能是这样实现的,在Update/FixedUpdate中写个位移函数,每次移动1米。那么对于在FixedUpdate中写,不论电脑怎么样,1秒内执行了30次,这个人从A移动到了B。但是对于写在Update中的情况,如果电脑好,FPS为30,1秒内执行了30次,这个人同样从A移动到了B,但是电脑性能差,FPS为10,1秒执行了10次,这个人只移动了10米。

   当然上面只是个例子,说的专业一点就是Update会因为系统性能产生抖动的现象。

posted @ 2017-07-25 14:37  Initial_Dream  阅读(1532)  评论(0编辑  收藏  举报