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;
    }
}
相关文章
|
4月前
|
vr&ar 图形学 API
Unity与VR控制器交互全解:从基础配置到力反馈应用,多角度提升虚拟现实游戏的真实感与沉浸体验大揭秘
【8月更文挑战第31天】虚拟现实(VR)技术迅猛发展,Unity作为主流游戏开发引擎,支持多种VR硬件并提供丰富的API,尤其在VR控制器交互设计上具备高度灵活性。本文详细介绍了如何在Unity中配置VR支持、设置控制器、实现按钮交互及力反馈,结合碰撞检测和物理引擎提升真实感,助力开发者创造沉浸式体验。
211 0
|
4月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
166 0
|
5月前
|
vr&ar 图形学 开发者
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
193 0
|
8月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
142 0
|
8月前
|
开发框架 数据可视化 前端开发
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
846 0
|
图形学
【unity每日一记】——游戏剧情模式中MoveTowards和GameObject.Find()的应用
【unity每日一记】——游戏剧情模式中MoveTowards和GameObject.Find()的应用
114 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来进行性能检测了。
2029 0