Unity 5.0開始增加了RuntimeInitializeOnLoadMethodAttribute,這樣就很方便在游戲初始化之前做一些額外的初始化工作,比如:Bulgy參數設置、SDK初始等工作。
先來看一下它的生命周期
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" ); } }
輸出結果

而它還有兩個屬性: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"); } }
輸出結果

Before –> Awake –> OnEnable –> After –> RuntimeMethodLoad –> Start。
附一張腳本的生命周期圖(來源:官方網站)
Unity中提供的Attribute有很多,RuntimeInitializeOnLoadMethodAttribute只是其中的一種。如果自己寫程序擴展編輯器的功能,就需要了解這些屬性。常用的有:
1、AddComponentMenu 導航欄菜單
2、ContextMenu 右鍵菜單
3、HeaderAttribute
4、HideInInspector 可以讓public變量在Inspector上隱藏,無法在Editor中進行編輯
5、MultilineAttribute 支持輸入多行文本
6、RangeAttribute 限定輸入值的范圍
7、RequireComponent 組件依賴,使用該組件后自動添加依賴組件
8、RuntimeInitializeOnLoadMethodAttribute
9、SerializeField 強制對變量進行序列化,即使變量是private
10、SpaceAttribute 增加空位
11、TooltipAttribute 提示信息,當鼠標移到Inspector上時顯示相應的提示
12、InitializeOnLoadAttribute
13、InitializeOnLoadMethodAttribute
14、MenuItem 導航欄的菜單項
更多屬性及詳情介紹,可以參考:Unity教程之-Unity Attribute的使用總結
