RuntimeInitializeOnLoadMethod——记录使用方法
Unity项目中可能会存在一些需要初始化的内容,比如说SDK、存档等,利用RuntimeInitializeOnLoadMethodAttribute就可以很方便的实现而不需担心优先级等问题。
使用方法:在静态方法前加上此特性。注意是静态方法。
被RuntimeInitializeOnLoadMethod修饰的方法可以是随便的一个类,并且不需要进行new,不需要挂载在物体上。而且这个类可以放在Editor下,也可以放在Editor外,其对应的方法都能很好的执行。
using TinaX; using TinaX.Services; using UnityEngine; using UnityEngine.SceneManagement; #if UNITY_EDITOR using UnityEditor; #endif namespace Nekonya.Example { public class AppStartup : MonoBehaviour { private async void Start() { var core = XCore.New() .UseVFS() .UseUIKit() .UseI18N() .OnServicesStartException((service, err) => { // }); await core.RunAsync(); //startup TinaX Framework } #if UNITY_EDITOR [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] public static void OnGameStart() { var cur_scene = SceneManager.GetActiveScene(); if (!cur_scene.name.Equals("App.Startup") && (cur_scene.name.StartsWith("App.") || cur_scene.name.IsNullOrEmpty())) SceneManager.LoadScene("App.Startup"); } #endif } }
using UnityEngine; public class LoadOrderTestTwo : MonoBehaviour { [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void BeforeRuntimeInitializeOnLoadMethod() { Debug.Log("BeforeRuntimeInitializeOnLoadMethod"); } [RuntimeInitializeOnLoadMethod] static void OnRuntimeInitializeOnLoadMethod() { Debug.Log("OnRuntimeInitializeOnLoadMethod"); } [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] static void AfterRuntimeInitializeOnLoadMethod() { Debug.Log("AfterRuntimeInitializeOnLoadMethod"); } private void Awake() { Debug.Log("Awake"); } private void Start() { Debug.Log("Start"); } bool isUpdate = true; private void Update() { if(isUpdate) { Debug.Log("Update"); isUpdate = false; } } }
执行顺序是BeforeRuntime、Awake、OnRuntime、AfterRuntime、Start、Update。
游戏是由人创造出来的,你如果能够为开发人员提供高质量的工具,并帮助他们更好地完成自己的工作,包括帮助他们提高生产力、尝试新事物并进行实验,那么你就越有可能在这个行业中获得成功。