unity脚本运行顺序具体的解释
生活随笔
收集整理的這篇文章主要介紹了
unity脚本运行顺序具体的解释
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
unity腳本自帶函數執行順序例如以下:將以下腳本掛在隨意物體執行就可以得到
以下我們針對每個方法進行具體的說明(摘自http://www.unitymanual.com/thread-14461-1-1.html):
1.Awake:用于在游戲開始之前初始化變量或游戲狀態。在腳本整個生命周期內它僅被調用一次.Awake在全部對象被初始化之后調用。所以你能夠安全的與其它對象對話或用諸如GameObject.FindWithTag()這種函數搜索它們。每一個游戲物體上的Awake以隨機的順序被調用。
2.Start:僅在Update函數第一次被調用前調用。Start在behaviour的生命周期中僅僅被調用一次。
3.FixedUpdate:固定幀更新。在Unity導航菜單條中。點擊“Edit”-->“Project Setting”-->“Time”菜單項后,右側的Inspector視圖將彈出時間管理器,當中“Fixed Timestep”選項用于設置FixedUpdate()的更新頻率,更新頻率默覺得0.02s。
4.Update:正常幀更新,用于更新邏輯。每一幀都運行,處理Rigidbody時。須要用FixedUpdate取代Update。比如:給剛體加一個作用力時,你必須應用作用力在FixedUpdate里的固定幀,而不是Update中的幀。(兩者幀長不同)FixedUpdate,每固定幀繪制時運行一次。和update不同的是FixedUpdate是渲染幀運行,假設你的渲染效率低下的時候FixedUpdate調用次數就會跟著下降。
5.LateUpdate:在全部Update函數調用后被調用,和fixedupdate一樣都是每一幀都被調用運行,這可用于調整腳本運行順序。比如:當物體在Update里移動時,尾隨物體的相機能夠在LateUpdate里實現。LateUpdate,在每幀Update運行完成調用。他是在全部update結束后才調用,比較適合用于命令腳本的運行。官網上樣例是攝像機的尾隨,都是在全部update操作完才跟進攝像機。不然就有可能出現攝像機已經推進了,可是視角里還未有角色的空幀出現。
6.OnGUI:在渲染和處理GUI事件時調用。
7.Reset:在用戶點擊檢視面板的Resetbutton或者首次加入該組件時被調用。此函數僅僅在編輯模式下被調用。
8.OnDisable:當物體被銷毀時 OnDisable將被調用,而且可用于隨意清理代碼。腳本被卸載時,OnDisable將被調用,OnEnable在腳本被加載后調用。注意: OnDisable不能用于協同程序。
9.OnDestroy:當MonoBehaviour將被銷毀時,這個函數被調用。OnDestroy僅僅會在預先已經被激活的游戲物體上被調用。注意:OnDestroy也不能用于協同程序。
備注:
協同程序,即在主程序執行時同一時候開啟還有一段邏輯處理,來協同當前程序的執行。換句話說,開啟協同程序就是開啟一個線程。在Unity3d中。使用MonoBehaviour.StartCoroutine方法就可以開啟一個協同程序,也就是說該方法必須在MonoBehaviour或繼承于MonoBehaviour的類中調用。
????????游戲蠻牛:http://www.unitymanual.com
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
版權聲明:本文博主原創文章,博客,未經同意不得轉載。
總結
以上是生活随笔為你收集整理的unity脚本运行顺序具体的解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 条款33:避免遮掩继承而来的名称
- 下一篇: UITableView加载几种不同的ce