1,
編輯
Reset:Reset函數在腳本屬性第一次添加到對象上初始化的時候就被調用,當然這個函數也可以顯式調用。
場景第一次加載
下面的函數會在場景加載的時候被調用(場景中的每個對象只會調用1次)。
Awaka:當一個prefab在初始化完成之后,這個函數會在任何Start函數調用前被激活。(如果一個對象在啟動階段是未激活狀態,Awaka是不會被調用的)
OnEnable:只有當對象是激活狀態才會被調用,這個函數會在對象被激活之后立刻調用。一個MonoBehaviour實例被創建后就會調用,例如關卡被加載或一個帶有腳本組件的對象初始化完成。
OnLevelWasLoaded:這個函數是用來通知游戲一個新的關卡已經加載完成。
對于所有添加到場景中的對象來說,Awaka和OnEnable函數對于所有的腳本來說會在Start、Update之前被執行。
在第一幀更新前
Start:當腳本實例被激活時的第一幀刷新前,Start就會被調用。
對于所有添加到場景中的對象,Start函數對于所有的腳本來說會在Update之前被調用。
在每一幀中
OnApplicationPause:當暫停狀態激活的那一幀的最后,這個函數會被調用。
刷新順序
FixedUpdate:FixedUpdate比Update函數更經常被調用,它可以在一幀內多次調用。如果幀率比較低,它可能會被調用多次,如果幀率比較高,它可能不會被調用。所有的物理計算和刷新都會在FixedUpdate之后立即進行。如果要在FixedUpdate中執行移動計算,你不需要使用Time.deltaTime來乘以你的值,因為FixedUpdate是基于一個可靠的定時器被調用,獨立于幀率之外。
Update:Update函數會每幀調用一次,它是每幀最重要的刷新函數。
LateUpdate:每幀Update函數結束后,LateUpdate就會被調用。當LateUpdate開始時,任何Update內的計算都會結束。一個常見的LateUpdate應用就是第三人稱視角跟隨,如果你讓你的主角移動和轉向在Update函數內進行,你可以把所有的攝像機移動和旋轉計算放在LateUpdate里面,這可以保證主角在攝像機跟隨前已經移動結束。
渲染
OnPreCull:在攝像機剔除整個場景的時候調用,剔除決定了哪些對象對攝像機來說是可見的。OnPreCull會在剔除進行前調用。
OnBecameVisible/OnBecameInvisible:對任意的攝像機,在對象變可見和不可見的時候調用。
OnWillRenderObject:對每個攝像機只有當對象是可見的情況下調用一次。
OnPreRender:在攝像機開始渲染場景之前調用。
OnRenderObject:當常規的場景渲染完成后被調用,可以在這個時候使用GL類或者Graphics.DrawMeshNow來繪制自定義的幾何。
OnPostRender:當攝像機完成場景渲染后調用。
OnRenderImage:當場景渲染允許執行圖片的后期處理的時候調用,例如ImageEffects。
OnGUI:在一幀中調用多次來應答GUI事件。布局和重繪事件會優先處理,接著是鍵盤/鼠標的輸入事件。
OnDrawGizmos:出于可視化目的,處理場景中繪制Gizmos對象。
協同程序
正常的協程刷新是在Unpdate函數返回時運行。一個協程是一個能夠暫停其執行(yield)直到YieldInstruction結束后的一個函數。下面是協程的不同用法:
yield:協程會在下一幀調用完所有的Update函數后持續執行。
yield WaitForSeconds:在下一幀調用完所有的Update函數后,一個特定的延遲之后執行。
yield WaitForFixedUpdate:在所有的腳本已經調用完所有的FixedUpdate后執行。
yield WWW:一個WWW的下載完成后執行。
yield StartCoroutine:協程鏈,會先等待自定義協程完成后執行。
對象銷毀
OnDestroy:這個函數會在對象存在的最后一幀所有的幀刷新函數調用結束后調用(對象可能會因為Object.Destroy而銷毀或者隨著場景的關閉)
退出
這些函數會在場景中所有的激活的對象上調用:
OnApplicationQuit:在應用程序退出前所有的游戲對象會調用。在編輯器中,當停止playmode就會調用這個函數。在web播放器中,當web view關閉時就會調用這個函數。
OnDisable:當behaviour變為disabled or inactive狀態,這個函數就會被調用。
2,
先執行的方法是Awake,這是生命周期的開始,用于進行激活時的初始化代碼,一般可以在這個地方將當前腳本禁用:this.enable=false,如果這樣做了,則會直接跳轉到OnDisable方法執行一次,然后其他的任何方法,都將不再被執行。
如果當前腳本處于可用狀態,則正常的執行順序是繼續向下執行OnEnable,當然我們可以在另外一個腳本中實現這個腳本的啟動:this.enable = true;
再向下執行,會進行一個判斷,如果start方法還沒有被執行一次,則會被執行一次,如果已經執行了,則不會再被執行。這是什么意思呢?我們可以在某個腳本中將組件禁用this.enable=false,再啟動時會轉到OnEnable處執行,這時繼續往下走,發現start執行過了,將不再被執行。比如說:第一次啟動時,將怪物的初始位置定在了(0,0,0)點,然后怪物可能會發生了位置的變換,后來被禁用了,再次啟動時,不會讓怪物又回到初始的(0,0,0)位置。
繼續向后執行,就是Update了,然后FixUpdate,再然后是LateUpdate,如果后面寫了Reset,則會回到Update,在這4個事件間可以進行循環流動。
再向后執行,就進入了渲染模塊(Rendering),非常重要的一個方法就是OnGUI,用于繪制圖形界面。當然,如果你使用了NGUI,這個生命周期的事情你就不用考慮了。
再向后,就是卸載模塊(TearDown),這里主要有兩個方法OnDisable與OnDestory。當被禁用(enable=false)時,會執行OnDisable方法,但是這個時候,腳本不會銷毀,在這個狀態下,可以重新回到OnEnable狀態(enable=true)。當手動銷毀或附屬的游戲對象被銷毀時,OnDestory才會被執行,當前腳本的生命周期結束。
文章名稱:Unity腳本生命周期-創新互聯
當前網址:http://vcdvsql.cn/article40/dsdcho.html
成都網站建設公司_創新互聯,為您提供標簽優化、外貿建站、動態網站、搜索引擎優化、響應式網站、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯