首页 > 其他分享 >Unity中的常见单例模式

Unity中的常见单例模式

时间:2022-11-05 14:47:13浏览次数:52  
标签:常见 模式 Instance Unity Awake 单例 SingletonClass public

在Unity中我们用到的最多的设计模式之一就是单例模式

单例模式顾名思义就是只允许单个此实例物体存在

因此单例类通常挂载在各种Manager物体上

下面介绍几种常用单例模式的写法

一、普通单例模式,在Awake()中实现

具体代码如下

Public class SingletonClass : MonoBehaviour
{
      public static SingletonClass Instance;
      
      private void Awake()
     {
             if(Instance==null)
             {
                    Instance=this;//如果单例不存在,则让挂载此脚本的物体成为单例实例
             }
             else
             {
                    Destory(gameObject);//如果单例存在,那么就摧毁要创建的物体,因为只能有第一个单例物体存在
             }             

    }
    
  
}                                                                            

在Unity中Awake()在Start()方法前调用,我们一般在Start()中获取物体组件或者对字段初始化赋值,因此在我们在Awake()中实现单例模式的主要逻辑

二、通用单例模式

public class SingletonMonoBehaviour<T> : MonoBehaviour where T:MonoBehaviour//单例模式基类
{
    private static T instance;

    public static T Instance
    {
        get {
            return instance;
        }
    }

    public void Awake()
    {
        if (instance == null)
        {
            instance = this as T;
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

 

public class SingletonClass : SingletonMonoBehaviour<SingletonClass>
{
   
}

利用泛型使类模板化,通过让子类继承单例模式基类就可以让子类实现单例模式的功能

三、简单单例模式,通过访问器实现

 

public class SingletonClass : MonoBehaviour
{
    private static SingletonClass _Instance;//单例实例化
    public static Singleton Instance 
    {
        get {
                if (_Instance == null)
                {
                    _Instance = FindObjectOfType(typeof(SingletonClass)) as SingletonClass;
                }
                return _Instance;
            }
    }
}

 

注意:以上的代码都没有考虑多线程的情况,当类在不同线程创建时这种写法的单例模式就会失效

最后再来复习一下单例模式,以下是大话设计模式一书中对单例模式的介绍

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

标签:常见,模式,Instance,Unity,Awake,单例,SingletonClass,public
From: https://www.cnblogs.com/AzuresMK/p/16860027.html

相关文章

  • 常见的设计模式
    单例模式:单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在......
  • 13第五章:【01】单例模式
    一、单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只能提供一个取得其对象实例的方法(静态方法)。......
  • 11个常见的分类特征的编码技术
    机器学习算法只接受数值输入,所以如果我们遇到分类特征的时候都会对分类特征进行编码,本文总结了常见的11个分类变量编码方法。1、ONEHOTENCODING最流行且常用的编码方......
  • 【100个 Unity实用技能】| C# 中 Sort() 对List中的数据排序的几种方法 整理总结
    Unity小科普老规矩,先介绍一下Unity的科普小知识:Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意......
  • Redis Desktop Manager连不上服务器的redis; Java 死锁; 泛型; 事务; servlet; Spring事务;
    RedisDesktopManager连不上服务器的redis1、首先有没有设置密码,输入的密码是否正确2、那个IP是内网IP嘛?外网的要加SSH总结一下无论是连MySQL、MongoDB、还是redisip如果......
  • 常见函数 ,过滤函数 直接导入使用
    //importparseTime,formatTimeandsettofilter/***Showplurallabeliftimeispluralnumber*如果时间是复数,则显示复数标签*@param{number}time......
  • 单例模式
    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一、单例模式的特点单例类只能有一个实例。单......
  • Java学习笔记day4--数组常见异常Exception
    packageday4_array;/**数组中的常见异常:1.数组角标越界的异常ArrayIndexOutOfBoundsException2.空指针异常NullPointerException*/publiccla......
  • Java常见错误种类
    算术异常类:ArithmeticExecption空指针异常类:NullPointerException类型强制转换异常:ClassCastException数组负下标异常:NegativeArrayException数组下标越界异常:ArrayInd......
  • Unity + XLua + VS Code断点调试 之 luaPanda (免费版本调试)
    官方文档:https://github.com/Tencent/LuaPanda/blob/master/Docs/Manual/quick-use.md官方文档已经够详细了,我这里既不多说什么了,我就说说自己在弄这个luapanda遇到的问题,......