Unity单例模式,但是是取自Ultrakill反编译代码
以下是用dnSpy对Ultrakill源码反编译后拿到的MonoSingleton写法,删去了一部分应该是需要关联其他东西的代码。
using System; using System.Reflection; using UnityEngine; using UnityEngine.SceneManagement; public abstract class MonoSingleton<T> : MonoSingleton where T : MonoSingleton<T> { private static T Initialize() { if (!MonoSingleton<T>.flags.HasFlag(SingletonFlags.NoAutoInstance)) { GameObject gameObject = new GameObject(typeof(T).FullName); T result = gameObject.AddComponent<T>(); if (MonoSingleton<T>.flags.HasFlag(SingletonFlags.HideAutoInstance)) { gameObject.hideFlags = HideFlags.HideAndDontSave; } if (MonoSingleton<T>.flags.HasFlag(SingletonFlags.PersistAutoInstance)) { Object.DontDestroyOnLoad(gameObject); } return result; } if (!SceneManager.GetActiveScene().isLoaded) { return Object.FindObjectOfType<T>(); } return default(T); } public static T Instance { get { if (!MonoSingleton<T>.instance) { return MonoSingleton<T>.instance = MonoSingleton<T>.Initialize(); } return MonoSingleton<T>.instance; } protected set { MonoSingleton<T>.instance = value; } } protected virtual void Awake() { if (MonoSingleton<T>.instance && MonoSingleton<T>.flags.HasFlag(SingletonFlags.DestroyDuplicates) && MonoSingleton<T>.instance != this) { Object.Destroy(this); return; } if (MonoSingleton<T>.flags.HasFlag(SingletonFlags.NoAwakeInstance)) { return; } if (MonoSingleton<T>.instance && MonoSingleton<T>.instance.isActiveAndEnabled && !base.isActiveAndEnabled) { return; } MonoSingleton<T>.Instance = (T)((object)this); } protected virtual void OnEnable() { MonoSingleton<T>.Instance = (T)((object)this); } protected virtual void OnDestroy() { } private static T instance; private static readonly SingletonFlags flags; }
(感觉是Pitr或者其他程序员写的,反正不是Hakita写的就是了)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署