首页 > 其他分享 >Unity单例模式

Unity单例模式

时间:2023-12-26 19:34:53浏览次数:30  
标签:模式 instance Unity static 单例 MonoBehaviour where public

单例模式通常用于生成单一管理者,例如假设游戏只能有一个玩家,那么就可以将玩家的控制器作为一个单例存在使用。或者场景控制,也可以作为一个单例来使用。

//BaseManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Singleton <T> where T:new()
{
    private static T instance;
    public static T GetInstance()
    {
        if(instance == null)
            instance = new T();
        return instance;
    }
}

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

逐步解释

public class Singleton<T> where T:new()
//使用<T>来扩大其泛用性,这样就可以直接利用这个基类建立其他单例。
//where T:new()做约束,强制要求其存在新建方法,否则后续instance = new T();无效
{
    private static T instance;
    //单例不应该被随意获取,保持为私有状态
    public static T GetInstance()
    //使用一个公有函数来对单例进行访问
    {
        if(instance == null)//单例为空
            instance = new T();//新建单例
        return instance;//返回单例,由于前面已经保证单例不为空,所以必有返回值
    }
}
//对于需要继承MonoBehaviour的单例,则会有一定的变化
public class MonoSingleton<T> : MonoBehaviour where T: MonoBehaviour
//仍然还是和Singleton类似,使用where强制约束当前类继承MonoBehaviour
{
    private static T instance;
    public static T GetInstance()
    {
        //由于MonoBehaviour保证了启动必加载,因此不存在单例为空的情况,因此可以直接返回单例
        return instance;
    }
    void Awake()
    {
        //直接转换其为T类型并赋值
        instance = this as T;
    }
}

标签:模式,instance,Unity,static,单例,MonoBehaviour,where,public
From: https://www.cnblogs.com/ComputerEngine/p/17929148.html

相关文章

  • Ubuntu系统进入单用户模式
    启动Ubuntu系统时在显示Ubuntu机界面时按住shift,随后会进入,选择Ubuntu高级选项  进入内核选择,选择最新版本且后面带有recoverymode的一行,直接按e进入编辑模式 进入这个界面后控制光标找到上面红框中的ro,把ro改成rw,然后按CTR+X启动  在出现的7个选项中选择root,......
  • java状态模式
    1定义一个接口2publicinterfaceState{3publicvoidhandle();4}567/**8*具体的状态角色(下单)9*CreatedbyAdministrator10*/11publicclassPlaceAnOrderimplementsState{12//具体化状态的行为13@Override14public......
  • Unity引擎2D游戏开发,受伤及死亡的逻辑和动画
    裁切素材制作受伤动画略制作死亡动画由于没有死亡动画素材,所以直接调整Alpha通道数值,使其逐渐消失在Animations中复制野猪受伤动画,命名为boarDeadAnimator中拖入boarDead动画点击AddProperty,选择Color将最后一帧的Alpha值改为0Animator连接动画逻辑从AnyState连接......
  • 设计模式 之适配器模式
    适配器模式(适配器模式)定义==适配器模式==将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被适配者。这种做法还有额外的优点,那就是被适配者的任何子类都可以搭配着适配器......
  • 调停者(中介)模式
    #include<iostream>#include<string>usingnamespacestd;classColleague;classMediator{public://对象在自身改变的情况下,通知Mediator进行变更//让我们Mediator这个总线,负责相应的同事对象的交互virtualvoidchanged(Colleague*pColleague)=0;......
  • Unity3D:打造关卡编辑器详解
    前言Unity是一款非常流行的游戏引擎,它提供了丰富的工具和功能,可以让开发者轻松地创建各种类型的游戏。其中,关卡编辑器是一个非常重要的工具,它可以让开发者快速、方便地创建游戏中的关卡。本文将详细介绍如何使用Unity打造一个关卡编辑器,并提供代码实现。对惹,这里有一个游戏开发......
  • Dart设计模式之代理模式
    dart设计模式之代理模式代理模式模式分析在代理模式(ProxyPattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。模式难点模式解决问题在直接访问对象时带来的问题,比如说:要访问的对象在远程的机......
  • Dart设计模式之享元模式
    dart设计模式之享元模式享元模式(Flyweight)模式分析享元模式(FlyweightPattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对......
  • Unity Shader学习随笔
    阴影:光源看不到,但相机看得到的地方,就是阴影变体:一个普通的Shader可能会有很多种效果例如一个火焰溶解效果,写在Shader里,但其实在未触发之前我们不需要去计算该效果因此需要在未触发前,将火焰溶解的效果计算关闭这就用到了变体,把火焰溶解的效果计算变成变体无论如何都会被编译......
  • Unity3D 锁帧与垂直同步的不同处详解
    Unity3D是一款强大的游戏开发引擎,而锁帧与垂直同步是其中两个重要的概念。本文将详细解释锁帧与垂直同步的不同之处,并给出相关的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。......