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