| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity中多种单例模式的实现方式 -> 正文阅读 |
|
[游戏开发]Unity中多种单例模式的实现方式 |
两大类,一类是普通C# 类 的单例,二类是继承Mono的单例 普通C#类: 1. 普通类的单例懒汉式(首次调用的时候才实例化,非线程安全)
优点:代码简单,实现方式简单。 缺点:项目中若需要很多类的单例来支撑的话,使用这种方式会让我们编写很多无用的重复代码(每个类都要实现一遍) 适用场景:适合单例使用较少的项目。 饿汉式(在进行实例声明的时候,它就完成了初始化,线程安全,但在不一定会使用到的单例中容易产生垃圾对象,浪费内存)
2.?泛型单例(做为单例基类使用)(进阶版,做为一个基类存在,每当一个类需要做为单例时只要继承他就行,不用每次都再单独构造)
优点:代码相对简单,只需要继承Singleton<T>类就可以实现单例类。 缺点:因为泛型约束中填写了new(),因此子类无法私有化构造函数,子类依然可以通过new来实例化对象。 适用场景:适合单例使用较多的项目。 3. 静态内部类????静态内部类的方式在实现上比起上边两种稍微复杂一些,但同时兼顾了lazy loding和多线程安全,
静态内部类又是如何实现兼顾两者的呢? ? ? 我们知道,静态成员的初始化,是在类进行装载的时候进行的,而在我们没有调用过GetSingleton()方法之前,InitSingleton类没有进行任何调用, 而多线程安全的实现方式则和饿汉式一样了; 继承MonoBehaviour类的实现方式 4. 简单继承Mono的单例????MonoBehaviour的子类实现单例模式的方式很简单,只需要创建一个静态的实例然后加上 该实例 = this 就可以了
优点:在单例进阶版的基础上改进,会在U3D中创建一个空对象并把对应的管理器脚本挂上去,从而对游戏进行 ? ? ? ? ? 相应的“特殊”管理。 缺点:必须得调用一次GetInstance才会创建对象。 使用场景:需要在游戏中生成一个空对象(挂载相应的管理脚本)用来实时管理游戏状态的情况。 Unity中继承MonoBehaviour脚本有两个特性: 1. MonoBehaviour不能使用构造函数进行实例化,只能挂载在GameObject上。 当切换场景时,当前场景中的GameObject都会被销毁,这种情况下,单例对象也会被销毁。 5.?DontDestroyOnLoad场景常驻单例如果不希望切换场景时单例被销毁需要使用Unity的 DontDestroyOnLoad(GameObject obj) 函数。代码如下
当然,要确定你确实需要常驻这些Unity?对象,不然不能及时销毁GC 浪费内存。 单例类与静态类在c#中的区别是什么 - 开发技术 - 亿速云 UNITY 单例模式的坑,别写构造函数_草样年华的博客-CSDN博客 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 18:31:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |