多语言展示
当前在线:1481今日阅读:27今日分享:41

Unity 单例技巧 之 可重用可自动挂载的单例基类

Unity 单例技巧 之 可重用可自动挂载的单例基类。单例在Unity 游戏开发中经常用到,而且很多,如果每个单例都写一个单例代码,就会出现许多重复代码,不符合编程的可重用性,本节介绍如何建立一个单例基类,即实现代码重用又可以单例自动挂载的简单案例,具体如下
工具/原料
1

Unity

2

单例 Singleton

单例技巧 之 可重用可自动挂载的单例基类
1

打开Unity,新建一个空工程,然后Unity界面如下图

2

在工程中新建3个脚本,脚本分别可以命名为“SingletonBase”、“SingletonTest”、“ToUseSingletonTest”,具体如下图

3

选中“SingletonBase”脚本,双击脚本或者右键“Open C# Project”,具体如下图

4

在打开的“SingletonBase”脚本上进行代码编辑,首先使单例基类泛型化,泛型条件要求继承单例基类,然后在单例属性里面新建一个游戏空物体,并且挂载泛型脚本,最后自动在Awake实例化单例,具体代码及代码说明如下图

5

“SingletonBase”脚本内容如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class SingletonBase : MonoBehaviour where T : SingletonBase {    private static T instance;    public static T Instance {        get {            if (instance == null) {                GameObject obj = new GameObject(typeof(T).Name);                instance = obj.AddComponent();            }            return instance;        }    }    protected virtual void Awake() {        instance = this as T;    }}

6

在打开的“SingletonTest”脚本上进行代码编辑,首先继承单例基类SingletonBase,然后在写一个公有函数便于测试使用,具体代码及代码说明如下图

7

“SingletonTest”脚本内容如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class SingletonTest : SingletonBase {    public void TestFuc()    {        print('继承单例基类\n' +            'SingletonTest : SingletonBase\n' +            '调用函数TestFuc()');    }}

8

在打开的“ToUseSingletonTest”脚本上进行代码编辑,首先在Update函数里判断是否按下“S”键,若按下,则调用“SingletonTest”单例的测试函数,具体代码及代码说明如下图

9

“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();        }    }}

10

脚本编译正确后,回到Unity界面,在场景中新建一个“GameObject”,然后把脚本“ToUseSingletonTest”赋给“GameObject”,具体如下图

11

运行场景,即可看到控制台Console上的打印结果与预期一致,并场景中自动生成一个“SingletonTest”游戏物体,且挂上了“SingletonTest”脚本,具体如下图

12

到此,《Unity 单例技巧 之 可重用可自动挂载的单例基类》讲解结束,谢谢

要点补充
1

Singleton模式中的实例构造器可以设置为protected以允许子类派生。

2

Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。

3

Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样跟Singleton模式的初衷违背。

4

Singleton模式只考虑到了对象创建的管理,并没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。

注意事项

若帮到您,还请帮忙投票以帮助到更多的人;若有疑问,请留言

推荐信息