首页 > 编程语言 >Unity Mono单例(MonoSingleton)C#脚本

Unity Mono单例(MonoSingleton)C#脚本

时间:2024-02-06 13:44:54浏览次数:31  
标签:脚本 C# Mono instance Unity 实例 Awake 单例 挂载

什么是单例模式?

单例模式是设计模式的一种,一般来说,使用单例模式的类,在程序中全局只会存在一个实例,并且一般来讲其是全局可被访问的。在unity游戏开发中,单例模式广泛应用于GameManager和各种Controller这种只需要一个实例的脚本。

以下就是Unity Mono单例的泛用脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//泛型约束T为Singleton自身或其子类(where <要约束的泛型符号例如T> : <约束的具体描述>)
//泛型约束的作用顾名思义就是约束泛型传入的类型,一共有六种约束方式这里不展开讲。
public abstract class Singleton<T> : MonoBehaviour where T:Singleton<T> 
{
    protected static T _instance;
    public static T Instance{
        get{
            //获取单例实例时如果实例为空
            if(_instance == null){
                //首先在场景中寻找是否已有object挂载当前脚本
                _instance = FindObjectOfType<T>();
                //如果场景中没有挂载当前脚本那么则生成一个空的gameobject并挂载此脚本
                if(_instance == null){
                    //如果创建对象,则会在创建时调用其身上脚本的Awake即调用T的Awake(T的Awake实际上是继承的父类的)
                    //所以此时无需为_instance赋值,其会在Awake中赋值。
                    new GameObject("singleton of "+typeof(T)).AddComponent<T>();
                }
            }
            return _instance;
        }
    }
    //在游戏最开始时调用Awake 如果当前脚本已经挂载到了gameobject上则会将_instance赋值为脚本自身
    private void Awake() {
        _instance = this as T;        
    }
}

标签:脚本,C#,Mono,instance,Unity,实例,Awake,单例,挂载
From: https://www.cnblogs.com/HalfDog/p/18009586

相关文章

  • 【CPL-2023】W9 W10 W11 笔记-指针
    指针1.W9指针就是存储内存地址的变量*是一个单目运算符*p既可以作为左值也可以被作为右值可以把*p当做一个变量的别名来理解voidfun(inta[],intlen)等价于voidfun(int*a,intlen)第一个参数是数组名称的时候,方括号里不需要写数量,传过来的只是一个数组的地址......
  • ASCII 编码表----字符与对应十进制值的参考表
    字符十进制值-----------------NUL0SOH1STX2ETX3EOT4ENQ5ACK6BEL7BS8TAB9LF10VT11FF12CR13SO14SI15DLE16DC117DC218DC319DC420NA......
  • 【CPL-2023】W2笔记-变量、类型、简单IO
    int类型范围-2^31~2^31-1UB未定义行为2^31-1+1的话会发生未定义行为,产生溢出时时未定义行为编译器的开发者可以以任意的行为来应对c标准中的未定义行为int型默认保持32比特/0或者%0会产生UB(未定义行为)/0为了兼容多个厂商的除法器而存在UB,有些除法器抛出错误,有......
  • 【CPL-2023】W3笔记-条件、循环、数组
    分支结构程序的生存期if();等价于if(){  ;}级联ifif(){}elseif(){}elseif(){}else{}关系运算符优先级低于算术运算符判等运算符优先级低于关系运算符多出口程序不容易调试(if多个分支中多个pritf类似这种程序)可以调整多出口程序为单出口......
  • 软件icon制作流程,就一张256-256的图即可,一键生成windows所有格式
    软件icon制作流程,就一张256-256的图即可,一键生成windows所有格式好久不用这个都有些生疏了,还特意做了好几个尺寸的图,结果白弄了,软件会自动生成。1.准备256-256px的图2.打开GreenfishIconEditorPro下载地址:GreenfishIconEditorPro(图片转图标工具)V3.5多语版https:/......
  • Oracle index domain R-tree(B-tree extension)
    *[构建域索引](https://docs.oracle.com/en/database/oracle/oracle-database/19/addci/building-domain-indexes.html#GUID-E370B5E4-BAC0-49C6-B17D-830B3A507FB4)域索引是为专用域(如空间或图像处理)设计的索引。用户可以在设计器创建索引类型后生成给定类型的域索引。域索引的......
  • CF1483F Exam
    我永远喜欢数据结构神仙\(\color{maroon}*3400\)字符串题。感觉现有的一篇SA题解讲的不太清楚,来一篇更加清楚、严谨的SA题解。洛谷CF给出\(n\)个字符串\(s_1\sims_n\),求有多少对\((i,j)\),满足:\(1\lei,j\len\)。\(s_j\)是\(s_i\)的真子串。不存在\(k\)......
  • Windows Dependency Walker & Dumpbin
    *[Windows查看exe依赖的dll的方法-知乎](https://zhuanlan.zhihu.com/p/395557318#%E6%96%B9%E6%B3%95%E4%B8%80%EF%BC%9ALucasg/Dependencies%EF%BC%88%E5%BC%80%E6%BA%90%E7%89%88%E7%9A%84%E7%8E%B0%E4%BB%A3%20Dependency%20Walker%EF%BC%89)*[DUMPBIN工具的使用-z......
  • c语言实现内存池
    概要所谓内存池,顾名思义和线程池的设计原理是一样的,为了减少频繁申请释放内存而带来的资源消耗,减少释放内存后产生的内存碎片。设计理念为了方便管理内存池的设计通常是划分出一定数量的内存块,这些内存块的长度是一样的;用户申请内存块时返回空闲的内存块地址,如果内存块使用完......
  • [ARC171] A~D 题解
    [ARC171]A~D题解A.NoAttacking最优策略是车隔行放,分讨一下就可以了。if(n<a)cout<<"No\n";else{if(a*2<n)b-=(a+1)*(n-a);else{b-=(n-a)*(n-a);if(b<=0)cout<<"Yes\n";......