unity中的構造函數


避免使用構造函數 不要在構造函數中初始化任何變量,使用Awake或Start實現這個目的。即使是在編輯模式中Unity也自動調用構造函數,這通常發生在一個腳本被編譯之后,因為需要調用構造函數來取向一個腳本的默認值。構造函數不僅會在無法預料的時刻被調用,它也會為預設或未激活的游戲物體調用。”

MonoBehaviour有兩個生命周期,一個是作為C#對象的周期,一個是作為Component的周期。

構造函數代表第一個,Awake代表第二個。

Editor環境下Editor的代碼和腳本代碼在同一個AppDomain里,對象的生命周期會表現的跟Player環境下不一樣。比如Editor中構造函數被調用的次數和時機跟build出來的游戲不一樣,這樣就不容易保證正確性。

另外一個關鍵原因是構造函數是在Unity內部的Loading線程上執行的,一是不能使用Unity API,二是需要考慮同步問題,就更難保證正確了。

所以沒什么事還是別用構造函數,readonly字段之類只能在構造階段初始化的成員,盡量不要用,設計上需要用也要保證初始化代碼盡可能簡單。


作者:權然
鏈接:https://www.zhihu.com/question/24701230/answer/50546298
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM