前往
大廳
主題

【Unity】面試心得(二)生命週期(Life Cycle)

曉雄 | 2022-08-04 01:07:23 | 巴幣 4 | 人氣 428

前言
面試反省第二彈,說基本算基本,可說簡單卻也不簡單。Unity事件函式週期是怎麼運行的呢?大致了解過卻從未深思過,突然被問到時真的一時答不上來啊……果真是書到用時方恨少。


2. 試描述Unity事件函式生命週期

Unity的整個事件函式生命週期,官方文件中從初始化(Initialization)開始,到中止指令(Decommiss-ioning)結束。其中,我無法詳細記憶關於官方文件的所有內容,故為了方便理解,我私自將其粗分為初始、物理、輸入、更新、渲染、結束。若要仔細去研究,請參考此處

a) 初始(Initial)
負責處理Script中初始化階段的行為,主要有五個函式,依序是:
On Validate → Awake → On Enable → Reset → Start
其中,On Validate與Reset,屬於編輯器,一般而言,在已經Build後的程式中不會處理。
而On Enable則是初始化後唯一能被重複呼叫的唯一方法。

b) 物理(Physic)
官網的文件中,我自己的理解是,舉凡Rigibody、Collider、Animator等元件的行為,
皆會在此處理。其中重要的函式依序如下:
Fixed Update → Animation Update & Physic Update → On Trigger → On Collision
yield Wait For Fixed Update
另須注意,藍色部分僅在動畫被設置為物理更新時套用,而紅色則屬於協程(Coroutine)。

c) 輸入(Input)
舉凡Mouse、Keyboard等輸入事件皆於此一階段運作。
但個人不確定IPointer一系列的介面(Interface)是否同樣於此一階段處理。

d) 更新(Update)
遊戲邏輯最主要的運行階段,包含下列更新程序:
Update → Coroutine Procedure → Animation Update → Late Update
其中LateUpdate在每幀(frame)渲染前調用,經常用於更新渲染相關參數。

e) 渲染(Rendering)
本身對於渲染的理解很少,但因為被問起相關問題而特別去了解了一下。撇開Gizmo與GUI,
正常渲染程序包含:
On Pre Cull (預剔除) → On Will Render Object (即將渲染) → On Became Visible (變為可視)
→ On Became Invisible (變為不可視) → On Pre Render (前渲染) → On Render Object (渲染物件)
→ On Post Render (後渲染) → On Render Image (渲染像)

f) 結束(Quit)
在我自己的分類中,此一階段包含:
On Application Pause (應用暫停) → On Application Quit (應用結束)
→ On Disable → On Destroy
其中,On Disable與On Enable是相對的存在,運作於腳本被關閉時。



結語
仔細的去翻看了Unity的運行,除了動畫(Animation)與協程(Coroutine)不在這次的檢討中,其他都是可以從官網查找,只是運用我自己的分類去記憶而已。如果有什麼問題,一樣歡迎各位看官隨時指出!

創作回應

更多創作