Unity中消息派发系统的总结(1)

本文总结了Unity中消息派发的重要性及其自带函数SendMessage的效率问题,提出了一套自定义的消息派发系统。该系统基于订阅发布模式,通过两种实现方式详细阐述:一种存储订阅对象并调用接口函数,另一种存储函数引用直接调用。通过实例展示了如何在不同模块中订阅和处理消息,以提高项目的解耦性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息派发对项目中各个功能模块的解耦非常有帮助,免去模块间复杂的调用.

但unity自带的消息函数SendMessage效率一直都不高,所以基本上项目中都很少用它,而是自己写一套消息派发.

 

消息派发原理简单:订阅发布模式.

各模块需要注意哪些消息就订阅哪些消息[比如我定了报纸,而我邻居定了牛奶]

消息派发者会保存对应的订阅者信息[这个消息派发企业业务很广泛,既有报纸也有牛奶]

业务逻辑中需要触发该消息时,消息派发者就会检索我的订阅信息看看有没有模块订阅了该消息,有那么触发这个模块的处理函数[派出快递员,敲你大门,把报纸牛奶给你] 

 

实现方式大致有2种:

1.

->写消息派发类,该类作为单例确保全局调用,它包含 订阅函数 取消订阅函数 和 派发函数 . 以及存储订阅信息的数据结构:Dictionary<string,List<IMsgHandler>>

->写一个接口类, 如 IMsgHandler , 它声明 订阅者模块处理消息的函数格式. 如: public bool OnMsgHandler(string msgName,param object[] args);

->订阅者继承接口类,订阅消息并重写IMsgHandler接口实现自己的业务逻辑 .

 

2.

->写消息派发类,该类作为单例确保全局调用,它包含 订阅函数 取消订阅函数 和 派发函数 . 以及存储订阅信息的数据结构Dictionary<string,UnityAction<T>>

->订阅者继承接口类,注册订阅消息函数,实现自己的业务逻辑 .

 

这两种方式的区别在于第一种存储的是对象 ,另一种存储的是函数引用.

存储对象:派发时 遍历字典中订阅的对象,然后调用消息处理接口函数,所有的逻辑都在一个函数中 比较集中. 

存储函数引用:派发时 遍历字典中订阅的函数引用,直接调用该引用, 调用相对分散但方便

 

下面贴代码:

第一种:<

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值