我也刚好做到这一块,简单描述一下思路。
首先定义一个管理特效的组件,EffectComponent,放在ModelView下(因为跟UnityEngine相关,数据必须在ModelView下做管理)
然后在HotfixView里写组件逻辑
逻辑就是写功能嘛,这个组件拥有的功能起码有这样几个:
1、读取特效资源,无论是粒子、animator动画等等
2、逻辑判断,比如通过Unit的动作文件名、技能等级等等信息,找到1中对应的资源
3、播放,比如延迟播放、循环播放、一次性播放
其次,为了解耦,要在需要播放特效的地方,抛出事件,无论是在Hotfix层,还是Model层;事件里带出上述2和3里需要的信息。
最后一点,我个人觉得,尽量把怪物、NPC这种,跟玩家角色的客户端逻辑统一起来。比如播放特效、播放动作,尽量使用同样的组件管理资源和逻辑。这种必要性是极其重要的,一方面方便维护,一方面功能上扩展方便。
比如,要作很多假人(机器人)模拟玩家行为放在新手村;还比如就作出人型怪物,跟玩家战斗。
这样你前期把动作和特效统一处理了,后续这些扩展需求就很容易实现。——我是吃了亏的,前期分开分别做动作、特效播放,现在正在重构,除了玩家必要数据字段,其他在客户端上,几乎要完全一致了。
再补充一下,我主要通过Excel表格,来定义动作、特效之间的关系。一张表格,是玩家数据与动作的关联,一张表格是动作与特效的关联。播放动作和特效,我分别用不同的Component来处理。