Unity
单例 Singleton
打开Unity,新建一个空工程,然后Unity界面如下图
在工程中新建3个脚本,脚本分别可以命名为“SingletonBase”、“SingletonTest”、“ToUseSingletonTest”,具体如下图
选中“SingletonBase”脚本,双击脚本或者右键“Open C# Project”,具体如下图
在打开的“SingletonBase”脚本上进行代码编辑,首先使单例基类泛型化,泛型条件要求继承单例基类,然后在单例属性里面新建一个游戏空物体,并且挂载泛型脚本,最后自动在Awake实例化单例,具体代码及代码说明如下图
“SingletonBase”脚本内容如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class SingletonBase
在打开的“SingletonTest”脚本上进行代码编辑,首先继承单例基类SingletonBase,然后在写一个公有函数便于测试使用,具体代码及代码说明如下图
“SingletonTest”脚本内容如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class SingletonTest : SingletonBase
在打开的“ToUseSingletonTest”脚本上进行代码编辑,首先在Update函数里判断是否按下“S”键,若按下,则调用“SingletonTest”单例的测试函数,具体代码及代码说明如下图
“ToUseSingletonTest ”脚本内容如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class ToUseSingletonTest : MonoBehaviour { void Update () { if (Input.GetKeyDown(KeyCode.S)) { print('ToUseSingletonTest类:调用SingletonTest:'); SingletonTest.Instance.TestFuc(); } }}
脚本编译正确后,回到Unity界面,在场景中新建一个“GameObject”,然后把脚本“ToUseSingletonTest”赋给“GameObject”,具体如下图
运行场景,即可看到控制台Console上的打印结果与预期一致,并场景中自动生成一个“SingletonTest”游戏物体,且挂上了“SingletonTest”脚本,具体如下图
到此,《Unity 单例技巧 之 可重用可自动挂载的单例基类》讲解结束,谢谢
Singleton模式中的实例构造器可以设置为protected以允许子类派生。
Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样跟Singleton模式的初衷违背。
Singleton模式只考虑到了对象创建的管理,并没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。
若帮到您,还请帮忙投票以帮助到更多的人;若有疑问,请留言