Unity 社区

单例模式

,5 年前
发布于技术交流
0
https://www.bilibili.com/video/BV1Jt4y1q7mn/?t=0h7m30s
93 次浏览
评论 0
1个回答
0
单例模式是设计模式之一(不仅限在C#和Unity中) 在Unity中使用频率很高(观察者,工厂,FlyWeight,Command,State都会有所应用) 保证场景中有且仅有一个实例(即使场景转换中) 一般是GameManager,AudioManager,UIManager这种管理类的脚本,需要设置为单例,保证脚本唯一性,也避免了大量的FindObjectOfType对这些脚本的引用
市面中单例模式的写法比较多,有懒汉模式,有双锁,我自己在Unity学习中教程里看过不少为了简化,直接写 private void Awake() { instance = this; } 这样的写法纯碎为了快速获取这个脚本中的方法和变量,但是场景转换后会出问题,误导性比较大(只是为了教程的内容而已) 我自己平时用以下这个,除了一些极端情况需要调整不同脚本之间的执行顺序,这部分单例模式本身是没有问题public static DialogueManager instance;//DialogueManager是类名 private void Awake() { if(instance == null) { instance = this; } else { if(instance != this) { Destroy(gameObject); } } DontDestroyOnLoad(gameObject); }
这是我频道中,唯一一部以代码为封面的视频教程,就是为单例模式 https://www.bilibili.com/video/BV1QJ411W7rC和未来可能的设计模式准备的~ 在这部视频中,我也将事件系统设置为了单例模式,有兴趣的可以看看 https://www.bilibili.com/video/BV1Jt4y1q7mn/?t=0h7m30s,管理类的脚本非常适用设置为单例
5 年前回答
评论 0

AI

全新AI功能上线

1. 基于Unity微调:专为Unity优化,提供精准高效的支持。

2. 深度集成:内置于团结引擎,随时查阅与学习。

3. 多功能支持:全面解决技术问题与学习需求。

AI