Unity 3d 继承MonoBahaviour的单例

devtools/2024/10/19 9:24:44/

在使用Unity3d开发游戏或做客户端项目时,单例是最常见的模式之一,他简单了类的创建,在代码中可以直接调用。下面是两个例子,代码两种不同类型的单例,一个是基本类的单例基类,不是unity MonoBehaviour的类都继承它,一个是从MonoBehaviour派生的单例基类:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 游戏单例基类,泛型约束表示T必须是一个类,,且有一个无参的构造方法
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract  class BaseSingleton<T> where T : class,new () { private static T _instance = new();public static T GetInstance() {return _instance;}public static T Instance{get{return _instance;}}
}/// <summary>
/// 继承MonoBahaviour的单例基类,
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class BaseMonoBehaviourSingleton<T> : MonoBehaviour where T: MonoBehaviour{private static T _instance = null;public static T Instance {get { if(_instance == null){_instance = FindObjectOfType(typeof(T)) as T;if (_instance == null) {GameObject obj = new GameObject();_instance = (T)obj.AddComponent(typeof(T));obj.hideFlags = HideFlags.DontSave;obj.name = typeof(T).Name;DontDestroyOnLoad(obj);}}return _instance;}}}

http://www.ppmy.cn/devtools/125248.html

相关文章

ES6语法有哪些

ES6语法包括let和const声明、箭头函数、模板字符串、解构赋值、扩展运算符、类和模块化等。以下是这些特性的具体介绍&#xff1a; let和const声明 let声明&#xff1a;let允许程序员在块级作用域内声明变量&#xff0c;这意味着变量只在其定义的代码块&#xff08;由大括号包围…

JavaScript 第8章:日期与时间

在编程中处理日期与时间是一个常见的需求&#xff0c;特别是在涉及到数据记录、定时任务或者任何需要时间和日期的应用场景中。下面我们将针对您提到的几个方面来展开深入讲解。 Date 对象 在JavaScript中&#xff0c;Date对象用于处理日期和时间。创建一个Date对象可以使用以…

神经网络的一些benchmark示例

1.MLPerf https://github.com/mlcommons/inference?tabreadme-ov-file https://docs.mlcommons.org/inference/benchmarks/text_to_image/sdxl/ MLPerf 是一个业界标准的机器学习基准测试套件&#xff0c;旨在评估各种硬件、框架和模型的性能。它包含训练和推理两个部分&…

85 外网用户通过域名访问内网服务器

1. 组网需求 某公司内部对外提供Web服务&#xff0c;Web服务器地址为10.110.10.2/24。 该公司在内网有一台DNS服务器&#xff0c;IP地址为10.110.10.3/24&#xff0c;用于解析Web服务器的域名。 该公司拥有两个外网IP地址&#x…

科大讯飞 C++开发工程师

文章目录 1. 内存泄漏和内存溢出的概念内存泄漏和内存溢出的概念2. new的底层原理3. this指针的原理 如果把this delete,还能用吗,什么场景下还能用?4. 进程间的通信方式,线程间的通信方式进程间的通信方式线程间的通信方式5. 怎么避免死锁6. 四种强制类型转换7. 右值引用和…

vue路由缓存问题

什么是路由缓存问题 解决方案&#xff1a; 让组件实例不再复用&#xff0c;强制销毁重建监听路由变化&#xff0c;变化之后执行数据更新操作 方法一 给 routerv-view 添加key属性&#xff0c;强制不添加缓存&#xff0c;破坏缓存&#xff0c;所以这个方法性能会比较差 <Ro…

竞赛C/C++ 代码模板

大家都知道&#xff0c;比赛&#xff0c;竞争过程&#xff0c;争分夺秒&#xff01; 大家也知道&#xff0c;比赛&#xff0c;编程耗时&#xff0c;至关重要&#xff01; 为了解决这一问题&#xff0c;我写一下大佬们&#xff0c;书写时的代码习惯。 熟悉掌握之后&#xff0c;能…

Python基础语法(1)

文章目录 Python基础语法字面量常用的值的类型如何基于print语句完成各类字面量的输出 注释变量数据类型type()语句 数据类型转化常见的转换语句 标识符标识符命名规则 运算符字符串扩展字符串的三种定义方式字符串拼接字符串格式化数字精度的控制快速写法表达式的格式化 Pytho…