void Update ( ) 更新?
void FixedUpdate ( ) 固定更新
相同點:當MonoBehaviour啟用時,其在每一幀被調用,都是用來更新的。?
異同點:第一點不同:?
Update()每一幀的時間不固定,即第一幀與第二幀的時間間隔t1和第三幀與第四幀的時間間隔t2不一定相同。比如:
代碼片段:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
這里t1 = 0.04 - 0.02 = 0.02;t2 = 0.55 - 0.35 = 0.2;大約相差了十倍。而如果使用FixedUpdate()會出現什么情況?
代碼片段:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
我們很清楚地看到t1 = t2 = 0.02。也就是說,FixedUpdate()每幀與每幀之間相差的時間是固定的,而Update()不是固定的。?
第二點不同:?
Update受當前渲染的物體影響,這與當前場景中正在被渲染的物體有關(比如人物的面數,個數等),有時快有時慢,幀率會變化,Update被調用的時間間隔就會發生變化。但是FixedUpdate則不受幀率的變化影響,它是以固定的時間間隔來被調用。?
在官網文檔中也提到說: 處理Rigidbody時,需要用FixedUpdate代替Update。例如:給剛體加一個作用力時,你必須應用作用力在FixedUpdate里的固定幀,而不是Update中的幀。(兩者幀長不同)。正是因為FixedUpdate是以固定的時間間隔來被調用,所以人物運動起來比較平滑(運動起來不會有忽快忽慢的感覺,像是跳幀似的),這也就是為什么處理Rigidbody時要用FixedUpdate了(當然還有其他一些原因)。FixedUpdate是以固定的時間間隔來被調用的,而這個固定的時間是可以修改的。?
Edit->Project Setting->time 下的Fixed timestep。?
?
這里是0.02;與上面做的實驗t1 = t2 = 0.02一致