几种技能系统的大概流程

非帧同步,mmo类型的游戏技能系统(基于技能模板)
ActorSystem(单位系统,管理场景中的Actor)
ActorEntity(单位实体):持有BuffEntitys,SkillEntitys
监听ui层技能按钮的点击,点击后回调CasterId(释放者Id)和SkillId(技能id)到SkillValid(客户端本地的技能释放验证),
通过后表现层先播放前摇动画,且发释放技能的消息到服务器,服务器接收到消息后经过验证后返回消息,客户端接收到消息后,
发现不可释放则前摇动画中断
可释放则根据技能id得到SkillConfig,再根据SkillConfig中的技能模板id组装出SkillEntity,且存储到ActorEntity的SkillEntitys中
且在前摇动画结束后播放特效,进行伤害表现,同步自己和受打击玩家的数据


非帧同步,act类型的游戏技能系统(基于帧事件,此处为单机的战斗)
ActorSystem(单位系统,管理场景中的Actor)
ActorEntity(单位实体):持有BuffEntitys,SkillEntitys
监听ui层技能按钮的点击,点击后回调CasterId(释放者Id)和SkillId(技能id)到SkillValid(客户端本地的技能释放验证),
通过后
根据SkillId组装出SkillConfig(技能属性配置)和SkillEntity(技能实体,持有技能属性配置引用),
SkillConfig:有持续时间,伤害,对应动画Id,SkillFrameEvents(帧事件列表),触发条件枚举等属性
SkillFrameEvent:根据不同的帧事件有不同的属性,例如伤害帧有AABB碰撞盒信息,总伤害,伤害分几段表现。位移帧则是位移相关的信息。添加buff帧则是buffId,冲突buffId列表
SkillEntity有以下方法:CheckTrigger,TriggerFrameEvent


帧同步技能(基于帧事件)
跟act类型的游戏技能系统类似也是基于帧事件
表现层和逻辑层分离,有两种分离方式
1是类似ecs的方式,表现层update里访问数据层的状态进行表现层的状态切换
2是数据层中有表现层的接口,但是表现层对数据层只读
动画播放:编辑模式下预烘培动画得到位置偏移配置(每帧的位置,旋转信息)
位移:播放技能时不通过动画控制位移,根据逻辑帧时间控制以及动画位置偏移配置进行位移控制
物理碰撞:力,AABB,OBB

 

技能编辑器:

1.只做数据配置,类似表,基于Timeline去管理

2.配置帧事件时在Game里同步播放角色动画,特效,碰撞框等

 

附一张以前做技能编辑器时的结构图

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章