在Unity开发中最常用的设计模式就是单例模式,但是在使用单例模式的时候,通常会在每个脚本里去写单例方法,使用起来很不方便,在网上搜了一下,看到有很多实现方法,其中有一个我认为很方便,下面就把方法贴出来,一般的方法我就不再写了,网上有一大堆。
第一种是不继承MonoBehaviour的类,一般这种适用于不挂在Unity的GameObject上的类。文章源自大腿Plus-https://www.zhaoshijun.com/archives/989
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class Singleton<T> where T : class, new() { private static T s_Instance = default(T); private static readonly object SyncObject = new object(); public static T Instance { get { lock (SyncObject) { if (null == s_Instance) { s_Instance = new T(); } return s_Instance; } } } } |
第二种是继承了MonoBehaviour的类,当然这种类在使用单例的时候,一定要在这个场景中只能有一个脚本,不然获得的脚本永远是其中一个。文章源自大腿Plus-https://www.zhaoshijun.com/archives/989
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using UnityEngine; public class SingletonMono<T> : MonoBehaviour where T : SingletonMono<T> { private static T s_Instance; private static readonly object SyncObject = new object(); public static T Instance { get { lock (SyncObject) { if (s_Instance == null) { s_Instance = FindObjectOfType<T>(); } } return s_Instance; } } } |
使用方法就是想要使用单例的类继承这两个类,下面是使用方法。文章源自大腿Plus-https://www.zhaoshijun.com/archives/989
1 2 3 4 5 6 7 8 |
public class MonoTest: MonoSingleton<MonoTest> { } public class Test: Singleton<Test> { } |
我的微信
微信扫一扫

shijun_z
我的QQ
QQ扫一扫

846207670
评论