博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unity3d中设计模式的学习<一>:泛型单例
阅读量:5056 次
发布时间:2019-06-12

本文共 1580 字,大约阅读时间需要 5 分钟。

单例是游戏开发中比较常见的设计模式,虽然针对的功能不同,但是有一些功能还是共有的,代码也不少,如果能放在一个基类里面是最好不过了,但是单例里需要有个instance功能来返回当前对象,所以这个功能必须是static的,没办法直接继承,之前看了《面向对象的游戏开发》这本书里,使用的是泛型,于是我实验了几次

现在我们就来实现这个较为简单的单例泛型:

public class Singleton
: MonoBehaviour where T: MonoBehaviour //因为继承MonoBehaviour的物体不能使用new()来构造实例 所以这里只能用MonoBehaviour{ private static T instance; //实例目标对象 protected virtual void Awake() { this.CheckInstance(); //觉醒检查 } protected bool CheckInstance()//是否唯一,不是就销毁多余的目标,防止目标有多个挂载在其他gameobject上。 { if (this == Singleton
.Instance) { return true; } UnityEngine.Object.Destroy(this); return false; } public static T Instance { get { if (Singleton
.instance == null) { Singleton
.instance = (T) UnityEngine.Object.FindObjectOfType(typeof(T));// 如果对象没实例化,则为空 if (Singleton
.instance == null) { Debug.LogError(typeof(T) + " was no attached GameObject"); } } return Singleton
.instance; } }}

基类做好了,然后下面是派生出的各种功能的单例:

public class PlayerCtrl : Singleton
{ .............................................}public class GameManager: Singleton
{ .............................................}

注意到,基类是泛型,所以每个Singleton<T>都是不同的实例 使用时 直接 Singleton<PlayerCtrl>.Instance 就可以返回单例的PlayerCtrl

转载于:https://www.cnblogs.com/Persona/p/4100936.html

你可能感兴趣的文章
JS截取字符串常用方法
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
ACdream 1115 Salmon And Cat (找规律&amp;&amp;打表)
查看>>
JSON、JSONP、Ajax的区别
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
css3动画——基本准则
查看>>
javaweb常识
查看>>
Java注解
查看>>
web自己主动保存表单
查看>>
一个小的日常实践——高速Fibonacci数算法
查看>>
机器学些技法(9)--Decision Tree
查看>>
drf权限组件
查看>>