Unity中Update,FixedUpdate,LateUpdate的區別


void FixedUpdate () 固定更新

void Update ()        更新

void LateUpdate()  晚於更新

 

FixedUpdate () 和 Update ()    

同:當MonoBehaviour啟用時,其在每一幀被調用。都是用來更新的

異:Update()每一幀的時間不固定,即第一幀與第二幀的時間t1和第三幀與第四幀的時間t2不一定相同。FixedUpdate()每幀與每幀之間相差的時間是固定的.

Update受當前渲染的物體影響,這與當前場景中正在被渲染的物體有關(比如人物的面數,個數等),有時快有時慢,幀率會變化,Update被調用的時間間隔就會發生變化。FixedUpdate則不受幀率的變化影響,它是以固定的時間間隔來被調用。

所以一些物理屬性的更新操作應該放在FxiedUpdate中操作,比如Force,ColliderRigidbody等。外設的操作也是,比如說鍵盤或者鼠標的輸入輸出Input,因為這樣GameObject的物理表現的更平滑,更接近現實。

FixedUpdate的時間間隔可以在項目設置中更改,Edit->Project Setting->time 找到Fixed timestep。就可以修改了

 

Update和LateUpdate

LateUpdate是在所有Update函數調用后被調用。可用於調整腳本執行順序。例如:當物體在Update里移動時,跟隨物體的相機可以在LateUpdate里實現。
 Unity后台主線程將 Update LateUpdate  制作成兩個多線程 先去執行Update的線程,等Update 執行完畢后 在去執行LateUpdate線程。
舉個例子,一個宿舍4個人,每個人的起床在update中執行,出發在某個人中的lateupdate執行,這樣就可以保證每個人都起床了才會出發。

因為多個update函數是先后順序是隨機的,所以可能攝像機先update而物體還未移動,而下一幀是若物體先update那么就會出現瞬移的情況。多數攝像機都要加上LateUpdate,即所有場景內的調用結束后再更新攝像機。

比如說:有2個不同的腳本同時在Update中控制一個物體,那么當其中一個腳本改變物體方位、旋轉或者其他參數時,另一個腳本也在改變這些東西,那么這個物體的方位、旋轉就會出現一定的反復。如果還有個物體在Update中跟隨這個物體移動、旋轉的話,那跟隨的物體就會出現抖動。 如果是在LateUpdate中跟隨的話就會只跟隨所有Update執行完后的最后位置、旋轉,這樣就防止了抖動。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM