Unity3d中腳本生命週期

最近剛入手Unity,也是寫了幾個簡單的小遊戲。發如今C#中,類都是繼承於MonoBehaviour這個類,而在MonoBehaviour這個類中,有着許多的函數。天然而然的,就想到一個問題,在程序運行過程當中這些函數的執行順序是怎麼樣的呢?內部又是如何進行管理的呢?然後經過查閱相應的資料,發現了它們的一些運行規律,大體總結以下:函數

先上一張摘自網上的圖,給個直觀印象。this

能夠看到,最早執行的是Awake()函數,它在整個腳本週期內只執行一次,當MonoBehavior建立後當即調用,且在Start()函數以前執行,咱們可在這裏設置this.enable=false;這樣腳本便會直接執行OnDisable(),跳過中間的全部方法。spa

OnEnable()函數用於判斷這個腳本是否被禁用,若被禁用則直接跳轉至OnDisable()函數,未被禁用則向下執行,此時若Start()函數未被執行過,執行之,反之則跳過它。對象

接下來按順序執行FixedUpdate()函數,Update()函數,在此說一下這兩個函數的區別。Update()在每次渲染新的一幀時被調用,FixedUpdate()在通過每一個固定的物理時間間隔後被調用,那麼是否是Update()和FixedUpdate()間隔時間同樣,就同樣了呢?結果是否認的,由於在遊戲過程當中,受硬件環境的影響,每幀之間的間隔時間不可能同樣,可能會時長時短,此時Update()調用的時間間隔就發生了變化。可是FixedUpdate則不受幀率的變化,它是以固定的時間間隔來被調用,那麼這個時間間隔怎麼設置呢?Edit->Project Setting->time下面的Fixed timestep。由於它倆的這點不一樣,因此,纔會有物體的物理運動多用FixedUpdate()處理。繼承

在全部的Update()函數都執行完了以後,lateUpdate()將會被調用。注意,是全部的Update()函數,也就是說假如咱們有編號分別爲1,2,3,4......,99,100的這麼一百個腳本,其中1號腳本有LateUpdate()函數,那麼它將在這一百個腳本的Update()都執行完畢後,纔會被調用。
生命週期

在這以後就進入渲染模塊,這其中有個很是重要的方法爲 OnGUI(),固然,若是你使用NGUI或者新出的UGUI,就能夠不用管這一步了。遊戲

最後即是銷燬模塊,當腳本的enable=false時,腳本並不會被銷燬,而是處於咱們日常所說的被禁用狀態,當enable=true時,可回到OnEnable()狀態繼續執行。當咱們手動銷燬腳本或腳本所附屬的遊戲對象被銷燬時,OnDestroy()被調用,至此,整個腳本生命週期結束。it

順便一提,協同程序在update()函數結束後執行。io

相關文章
相關標籤/搜索