Unity腳本生命周期

生命周期表

腳本周期

1.初始化階段

場景開始時

初始化階段

1.Awake

場景創(chuàng)建時或prefab實例化時,若為inactive則在active時調(diào)用柒昏,僅執(zhí)行一次

一般為了初始化游戲變量和游戲狀態(tài)凳宙。僅執(zhí)行一次。

如果游戲?qū)ο笤趩悠陂g處于非活動狀態(tài)职祷,則在激活之后才會調(diào)用 Awake氏涩。

只要該物體存在于場景中且屬于活躍狀態(tài),就會執(zhí)行Awake有梆,與物體掛載的腳本組件是否激活無關(guān)是尖。

2.OnEnable

僅在游戲?qū)ο笫强杉せ顮顟B(tài)時調(diào)用,取消激活后再次激活也會響應泥耀。

在創(chuàng)建 MonoBehaviour 實例時(例如加載關(guān)卡或?qū)嵗哂心_本組件的游戲?qū)ο髸r)會執(zhí)行此調(diào)用饺汹。

場景加載完,GameObject實例化時痰催,對象enabled時

3.OnLevelWasLoaded

場景全部加載完成后

執(zhí)行此函數(shù)可告知游戲已加載新關(guān)卡兜辞。

4.Reset?

當Scripts第一次的綁定到物體上或者點擊Reset按鈕的時候觸發(fā)。

且只在Editor模式下觸發(fā)夸溶,游戲打包的時候不會觸發(fā)逸吵。

Editor級別,非playmode下腳本掛載時或主動調(diào)用

5.Start

僅在場景中所有Awake 和 OnEnable執(zhí)行后缝裁,所有場景中對象第一幀update之前扫皱,且僅執(zhí)行一次

2.物理計算階段

物理階段

1.fixedupdate

每一幀會執(zhí)行的調(diào)用,所有的物理行為的每幀更新的邏輯都應在放在這里面捷绑,比如剛體的運算韩脑。

FixedUpdate的幀率是固定的,由FixedTimestepd的值決定胎食,路徑:Edit->ProjectSetting->Time->FixedTimestep扰才。但每一幀的時間間隔不固定,如果每幀都有大量的運算厕怜,為了避免運算超時影響主幀(Update)衩匣,邏輯運算受臨界值MaximumAllowedTimestep控制蕾总,超出時間就會退出運算。

Update幀率不固定琅捏,會受到時間縮放的影響生百,會出現(xiàn)卡頓的情況。

調(diào)用FixedUpdate的頻度常常超過Update柄延。

每幀根據(jù)幀率高低可能多次調(diào)用也可能不調(diào)用蚀浆,執(zhí)行后立即開始物理計算和更新,做移動計算時無需使用Time.deltaTime

2.狀態(tài)機周期(動畫更新)

1.狀態(tài)機更新(State Machine Update)

2.OnStateMachineEnter

掛載在一個動畫圖形上的狀態(tài)機首次進入一個狀態(tài)時的第一幀調(diào)用

3.OnStateMachineExit

退出狀態(tài)的最后一幀調(diào)用

4.處理圖形

評估所有動畫圖形

5.觸發(fā)動畫事件?(Fire Animation Events)

在該時間內(nèi)當前幀和最后一幀之間搜吧,觸發(fā)所有動畫片段的動畫事件

6.狀態(tài)周期回調(diào)?StateMachineBehaviour(OnStateEnter/OnStateUpdate/OnStateExit)?

一個狀態(tài)層有最多三個活躍狀態(tài)市俊,current state, interrupted state, and next state(當前狀態(tài)、中斷狀態(tài)和下一個狀態(tài)滤奈。)摆昧,對應階段周期方法順序執(zhí)行

3.內(nèi)部物理更新

4.狀態(tài)機周期(動畫更新)

1.處理動畫

渲染動畫結(jié)果圖形

2.IK動畫周期(OnAnimatorIK)

設置動畫 IK。為每個啟用 IK pass 的 Animator Controller 層進行一次此調(diào)用蜒程。

由workthread寫入Transform

3.寫入屬性

由主線程寫入場景其他動畫屬性

5.碰撞事件(Collision绅你、Trigger)

6.協(xié)程(yield WaitForFixedUpdate)

在所有腳本的FixedUpdated執(zhí)行后再執(zhí)行

3.輸入事件

Input events

1.OnMouseXXX

4.游戲邏輯

Game logic

1.update

每一幀進行調(diào)用,是實現(xiàn)游戲邏輯的主要方法昭躺。

2.協(xié)程

除WaitForFixedUpdate和WaitForEndOfFrame其他協(xié)程時機

3.狀態(tài)機周期(動畫更新)

同物理計算階段過程忌锯,單無內(nèi)部物理更新

4.lateupdate

開始時update的計算都已完成,一普遍用法是相機跟隨领炫,update中對人物移動的計算已全部完成偶垮,此時在lateupdate中更新相機位置

5.場景渲染

Scene rendering

1.OnWillRenderObject

若物體可見則每個相機調(diào)用一次

2.OnPreCull

相機剔除動作前

在攝像機剔除場景之前調(diào)用。剔除操作將確定攝像機可以看到哪些對象帝洪。正好在進行剔除之前調(diào)用 OnPreCull针史。

3.OnBecameVisible/OnBecameInvisible

對任何相機可見/不可見時調(diào)用

4.OnPreRender

相機渲染前

5.OnRenderObject

所有常規(guī)場景渲染完成時,可在此繪制自定義幾何圖形

此時碟狞,可以使用?GL?類或?Graphics.DrawMeshNow?來繪制自定義幾何形狀啄枕。

6.OnPostRender

當一個相機渲染完場景后

7.OnRenderImage

場景渲染后,可對Image做后期處理(濾鏡)

6.Gizmo 渲染

Gizmo rendering

1.OnDrawGizmos

僅在editor

用于在場景視圖中繪制輔助圖標以實現(xiàn)可視化族沃。

7.GUI渲染

GUI rendering

1.OnGUI 每幀多次調(diào)用

每幀調(diào)用多次以響應 GUI 事件频祝。首先處理布局和重新繪制事件,然后為每個輸入事件處理布局和鍵盤/鼠標事件脆淹。

8.幀結(jié)束

1.yield WaitForEndOfFrame

End of frame

協(xié)程是一個可暫停執(zhí)行 (yield) 直到給定的 YieldInstruction 達到完成狀態(tài)的函數(shù)常空。 協(xié)程的不同用法:

·yield:?在下一幀上調(diào)用所有 Update 函數(shù)后,協(xié)程將繼續(xù)盖溺。

·yield WaitForSeconds:?在為幀調(diào)用所有 Update 函數(shù)后漓糙,在指定的時間延遲后繼續(xù)協(xié)程

·yield WaitForFixedUpdate:?在所有腳本上調(diào)用所有 FixedUpdate 后繼續(xù)協(xié)程

·yield WWW:?在 WWW 下載完成后繼續(xù)。

·yield StartCoroutine:?將協(xié)程鏈接起來烘嘱,并會等待 MyFunc 協(xié)程先完成昆禽。

9.暫停

Pausing

1.OnApplicationPause

一幀最后時調(diào)用蝗蛙,調(diào)用后會再觸發(fā)一幀以刷新圖像和切換暫停狀態(tài)

10.退出/銷毀

Decommissioning

1.OnApplicationQuit

在退出應用程序之前在所有游戲?qū)ο笊险{(diào)用此函數(shù)。

在編輯器中醉鳖,用戶停止播放模式時捡硅,調(diào)用函數(shù)。

2.OnDisable

在對象被取消活躍狀態(tài)的時候響應盗棵,與OnEable相對應壮韭。

3.OnDestroy

當一個被激活的對象被銷毀的時候調(diào)用,未被激活的對象被銷毀則不會調(diào)用纹因。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喷屋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瞭恰,更是在濱河造成了極大的恐慌逼蒙,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寄疏,死亡現(xiàn)場離奇詭異,居然都是意外死亡僵井,警方通過查閱死者的電腦和手機陕截,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來批什,“玉大人农曲,你說我怎么就攤上這事∽ふ” “怎么了乳规?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長合呐。 經(jīng)常有香客問我暮的,道長,這世上最難降的妖魔是什么淌实? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任冻辩,我火速辦了婚禮,結(jié)果婚禮上拆祈,老公的妹妹穿的比我還像新娘恨闪。我一直安慰自己,他們只是感情好放坏,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布咙咽。 她就那樣靜靜地躺著,像睡著了一般淤年。 火紅的嫁衣襯著肌膚如雪钧敞。 梳的紋絲不亂的頭發(fā)上蜡豹,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音犁享,去河邊找鬼余素。 笑死,一個胖子當著我的面吹牛炊昆,可吹牛的內(nèi)容都是我干的桨吊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凤巨,長吁一口氣:“原來是場噩夢啊……” “哼视乐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敢茁,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤佑淀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彰檬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伸刃,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年逢倍,在試婚紗的時候發(fā)現(xiàn)自己被綠了捧颅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡较雕,死狀恐怖碉哑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亮蒋,我是刑警寧澤扣典,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站慎玖,受9級特大地震影響贮尖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜趁怔,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一远舅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痕钢,春花似錦图柏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春裁着,著一層夾襖步出監(jiān)牢的瞬間繁涂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工二驰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扔罪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓桶雀,卻偏偏與公主長得像矿酵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子矗积,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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