unity腳本運行順序具體的解釋


unity 腳本自帶函數執行順序例如以下:將以下腳本掛在隨意物體執行就可以得到

  Awake ->OnEable-> Start ->-> FixedUpdate-> Update  -> LateUpdate ->OnGUI ->Reset -> OnDisable ->OnDestroy

using UnityEngine;
using System.Collections;

public class timetest : MonoBehaviour {
	
	 void LateUpdate()
    {
        print("LateUpdate");
    }

    void OnGUI()
    {
        print("OnGUI");
    }

    void Awake()
    {
        print("Awake");
    }

    void OnEnable()
    {
        print("OnEnable");
    }

    void Start()
    {
        print("Start");
    }
	 void Update()
    {
        print("Update");
    }
	void FixedUpdate()
    {
        print("FixedUpdate");
    }
   
	void Reset()
	{
		 print("OnReset");
	}
   

    void OnDestroy()
    {
        print("OnDestroy");
    }

    void OnDisable()
    {
        print("OnDisable");
    }
}

打印結果例如以下


  以下我們針對每個方法進行具體的說明(摘自http://www.unitymanual.com/thread-14461-1-1.html):

  1.Awake:用於在游戲開始之前初始化變量或游戲狀態。在腳本整個生命周期內它僅被調用一次.Awake在全部對象被初始化之后調用。所以你能夠安全的與其它對象對話或用諸如GameObject.FindWithTag()這種函數搜索它們。每一個游戲物體上的Awake以隨機的順序被調用。

因此。你應該用Awake來設置腳本間的引用。並用Start來傳遞信息Awake總是在Start之前被調用。它不能用來運行協同程序。



  2.Start:僅在Update函數第一次被調用前調用。Start在behaviour的生命周期中僅僅被調用一次。

它和Awake的不同是Start僅僅在腳本實例被啟用時調用。

你能夠按需調整延遲初始化代碼。Awake總是在Start之前運行。這同意你協調初始化順序。在全部腳本實例中。Start函數總是在Awake函數之后調用。
  3.FixedUpdate:固定幀更新。在Unity導航菜單條中。點擊“Edit”-->“Project Setting”-->“Time”菜單項后,右側的Inspector視圖將彈出時間管理器,當中“Fixed Timestep”選項用於設置FixedUpdate()的更新頻率,更新頻率默覺得0.02s。
4.Update:正常幀更新,用於更新邏輯。每一幀都運行,處理Rigidbody時。須要用FixedUpdate取代Update。比如:給剛體加一個作用力時,你必須應用作用力在FixedUpdate里的固定幀,而不是Update中的幀。(兩者幀長不同)FixedUpdate,每固定幀繪制時運行一次。和update不同的是FixedUpdate是渲染幀運行,假設你的渲染效率低下的時候FixedUpdate調用次數就會跟着下降。

FixedUpdate比較適用於物理引擎的計算,由於是跟每幀渲染有關。

Update就比較適合做控制。
  5.LateUpdate:在全部Update函數調用后被調用,和fixedupdate一樣都是每一幀都被調用運行,這可用於調整腳本運行順序。比如:當物體在Update里移動時,尾隨物體的相機能夠在LateUpdate里實現。LateUpdate,在每幀Update運行完成調用。他是在全部update結束后才調用,比較適合用於命令腳本的運行。官網上樣例是攝像機的尾隨,都是在全部update操作完才跟進攝像機。不然就有可能出現攝像機已經推進了,可是視角里還未有角色的空幀出現。

  6.OnGUI:在渲染和處理GUI事件時調用。

比方:你畫一個button或label時經常常使用到它。

這意味着OnGUI也是每幀運行一次。

  7.Reset:在用戶點擊檢視面板的Resetbutton或者首次加入該組件時被調用。此函數僅僅在編輯模式下被調用。

Reset最經常使用於在檢視面板中給定一個默認值。

  8.OnDisable:當物體被銷毀時 OnDisable將被調用,而且可用於隨意清理代碼。腳本被卸載時,OnDisable將被調用,OnEnable在腳本被加載后調用。注意: OnDisable不能用於協同程序。



  9.OnDestroy:當MonoBehaviour將被銷毀時,這個函數被調用。OnDestroy僅僅會在預先已經被激活的游戲物體上被調用。注意:OnDestroy也不能用於協同程序。

  備注:

  協同程序,即在主程序執行時同一時候開啟還有一段邏輯處理,來協同當前程序的執行。換句話說,開啟協同程序就是開啟一個線程。在Unity3d中。使用MonoBehaviour.StartCoroutine方法就可以開啟一個協同程序,也就是說該方法必須在MonoBehaviour或繼承於MonoBehaviour的類中調用。
        游戲蠻牛:http://www.unitymanual.com

版權聲明:本文博主原創文章,博客,未經同意不得轉載。


免責聲明!

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



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