Unity中Awake與Start函式

2021-07-11 16:47:54 字數 1462 閱讀 9603

unity中awake與start函式的呼叫情況總結

1、  awake函式

首先,我們來看unity的參考手冊中對awake函式的一些說明情況:

當指令碼例項被載入時會呼叫awake函式;awake函式在所有的遊戲物件被初始化完畢之後才會被呼叫;在指令碼例項的整個生命週期中,awake函式僅執行一次。那麼,指令碼例項何時被載入,指令碼例項的整個生命週期又代表了什麼,因為對這些概念存有疑惑,所以在此基礎之上,自己又在引擎中進行了一些測試,通過列印輸出的方式檢視了一下awake函式的執**況,總結如下(沒有特殊說明,均為在不切換場景的前提下):

(1)      如果遊戲物件(即gameobject)的初始狀態為關閉狀態,那麼執行程式,awake函式不會執行;反之,如果遊戲物件的初始狀態為開啟狀態,那麼awake函式會執行。並且,值得注意的一點是,awake函式的執行與否與指令碼例項的狀態(啟用或禁用)並沒有關係,而是與指令碼例項所繫結的遊戲物件的狀態有關。

(2)      在不切換場景的前提下,原本處於關閉狀態的遊戲物件,當它被首次開啟時,awake函式會執行,並且是只在首次開啟時才會執行;而已經開啟(啟用)的遊戲物件(awake函式已經執行過一次),將它關閉後再次開啟,awake函式不會再次執行。看來這是對應了手冊中說明的在指令碼例項的整個生命週期中僅執行一次的情況。

2、  start函式

還是先看參考手冊中對start函式的一些說明情況:

當update函式第一次被呼叫前會呼叫start函式;start函式只在指令碼例項被啟用時才會執行;start函式總是在awake函式之後執行。在此基礎之上,自己的測試總結如下 (沒有特殊說明,均為在不切換場景的前提下):

(1)      如果遊戲物件被關閉,那麼start函式不會執行。想一想這是理所當然的,遊戲物件關閉了,指令碼例項不會被載入,awake函式不會執行,start函式不會執行,update函式等也不會執行。

(2)      如果遊戲物件開啟了,物件上繫結的指令碼例項被禁用了,那麼start函式不會執行。這是start函式的特點,只有在指令碼例項被啟用時它才會執行,這個說明中有提到。注意,這與awake函式是有區別的。

(3)      如果遊戲物件開啟了,物件上繫結的指令碼例項也開啟了,那麼start函式會執行。並且start函式只會在指令碼例項首次被開啟時才會執行。如果是已經開啟過的指令碼例項被關閉後再次開啟,那麼start函式不會再次執行。

除此之外,還有對awake函式和start函式都比較重要的一點,那就是當遊戲物件之間存在父子關係時(不論層級的多少)。這時,父遊戲物件的狀態(開啟或關閉)完全決定了子遊戲物件上的指令碼函式的執**況。總的來說就是,只有在父遊戲物件被開啟的狀態下,程式才會考慮是否呼叫子遊戲物件上的指令碼函式(awake與start等)。自上而下,以此類推。

最後,自己對於awake與start函式的使用,一般都是在awake函式中獲取遊戲物件或者指令碼例項的資訊,然後在start函式中進行一些獲取之後的初始化設定。具體情況,還要根據需求靈活變化。總結就到這裡了,謝謝大家的閱讀,歡迎批評指正。

Unity 中的 Daydream 開發與例項

本文將幫助您了解開發 daydream 應用所需的裝置和軟體並介紹安裝過程,以便您可以立即開始建立 daydream 平台的遊戲,最後提供幾個優秀的案例,為您帶來更好的遊戲設計思路。建立 daydream 遊戲之前,我們需要做開發前的軟硬體準備,包括 daydream 裝置和 unity 的 goo...

unity 中Texture大小與占用記憶體關係

例子1 使用rgba 32bit真彩 truecolor 占用記憶體 4bytes 512 512 1mb 例子2 使用rgb etc 4bit壓縮,占用記憶體 0.5bytes 512 512 128kb。即8位 bit 的圖 占用記憶體 1bytes 大小 那麼 乙個1024 1024大小 32...

學習 react 子元件改變父元件中的state值

react 子元件改變父元件的state值 通過將父元件中的方法傳給子元件,在方法中改變state值 父元件 handlee info honor handleclose changedata groupoptions handlee 子元件 this.props.handlee diandian ...