Unity 5.0開始增長了RuntimeInitializeOnLoadMethodAttribute,這樣就很方便在遊戲初始化以前作一些額外的初始化工做,好比:Bulgy參數設置、SDK初始等工做。html
先來看一下它的生命週期編輯器
sing UnityEngine; public class ExampleClass : MonoBehaviour { private void Awake() { Debug.Log( "Awake" ); } private void OnEnable() { Debug.Log( "OnEnable" ); } private void Start() { Debug.Log( "Start" ); } [RuntimeInitializeOnLoadMethod] private static void OnRuntimeMethodLoad() { Debug.Log( "RuntimeInitializeOnLoadMethod" ); } }
輸出結果ide
而它還有兩個屬性:RuntimeInitializeLoadType.BeforeSceneLoad | RuntimeInitializeLoadType.AfterSceneLoad網站
using UnityEngine; public class InitTest : MonoBehaviour { [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void OnBeforeSceneLoadRuntimeMethod () { Debug.Log("Before scene loaded"); } void Awake() { Debug.Log("Awake"); } void OnEnable() { Debug.Log("OnEnable"); } [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] static void OnAfterSceneLoadRuntimeMethod() { Debug.Log("After scene loaded"); } [RuntimeInitializeOnLoadMethod] static void OnRuntimeMethodLoad() { Debug.Log("RuntimeMethodLoad: After scene loaded"); } void Start() { Debug.Log("Start"); } }
輸出結果ui
Before –> Awake –> OnEnable –> After –> RuntimeMethodLoad –> Start。spa
附一張腳本的生命週期圖(來源:官方網站)3d
Unity中提供的Attribute有不少,RuntimeInitializeOnLoadMethodAttribute只是其中的一種。若是本身寫程序擴展編輯器的功能,就須要瞭解這些屬性。經常使用的有:code
一、AddComponentMenu 導航欄菜單htm
二、ContextMenu 右鍵菜單blog
三、HeaderAttribute
四、HideInInspector 可讓public變量在Inspector上隱藏,沒法在Editor中進行編輯
五、MultilineAttribute 支持輸入多行文本
六、RangeAttribute 限定輸入值的範圍
七、RequireComponent 組件依賴,使用該組件後自動添加依賴組件
八、RuntimeInitializeOnLoadMethodAttribute
九、SerializeField 強制對變量進行序列化,即便變量是private
十、SpaceAttribute 增長空位
十一、TooltipAttribute 提示信息,當鼠標移到Inspector上時顯示相應的提示
十二、InitializeOnLoadAttribute
1三、InitializeOnLoadMethodAttribute
1四、MenuItem 導航欄的菜單項
更多屬性及詳情介紹,能夠參考:Unity教程之-Unity Attribute的使用總結