Unity腳本中各函數成員的生命週期

在學習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


  • Invoke 原型:void Invoke(string methodName,float time);根據時間調用指定方法名的方法。
  • InvokeRepeating 原型:void InvokeRepeating (methodName : string, time : float, repeatRate : float);每隔指定時間調用指定方法名的方法,從第一次調用開始,每隔repeatRate時間調用一次.
  • CancelInvoke 原型:void CancelInvoke ();取消這個MonoBehaviour上的全部調用。void CancelInvoke(string methodName);取消全部名爲methodName的調用。
  • IsInvoking 原型:bool IsInvoking(string methodName);某指定函數是否在等候調用。正在調用返回true,不然返回false。
  • StartCoroutine 原型:Coroutine StartCoroutine(IEnumerator routine);開始協同程序。
  • StopCoroutline 中止methodName的全部協同程序。
  • StopAllCoroutline 中止全部動做的協同程序。

 

Overridable Functions 可重寫函數htm


  •  Update 原型:void Update();當MonoBehaviour啓用時,Update函數在每一幀被調用。
  • 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事件。

相關文章
相關標籤/搜索