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