????—Unity之-01-单例模式—????

发布时间:2024年01月21日

在游戏开发过程中,我们会创建各种各样的类,再用new生成实例,有些时候我们需要这个类在整个游戏中是唯一出现的,比如一些管理器比如声音管理器等,没必要创建很多实例,就算有很多模块需要各种声音功能,但我们只需要用这个声音管理器中的各种方法进行实现就好了。再比如UI管理器,网络管理器等等,比如说我们在制作单机游戏时,需要用到的人物管理器可以设置成单例模式,

首先我们在unity中创建一个脚本 人物管理器PlayerController

我们可以先简单自定义一个字段与方法

再创建一个敌人类

在不使用单例模式之前我们可以这样创建敌人类,

定义一个私有的 GameObject游戏对象类型 变量储存到 player变量中,

在Start()函数中 调用GameObject.Find()函数将再unity场景中查找到的名为Player的物体 存储到player变量中,

?在Update()函数中,我们这里调用打印Debug.Log()函数代表作用到了 玩家的位置坐标

player.transform.position,

最后用场景中物体变量player 打点. 调用GetComponent<>()函数 打点. 二次调用人物控制器PlayerController?类的 SayHello()函数

但这样做在Update()每帧函数中持续获取组件十分耗费内存,

所以我们需要再定义一个私有 人物控制器类PlayerController 类型的变量 存储到 playerController变量中,

在Start()函数中调用的意思就是在游戏一开始运行就

player = player.GetComponent<PlayerController>();

获取人物身上的人物控制器组件 存储到 人物控制器组件变量中,

最后在Update()每帧函数中不用获取组件,直接用人物控制器变量 打点. 调用SayHello()函数即可

显然在编写敌人类代码时十分麻烦,不仅要创建私有字段,还要在Start()函数中获取组件,

如果我们采取单例模式,很容易就能解决这个问题

下面我们修改PlayerController代码:

首先在人物控制器类 添加私有静态字段 代表 人物控制器的实例 存储到 instance变量中,

再调用生命周期的第一个函数Awake() 调用自己;

这样我们扩展敌人类时就十分方便如下:

只需要静态类 调用自己的实例化对象 打点.调用后续函数即可

但这样编写不适用于Awake()函数有多个的情况

最后我们进行优化:

首先定义一个私有的静态类实例,

然后公开一个静态类方法 判断 将这个类的类型 存储到 instance变量中 最后返回到 Instance字段中,

在扩展敌人类时我们只需要 用 人物控制器类PlayerController 打点. 调用 大写Insatnce字段即可

End.

文章来源:https://blog.csdn.net/weixin_69360830/article/details/135728721
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。