༺༽༾ཊ—Unity之-05-单例模式—ཏ༿༼༻

在游戏开发过程中,我们会创建各种各样的类,再用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.

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值