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


在學習Unity時,掌握如何編寫腳本是必須掌握的一項基本技能。但是關於Unity的游戲腳本中各函數的生命周期是怎樣開始和結束的,它們的執行順序是如何安排的?這一點我們要清楚的了解。

我們知道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 變量


 

useGUILayout  禁用此項,將會跳過GUILayout布局階段


 

Functions 函數


  • 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 可重寫函數


  •  Update 原型:void Update();當MonoBehaviour啟用時,Update函數在每一幀被調用。
  • LateUpdate 原型:void LateUpdate();當MonoBehaviour啟用時,LateUpdate函數在每一幀被調用。LateUpdate是在所有Update函數調用后被調用。這可用於調整腳本執行順序。

  • 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事件。


免責聲明!

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



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