Unity3D中自帶事件函數(shù)的執(zhí)行順序

在Unity3D繼承自MonoBehavior的腳本中弯囊,有幾個(gè)Unity3D自帶的事件函數(shù)按照預(yù)定的順序執(zhí)行作為腳本執(zhí)行。其執(zhí)行順序如下:

編輯器(Editor)

  • Reset:Reset函數(shù)被調(diào)用來初始化腳本屬性當(dāng)腳本第一次被附到對(duì)象上铜秆,并且在Reset命令被使用時(shí)也會(huì)調(diào)用械蹋。
    編者注:Reset是在用戶點(diǎn)擊Inspector面板上Reset按鈕或者首次添加該組件時(shí)被調(diào)用。Reset最常用于在見識(shí)面板中給定一個(gè)默認(rèn)值裆蒸。

第一次場(chǎng)景加載(First Scene Load)
這些函數(shù)會(huì)在一個(gè)場(chǎng)景開始(場(chǎng)景中每個(gè)物體只調(diào)用一次)時(shí)被調(diào)用。

  • Awake:這個(gè)函數(shù)總是在任何Start()函數(shù)之前一個(gè)預(yù)設(shè)被實(shí)例化之后被調(diào)用搀暑,如果一個(gè)GameObject是非激活的(inactive)沥阳,在啟動(dòng)期間Awake函數(shù)是不會(huì)被調(diào)用的直到它是活動(dòng)的(active)。
  • OnEnable:只有在對(duì)象是激活(active)狀態(tài)下才會(huì)被調(diào)用自点,這個(gè)函數(shù)只有在object被啟用(enable)后才會(huì)調(diào)用桐罕。這會(huì)發(fā)生在一個(gè)MonoBehaviour實(shí)例被創(chuàng)建,例如當(dāng)一個(gè)關(guān)卡被加載或者一個(gè)帶有腳本組件的GameObject被實(shí)例化桂敛。

注意:當(dāng)一個(gè)場(chǎng)景被添加到場(chǎng)景中功炮,所有腳本上的Awake()和OnEable()函數(shù)將會(huì)被調(diào)用在Start()、Update()等它們中任何函數(shù)被調(diào)用之前术唬。自然的薪伏,當(dāng)一個(gè)物體在游戲過程中被實(shí)例化時(shí)這不能被強(qiáng)制執(zhí)行。

第一幀更新之前(Before the first frame update)

  • Start:只要腳本實(shí)例被啟用了Start()函數(shù)將會(huì)在Update()函數(shù)第一幀之前被調(diào)用粗仓。

對(duì)于那些被添加到場(chǎng)景中的物體嫁怀,所有腳本上的Start()函數(shù)將會(huì)在它們中任何的Update()函數(shù)之前被調(diào)用,自然的借浊,當(dāng)一個(gè)物體在游戲過程中被實(shí)例化時(shí)這不能被強(qiáng)制執(zhí)行塘淑。

在幀之間(In between frames)

  • OnApplicationPause:這個(gè)函數(shù)將會(huì)被調(diào)用在暫停被檢測(cè)有效的在正常的幀更新之間的一幀的結(jié)束時(shí)。在OnApplicationPause被調(diào)用后將會(huì)有額外的一幀用來允許游戲顯示顯示圖像表示在暫停狀態(tài)下蚂斤。

更新順序(Update Order)

當(dāng)你在跟蹤游戲邏輯和狀態(tài)存捺,動(dòng)畫,相機(jī)位置等的時(shí)候曙蒸,有幾個(gè)不同的事件函數(shù)你可以使用捌治。常見的模式是在Update()函數(shù)中執(zhí)行大多數(shù)任務(wù),但是也有其它的函數(shù)你可以使用纽窟。

  • FixedUpdate:FixedUpdate函數(shù)經(jīng)常會(huì)比Update函數(shù)更頻繁的被調(diào)用肖油。它一幀會(huì)被調(diào)用多次,如果幀率低它可能不會(huì)在幀之間被調(diào)用臂港,就算幀率是高的构韵。所有的圖形計(jì)算和更新在FixedUpdate之后會(huì)立即執(zhí)行。當(dāng)在FixedUpdate里執(zhí)行移動(dòng)計(jì)算趋艘,你并不需要Time.deltaTime乘以你的值,這是因?yàn)镕ixedUpdate是按真實(shí)時(shí)間凶朗,獨(dú)立于幀率被調(diào)用的瓷胧。
  • Update:Update每一幀都會(huì)被調(diào)用,對(duì)于幀更新它是主要的負(fù)荷函數(shù)棚愤。
  • LateUpdate:LateUpdate會(huì)在Update結(jié)束之后每一幀被調(diào)用搓萧,任何計(jì)算在Update里執(zhí)行結(jié)束當(dāng)LateUpdate開始時(shí)杂数。LateUpdate常用為第三人稱視角相機(jī)跟隨。

渲染(Rendering)

  • OnPreCull:在相機(jī)剔除場(chǎng)景前被調(diào)用瘸洛。剔除是取決于哪些物體對(duì)于攝像機(jī)是可見的揍移,OnPreCull僅在剔除起作用之前被調(diào)用。
  • OnBecameVisible/OnBecameInvisible:當(dāng)一個(gè)物體對(duì)任意攝像機(jī)變得可見/不可見時(shí)被調(diào)用反肋。
  • OnPreRender:在攝像機(jī)開始渲染場(chǎng)景之前調(diào)用那伐。
  • OnRenderObject:在指定場(chǎng)景渲染完成之后調(diào)用,你可以使用GL類或者Graphics.DrawMeshNow 來繪制自定義幾何體在這里石蔗。
  • OnPostRender:在攝像機(jī)完成場(chǎng)景渲染之后調(diào)用罕邀。
  • OnRenderImage(Pro Only):在場(chǎng)景徐然完成之后允許屏幕圖像后期處理調(diào)用。
  • OnGUI:為了響應(yīng)GUI事件养距,每幀會(huì)被調(diào)用多次(一般最低兩次)诉探。布局Layout和Repaint事件會(huì)首先處理,接下來處理的是是通過
    Layout和鍵盤/鼠標(biāo)事件對(duì)應(yīng)的每個(gè)輸入事件棍厌。
  • OnDrawGizmos:用于可視化的繪制一些小玩意在場(chǎng)景視圖中肾胯。

協(xié)同程序(Coroutines)

正常的協(xié)同程序更新是在Update函數(shù)返回之后運(yùn)行。一個(gè)協(xié)同程序是可以暫停執(zhí)行(yield)直到給出的依從指令(YieldInstruction )完成耘纱,寫成的不同運(yùn)用:

  • yield:在所有的Update函數(shù)都已經(jīng)被調(diào)用的下一幀該協(xié)程將持續(xù)執(zhí)行敬肚。
  • yield WaitForSeconds:一段指定的時(shí)間延遲之后繼續(xù)執(zhí)行,在所有的Update函數(shù)完成調(diào)用的那一幀之后揣炕。
  • yield WaitForFixedUpdate:所有腳本上的FixedUpdate函數(shù)已經(jīng)執(zhí)行調(diào)用之后持續(xù)帘皿。
  • yield WWW:在WWW下載完成之后持續(xù)。
  • yield StartCoroutine:協(xié)同程序鏈畸陡,將會(huì)等到MuFunc函數(shù)協(xié)程執(zhí)行完成首先鹰溜。

銷毀(When the Object is Destroyed)

  • OnDestory:這個(gè)函數(shù)在會(huì)在一個(gè)對(duì)象銷毀前一幀調(diào)用,會(huì)在所有幀更新一個(gè)對(duì)象存在的最后一幀之后執(zhí)行丁恭,對(duì)象也許會(huì)響應(yīng)Object.Destroy 或一個(gè)場(chǎng)景關(guān)閉時(shí)被銷毀曹动。

退出游戲(When Quitting)
這些函數(shù)會(huì)在你場(chǎng)景中所有的激活的物體上調(diào)用:

  • OnApplicationQuit:這個(gè)函數(shù)在應(yīng)用退出之前的所有游戲物體上調(diào)用,在編輯器(Editor)模式中會(huì)在用戶停止PlayMode時(shí)調(diào)用牲览,在網(wǎng)頁播放器(web player)中會(huì)在網(wǎng)頁視圖關(guān)閉時(shí)調(diào)用墓陈。
  • OnDisable:當(dāng)行為變?yōu)榉菃⒂茫╠isable)或非激活(inactive)時(shí)調(diào)用。

腳本的生命周期流程圖

vital.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末第献,一起剝皮案震驚了整個(gè)濱河市贡必,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庸毫,老刑警劉巖仔拟,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異飒赃,居然都是意外死亡利花,警方通過查閱死者的電腦和手機(jī)科侈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炒事,“玉大人臀栈,你說我怎么就攤上這事∧尤椋” “怎么了权薯?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)欲侮。 經(jīng)常有香客問我崭闲,道長(zhǎng),這世上最難降的妖魔是什么威蕉? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任刁俭,我火速辦了婚禮,結(jié)果婚禮上韧涨,老公的妹妹穿的比我還像新娘牍戚。我一直安慰自己,他們只是感情好虑粥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布如孝。 她就那樣靜靜地躺著,像睡著了一般娩贷。 火紅的嫁衣襯著肌膚如雪第晰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天彬祖,我揣著相機(jī)與錄音茁瘦,去河邊找鬼。 笑死储笑,一個(gè)胖子當(dāng)著我的面吹牛甜熔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播突倍,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼腔稀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了羽历?” 一聲冷哼從身側(cè)響起焊虏,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秕磷,沒想到半個(gè)月后诵闭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跳夭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年涂圆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片币叹。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡润歉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颈抚,到底是詐尸還是另有隱情踩衩,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布贩汉,位于F島的核電站驱富,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匹舞。R本人自食惡果不足惜褐鸥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赐稽。 院中可真熱鬧叫榕,春花似錦、人聲如沸姊舵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽括丁。三九已至荞下,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間史飞,已是汗流浹背尖昏。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祸憋,地道東北人会宪。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚯窥,于是被迫代替她去往敵國(guó)和親掸鹅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 更新:【面試題含答案】http://bbs.9ria.com/thread-288394-1-1.html 高頻問...
    好怕怕閱讀 4,730評(píng)論 3 52
  • 111. [動(dòng)畫系統(tǒng)]如何將其他類型的動(dòng)畫轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫拦赠? 動(dòng)畫->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫]Unit...
    胤醚貔貅閱讀 12,984評(píng)論 3 90
  • 一:什么是協(xié)同程序巍沙? 答:在主線程運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行荷鼠。換句話說句携,開啟協(xié)程就是開啟一...
    好怕怕閱讀 3,878評(píng)論 2 23
  • 一:什么是協(xié)同程序? 在主線程運(yùn)行的同時(shí)開啟另一段邏輯處理允乐,來協(xié)助當(dāng)前程序的執(zhí)行矮嫉,協(xié)程很像多線程削咆,但是不是多線程,...
    胤醚貔貅閱讀 2,075評(píng)論 0 13
  • 可參看 http://wiki.ceeger.com/script:unityengine:classes...
    游戲開發(fā)小Y閱讀 1,301評(píng)論 0 0