Dear All:
剛開始學UNITY的時候,最難搞定的就是這兩個functions的差異,依照官方文件所描述的:
Awake(): Awake is called when the script instance is being loaded.
Start(): Start is called just before any of the Update methods is called the first time.
習慣C++寫作的我來說,這根本是"小三"的顛倒!!為什麼要這樣分搞不懂。後來寫久了遇到問題了才瞭解原來繼承MonoBehaviour的class:
Awake() == C++的Construct在使用上的基本原則就是,如果你有class的member參考其它Component,就在Awake裡設定好,裡如:
Start() == 程式啟動後第一個會被忽叫的function
進一步想,我們在寫C++的class時,不也有時候會自己寫Init()的Member Fucntion嗎?所以Start()也可想成自訂的Init()就好!
protected void Awake () { thisTrans = transform; item = GetComponent- (); }
這是確保當我們在Start()裡需要呼叫member所參考component中的function時,這個參考已經建立而非NULL。當然你也可以說你在Start()的一開始先做GetComponent的動作,這也是OK的。不過開發到後來系統class彼此間的連結越來越強時,因該就會慢慢體會到Awake()的重要,因為UNITY裡物件的建立順序無法控制,所以保險一點還是將GetComponent這件事留在Awake比較好一點。
作者:Bric Lin, Email: ericlin09@gmail.com
曾任職台灣某遊戲公司研發Game Engine,為書籍“OGRE 入門指南”的譯者之一,專攻Rendering技術與遊戲開發,目前為獨立開發團隊CocosPlay主程式
"UNITY裡物件的建立順序無法控制"
回覆刪除應該是可以控制的喔
Project Settings > Script Execution
是啊!感謝皓哲,這篇文章是沒這功能時寫的,當時從我以前的Blog轉貼後,就沒有Update了。Project Settings -> Script Execution,的確可以解決部分問題。 THX~ MAN!!
刪除