在學習Unity時,掌握如何編寫腳本是必須掌握的一項基本技能。可是關於Unity的遊戲腳本中各函數的生命週期是怎樣開始和結束的,它們的執行順序是如何安排的?這一點咱們要清楚的瞭解。html
咱們知道Unity中的腳本大多派生於MonoBehaviour類,因此能夠重寫MonoBehaviour類裏面的方法來實現咱們想要的功能。那麼自定義腳本中的各函數執行順序和MonoBehaviour裏面的函數執行順序大體是同樣的。函數
首先介紹一下MonoBehaviour類裏面的成員變量和成員函數。佈局
1 public class MonoBehaviour : Behaviour 2 { 3 public MonoBehaviour(); 4 5 public bool useGUILayout { get; set; } 6 7 public void CancelInvoke(); 8 public void CancelInvoke(string methodName); 9 public void Invoke(string methodName, float time); 10 public void InvokeRepeating(string methodName, float time, float repeatRate); 11 public bool IsInvoking(); 12 public bool IsInvoking(string methodName); 13 public static void print(object message); 14 public Coroutine StartCoroutine(IEnumerator routine); 15 [ExcludeFromDocs] 16 public Coroutine StartCoroutine(string methodName); 17 public Coroutine StartCoroutine(string methodName, object value); 18 public Coroutine StartCoroutine_Auto(IEnumerator routine); 19 public void StopAllCoroutines(); 20 public void StopCoroutine(Coroutine routine); 21 public void StopCoroutine(IEnumerator routine); 22 public void StopCoroutine(string methodName); 23 }
注:對於MonoBehaviour類的成員變量和成員函數,只做一些相關介紹,具體的使用方法在之後會陸續進行舉例說明。或者能夠參考Unity的API手冊。學習
Variables 變量spa
useGUILayout 禁用此項,將會跳過GUILayout佈局階段3d
Functions 函數code
Overridable Functions 可重寫函數htm
LateUpdate 原型:void LateUpdate();當MonoBehaviour啓用時,LateUpdate函數在每一幀被調用。LateUpdate是在全部Update函數調用後被調用。這可用於調整腳本執行順序。blog
FixedUpdate 原型:void FixedUpdate();當MonoBehaviour啓用時,FixedUpdate函數在每一幀被調用。生命週期
Awake 原型:void Awake();當腳本實例被載入時Awake被調用。Awake用於在遊戲開始以前初始化變量或遊戲狀態。在腳本整個生命週期內它僅被調用一次。
Start 原型:void Start();Start僅在Update函數第一次被調用前調用。和Awake不一樣的是,Awake函數的調用要早於Start,而且Start函數只在腳本實例被啓用時調用。
Reset 原型:void Reset();重置爲默認值。Reset是在用戶點擊檢視面板的Reset按鈕或者首次添加該組件時被調用。此函數只在編輯模式下被調用。Reset最經常使用於在檢視面板中給定一個最經常使用的默認值。
以上是經常使用的成員函數,還有一些成員函數是關於鼠標操做事件的,好比:OnMouseOver(),OnMouseEnter()等。
另外OnGUI()函數也是比較經常使用的,它主要負責窗口控件的渲染和管理。
接下來附上一張官方文檔對腳本中各函數生命週期的圖表:
圖片來源於:http://docs.unity3d.com/Manual/ExecutionOrder.html
可見Unity腳本從建立到銷燬是具備一個完整的生命週期的,主要的調用順序以下:
OnGUI函數會在每幀上屢次被調用,由於要時刻準備相應裏面的GUI事件。