Unity腳本執(zhí)行順序:
Awake -->OnEable--> Start --> FixedUpdate --> Update --> LateUpdate -->OnGUI -->Reset --> OnDisable -->OnDestroy
1.Awake:用于在游戲開始之前初始化變量或游戲狀態(tài)磅叛。在腳本整個生命周期內(nèi)它僅被調(diào)用一次.Awake在所有對象被初始化之后調(diào)用压恒,所以你可以安全的與其他對象對話或用諸如GameObject.FindWithTag()這樣的函數(shù)搜索它們。每個游戲物體上的Awake以隨機的順序被調(diào)用筋搏。因此,你應(yīng)該用Awake來設(shè)置腳本間的引用,并用Start來傳遞信息Awake總是在Start之前被調(diào)用嘱函。它不能用來執(zhí)行協(xié)同程序币厕。
2.Start:僅在Update函數(shù)第一次被調(diào)用前調(diào)用列另。Start在behaviour的生命周期中只被調(diào)用一次。它和Awake的不同是Start只在腳本實例被啟用時調(diào)用旦装。你可以按需調(diào)整延遲初始化代碼页衙。Awake總是在Start之前執(zhí)行。這允許你協(xié)調(diào)初始化順序。在所有腳本實例中店乐,Start函數(shù)總是在Awake函數(shù)之后調(diào)用艰躺。
3.FixedUpdate:固定幀更新,在Unity導(dǎo)航菜單欄中眨八,點擊“Edit”-->“Project Setting”-->“Time”菜單項后腺兴,右側(cè)的Inspector視圖將彈出時間管理器,其中“Fixed Timestep”選項用于設(shè)置FixedUpdate()的更新頻率廉侧,更新頻率默認為0.02s页响。
4.Update:正常幀更新,用于更新邏輯段誊。每一幀都執(zhí)行闰蚕,處理Rigidbody時,需要用FixedUpdate代替Update连舍。例如:給剛體加一個作用力時没陡,你必須應(yīng)用作用力在FixedUpdate里的固定幀,而不是Update中的幀烟瞧。(兩者幀長不同)FixedUpdate诗鸭,每固定幀繪制時執(zhí)行一次,和update不同的是FixedUpdate是渲染幀執(zhí)行参滴,如果你的渲染效率低下的時候FixedUpdate調(diào)用次數(shù)就會跟著下降强岸。FixedUpdate比較適用于物理引擎的計算,因為是跟每幀渲染有關(guān)砾赔。Update就比較適合做控制蝌箍。
5.LateUpdate:在所有Update函數(shù)調(diào)用后被調(diào)用,和fixedupdate一樣都是每一幀都被調(diào)用執(zhí)行暴心,這可用于調(diào)整腳本執(zhí)行順序妓盲。例如:當物體在Update里移動時,跟隨物體的相機可以在LateUpdate里實現(xiàn)专普。LateUpdate,在每幀Update執(zhí)行完畢調(diào)用悯衬,他是在所有update結(jié)束后才調(diào)用,比較適合用于命令腳本的執(zhí)行檀夹。官網(wǎng)上例子是攝像機的跟隨筋粗,都是在所有update操作完才跟進攝像機,不然就有可能出現(xiàn)攝像機已經(jīng)推進了炸渡,但是視角里還未有角色的空幀出現(xiàn)娜亿。
6.OnGUI:在渲染和處理GUI事件時調(diào)用。比如:你畫一個button或label時常常用到它蚌堵。這意味著OnGUI也是每幀執(zhí)行一次买决。
7.Reset:在用戶點擊檢視面板的Reset按鈕或者首次添加該組件時被調(diào)用沛婴。此函數(shù)只在編輯模式下被調(diào)用。Reset最常用于在檢視面板中給定一個默認值督赤。
8.OnDisable:當物體被銷毀時 OnDisable將被調(diào)用嘁灯,并且可用于任意清理代碼。腳本被卸載時够挂,OnDisable將被調(diào)用旁仿,OnEnable在腳本被載入后調(diào)用藕夫。注意: OnDisable不能用于協(xié)同程序孽糖。
9.OnDestroy:當MonoBehaviour將被銷毀時,這個函數(shù)被調(diào)用毅贮。OnDestroy只會在預(yù)先已經(jīng)被激活的游戲物體上被調(diào)用办悟。注意:OnDestroy也不能用于協(xié)同程序。
備注:協(xié)同程序滩褥,即在主程序運行時同時開啟另一段邏輯處理病蛉,來協(xié)同當前程序的執(zhí)行。換句話說瑰煎,開啟協(xié)同程序就是開啟另外一個線程铺然。使用MonoBehaviour.StartCoroutine方法即可開啟一個協(xié)同程序,也就是說該方法必須在MonoBehaviour或繼承于MonoBehaviour的類中調(diào)用酒甸。