Unity內(nèi)置函數(shù)執(zhí)行順序介紹
官網(wǎng)那張生命周期的圖是SVG,但是阿b不支持這個格式,我只好轉(zhuǎn)個 PNG 來講解了:

附2018版本文檔鏈接
https://docs.unity3d.com/cn/2018.4/Manual/ExecutionOrder.html
但其實常用也就幾個:
表示開始的函數(shù)
Awake():在場景開始的時候調(diào)用,僅調(diào)用一次,最早。
OnEnable():在腳本啟用的時候調(diào)用,如果將其禁用再啟用,會再次觸發(fā)。
Start():在第一幀更新之前調(diào)用,僅調(diào)用一次。
以上這三個函數(shù)通常用于腳本的初始化什么的,默認(rèn)執(zhí)行順序如上。
其中Awake會在一開始調(diào)用,一開始的意思是,哪怕掛載的腳本沒有打勾,設(shè)置的 enable 是false,只要掛載物體可用,便會調(diào)用Awake函數(shù)。
OnEnable函數(shù)可能是會在游戲過程中多次調(diào)用的,只要你將其禁用再啟用。
Start函數(shù)總是會在第一次調(diào)用OnEnable后調(diào)用,但是也只有一次。
和循環(huán)相關(guān)的函數(shù)
FixedUpdate():表示物理更新,每一幀間隔是固定的,由Unity模擬得來。
Update():實際更新,在每一個實際幀執(zhí)行。
LateUpdate():在Update執(zhí)行后調(diào)用,通常用作鏡頭移動,以確保畫面正常。
只要腳本處于激活狀態(tài),那么這三個函數(shù)將會每秒調(diào)用幾十次,不同的是,FixedUpdate默認(rèn)每秒調(diào)用50次,這個數(shù)字可以在 Edit->ProjectSetting->Time->Fixed Timestep 中修改間隔來設(shè)置,需要說明的是,這個函數(shù)的執(zhí)行是由Unity模擬而來,并不是實際的每一幀,如果將輸入判斷放置在這個函數(shù)中會出現(xiàn)失效的情況。
由于這個函數(shù)的執(zhí)行間隔是固定的,因此我們通常將物理模擬以及一些時間判斷的累加放在這個函數(shù)中,以獲取更加精準(zhǔn)的結(jié)果

而Update函數(shù)作為實際的每一幀,其執(zhí)行的次數(shù)取決于當(dāng)前電腦的配置以及正在進(jìn)行的計算內(nèi)容,當(dāng)你的游戲正在執(zhí)行一項密集計算時,一秒可能也就只有幾幀,表示 Update 間隔的Time.deltaTime 變量也會相應(yīng)變大。
至于 LateUpdate 函數(shù),我目前而言只在跟隨官方教程的3D項目中使用過(但是由于暈3D以及建模太麻煩了就沒有做3D的),其主要就是更新跟隨玩家的攝像機(jī),以確保攝像機(jī)的視角不會穿模,不會拍到玩家的位置還沒更新時候的情況。
結(jié)束的函數(shù)
常用的有3個
OnApplicationQuit():在程序退出的時候觸發(fā)。
OnDisable():在腳本被禁用的時候觸發(fā)。
OnDestroy():在腳本被移除的時候觸發(fā)。
是的,觸發(fā)的順序就是程序退出—>禁用? —>移除。
程序退出沒什么好說的,就是會在程序退出的時候調(diào)用。
OnDisable 則是和OnEnable 類似,在每一次腳本的激活狀態(tài)改變時觸發(fā)。
OnDestroy 函數(shù),當(dāng)你將腳本移除,或者腳本附加的對象被銷毀的時候,觸發(fā)。

更多的東西,大家可以參考官方的文檔,這篇專欄就是簡單介紹一下比較常用的一些函數(shù)啦。