Unity游戏框架学习笔记——03基于观察者模式的事件中心

本文介绍了在Unity中使用观察者模式构建事件中心,以降低脚本间的耦合性和复杂性。通过事件中心,当怪物死亡时,会广播事件,订阅此事件的Player、Task等脚本会自动执行相应方法。文章讨论了事件订阅的添加与移除,以及场景切换时的处理,强调了防止内存泄露的重要性。同时,提到了Object与object的区别。
摘要由CSDN通过智能技术生成

Unity游戏框架学习笔记——03基于观察者模式的事件中心

基于观察者模式的事件中心

一如既往指路牌:https://www.bilibili.com/video/BV1C441117wU?p=5.
视频原本是免费的,完整视频移步泰课吧/(ㄒoㄒ)/~~…
泰课指路牌:https://www.taikr.com/course/1062/task/31006/show.

引入

对于一般写脚本的话,如果要实现监听某个状态,让脚本在该状态下实现相应动作的执行,都是在更新这个状态对应的脚本里,判断该状态为真后,获取其余对象中关心该状态的脚本里方法来执行。

举个栗子:

怪物的身上挂着一个Monster脚本,其中有一个方法MonsterDead();
然后
玩家关心奖励,玩家身上有一个Player脚本,里面有一个PlayerWaitMonsterDead()方法会在怪物死亡执行一些操作;
任务系统会更新,任务系统身上也有一个Task脚本,里面有TaskWaitMonsterDead()方法是关心怪物死亡的;
其他的一些同样关心怪物死亡的脚本也是一样有相关方法;

那么
当怪物死亡时,如果要通知这些脚本执行关心怪物死亡的方法的话,我们一般也是在怪物脚本的MonsterDead()方法里面,获取相关的脚本,执行相应方法:
MonsterDead()
{
// Monster Dead //
GameObject.Find(“Player”).GetComponent< Player >().PlayerWaitMonsterDead();
GameObject.Find(“Task”).GetComponent< Task >().TaskWaitMonsterDead();
GameObject.Find(“Other”).GetComponent< Other >().OtherWaitMonsterDead();
}

可以看出,在Monster脚本里,不可避免地出现了很多其他脚本的方法
那么我们不妨夸张的想一想,当一个游戏很大,里面的功能也更加多的时候,上述这样的情况是不是就会出现得更加频繁,脚本和脚本之间联系也会乱七八糟,这个时候脚本之间就出现所说的耦合性较大的情况,而且脚本之间也会很复杂
如果在这个时候,要额外增加一些功能的话,就会牵一发而动全身了,大改自然是必须的了。
于是为了降低程序之间的耦合性,较小复杂性,提高开发效率,基于观察者模式的事件中心,也就应运而生了。

事件中心

事件中心就是字面上的意思,具体实现的功能就是负责事件的记录和分发。
比如说当怪物死亡,那么怪物就向事件中心公布派发出“怪物死亡了”这个事件,事件中心接收到之后,就会提醒订阅了该事件的方法,让关心这个事件的方法执行。

代码

/// <summary>
/// 事件中心类
/// </summary>
public class EventCenter : Singleton<EventCenter>
{
   
    // key —— 时间名字
    // value —— 关心这个事件的委托方法们
    public Dictionary<string, UnityAction> eventsDictonary = new Dictionary<string, UnityAction>();

    /// <summary>
    /// 给关心这个事件的方法提供监听(订阅)
    /// </summary>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值