Unity腳本時間執行順序


1.Awake

Awake用於腳本喚醒。此方法為系統執行的第一個方法,用於腳本的初始化,在腳本的生命周期中只執行一次。

 

2.Start

Start方法在Awake之后執行,在腳本生命周期中只執行一次。

由於Awake和Start函數的特性與C#中的構造函數類似(一般情況下,在整個腳本生命周期中只執行一次),所以在Unity中也常用來初始化類的成員變量。

 

3.FixedUpdate

FixedUpdate用於固定頻率更新

在Unity中依次單擊菜單項Edit→Project Settings→Time,可以打開Time Manager面板,其中Fixed Timestep選項用於設置FixedUpdate更新頻率,默認為0.02秒,即每秒50次。

通常情況下,FixedUpdate()會比Update()更頻繁的調用。當幀率較低時,在某一幀的時間間隔內FixedUpdate可能會被調用多久;而當幀率很高時,在某一幀的時間間隔內FixedUpdate可能根本不會被調用。

還有一點,在Unity中,若設置Time Scale值為0,可以實現動力學特性的暫停,即所有在FixedUpdate函數中的代碼都不會被執行。(可以用這個特性來實現游戲暫停的功能)

 

4.Update

Update用於正常更新,即用於幀更新后同步場景狀態。此方法每幀都會由系統自動調用一次。

在使用Update()時,對於一些變量,如速度、移動距離等通常需要乘以Time.deltaTime來抵消幀率帶來的影響,使物體狀態的改變看起來比較均勻、正常。而在FixedUpdate中,由於其更新幀率固定,所以不需要采用Time.deltaTime來修正狀態改變幀率。

 

5.LateUpdate

LateUpdate用於延遲更新,此方法在Update()之后執行,每一幀調用一次。

 

6.OnGUI

OnGUI用來繪制用戶交互界面,在一幀中會調用多次。其中,與布局(Layout)和重繪(Repaint)相關的事件會被優先處理,然后是鍵盤和鼠標事件。

 

7.OnDestroy

OnDestroy在當前腳本銷毀時調用。若腳本中動態分配了內存,可以在OnDestroy()中進行釋放。

 

下面腳本可以測試事件函數的順序。

 1 public class MyScript : MonoBehaviour
 2 {
 3     void Awake()
 4     {
 5         print("Awake is called");
 6     }
 7 
 8     void Start()
 9     {
10         print("Start is called");
11     }
12 
13     void OnGUI()
14     {
15         print("OnGUI is called");
16     }
17 
18     void Update()
19     {
20         print("Update is called");
21     }
22 
23     void LateUpdate()
24     {
25         print("LateUpdate is called");
26     }
27 
28     void FixedUpdate()
29     {
30         print("FixedUpdate is called");
31     }
32 
33     void OnDestroy()
34     {
35         print("OnDestroy is called");
36     }
37 }

Unity官方提供的事件順序圖。

 


免責聲明!

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



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