Unity3D-单例模式各种写法应用

简介: Unity3D-单例模式各种写法应用

单例模式就是保证类的实例的唯一性


一般来说所有的管理类都需要设置为单例模式,音频管理模块,UI管理模块,对象池等


单例模式有各种各样的写法,有很普通的单例模式,有很复杂的单例模式。有的单例模式需要考虑多线程共享的问题,就要进行加锁防止混乱。


一. 普通 非继承Mono单例


最常见,最普通的单例模式基类的写法,使用了泛型进行封装使用。通过static变量和static静态方法,达到程序运行过程中的类实例的唯一性。

public class BaseManager<T> where T : new()
{
    private static T instance;
  //非必须存在私有构造器,其主要目的是防止 使用new浪费内存
    private BaseManager()
    {
    }
    public static T GetInstance()
    {
        if (instance == null)
            instance = new T();
        return instance;
    }
}

二. 继承MonoBehaviour的脚本的单例模式基类


此种方法存在一个操作上的注意事项,要保证此脚本只挂载在场景中的唯一物体上。否则就会发生浪费内存的情况,因为 instance只能返回最后一个加载脚本的物体的实例。

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
   private static T instance;
   public static T GetInstance()
   {
      return instance;
   }
   protected virtual void Awake()
   {
      instance = this as T;
   }
}

三. 继承MonoBehaviour的Auto单例模式基类


此种写法解决了需要保证脚本在场景中挂在的唯一性问题。

/// <summary>
/// 继承了种种自动创建的单例模式基类,不需要我们手动托或者api去加,如果需要使用直接GetInstance就行了
/// </summary>
/// <typeparam name="T"></typeparam>
public class SingletonAutoMono<T> : MonoBehaviour where T : MonoBehaviour
{
    private static T instance;
    public static T GetInstance()
    {    
        //不需要手动拖拽脚本并且 无需检查脚本在场景中的唯一性
        if (instance == null)
        {
            GameObject obj = new GameObject();
            //设置对象的名称为脚本的名字
            obj.name = typeof(T).ToString();
            // 保证切换场景的时候,挂有此脚本的gameobject不被移除。
            // 单例模式需要保证程序运行全程都有唯一的实例在运行,存在于整个生命周期之中
            instance = obj.AddComponent<T>();
        }
        return instance;
    }
}
相关文章
|
5月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
54 0
|
5月前
|
开发框架 数据可视化 前端开发
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
152 0
|
8月前
|
图形学
|
11月前
|
图形学
【unity每日一记】——游戏剧情模式中MoveTowards和GameObject.Find()的应用
【unity每日一记】——游戏剧情模式中MoveTowards和GameObject.Find()的应用
80 0
|
vr&ar 图形学 Android开发
【100个 Unity小知识点】 | 启动unity应用时的 Unity Logo 删除/替换的三种方案
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
|
Android开发 图形学 iOS开发
如何使用Android Studio在安卓平台对Unity开发的应用进行性能检查?
如何使用Android Studio在安卓平台对Unity开发的应用进行性能检查?前言大家常常会抱怨安卓平台没有一个统一、好用的性能检查工具。不能像iOS的instrument那样方便。 图片来自:Instruments Help 比如,Unity Blog在3年前就已经教大家如何使用instrument来进行性能检测了。
1980 0
|
数据库 图形学 数据库管理