最近工作碰到了个战斗模块, 于是来总结一下.这是一个卡牌游戏,所以战斗是事先计算好的, 之后再进行播放, 这里我先晒晒前台播放的框架, 有人关注的话, 我再介绍下战斗过程的生成
PS: 这是我第一次写卡牌战斗, 各种不足欢迎拍砖, 不过对于战斗模块的新手还是有些可参考的
PS: 这部分策划也可以参考一下
一. 播放器
1 需求
播放战斗内容action(并行,串行均可), 暂停, 变速, 跳过, 重播, 剧情, 聚焦效果, 震动效果
2 设计
1⃣️ 播放器类: 封装播放流程,并提供播放器代理协议, 提供接口给使用者 (如播放技能前后, 播放前后, 暂停等)
2⃣️ pve,pvp,世界boss播放器等子类 (实现播放器协议)
3⃣️ 战斗界面类: 处理UI
4⃣️ 剧情类: 提供剧情内容, npc对话
3 好处
1⃣️ 利用模板模式,组合模式 , 可以应对不同类型战斗, 播放需求不同的情况
2⃣️ 代码分散,内聚高
4 代码
1⃣️ 播放器类:
代理:
2⃣️ pve播放器类,世界boss播放器类,pvp播放器类
略
3⃣️ 战斗界面类
略
4⃣️ 剧情类
略
二. 战斗行为单元
1 需求
1⃣️ 事先生成,并组合
2⃣️ 美术和策划可自由配置并测试
2 设计
1⃣️ 行为单元统一化: 普通攻击和死亡都视作释放技能,统一为一类行为 ps: 有些死亡是触发技能的,所以这样处理
2⃣️ 嵌套层次: 不允许嵌套, 简化设计
3 代码
action节点
三. 战斗人物单元
1 需求
1⃣️ 人物头像大小不固定, boss的会大 (多余需求 参考全民里的boss战的做法),
2⃣️ 血量 怒气的动画, 各种buff效果,
3⃣️ 各种技能造成的不同受击效果, 效果间的层次关系
4⃣️ 格挡,闪避
2 设计
1⃣️ 一个battleUnit类
2⃣️ 受击时(加血等技能也算), 才会触发buff, 格挡, 血量, 怒气一类
3 好处
略
4 待优化
略
5 代码
略
四. 技能动画单元
1 需求
1⃣️ 不同类型的技能出手方式: 原地不动播放出手动画; 冲到不同位置播放动画
受击方式: 群体;单体;单列;单行;任意点位
弹道方式: 一个弹道多个受击; 多个弹道多个受击; 一个弹道一个受击
动画的时间顺序: 出手动画->弹道动画->技能动画->受击效果动画(单体或群体)->.......(掉血等)
注意: 动画顺序不能变,但可以交叉(糟糕的需求)
2⃣️ 动画旋转
技能动画: 180度旋转; 不旋转
3⃣️ 需求限制动画不能部分旋转,部分不旋转
2 设计
1⃣️ 技能定义类: 不同技能根据类型来选择技能模板,并配置买二手手游账号
2⃣️ 技能模板: 模板由不同动画节点组成(出手, 受击, 弹道等)
3⃣️ 技能动画节点: 出手动画节点: PreSkillPlaceholder,
出手动画节点: RushActionPlaceholder --- [attackDirection]攻击方向, [destRegion]目的地
弹道动画节点: ThrowActionPlaceholder --- [destRegion]目的地, [normalizedLength] 弹道长度
技能动画节点: AttackActionPlaceholder --- [skillInfo] 技能 [influencedRange] 受击区域
受击效果动画节点: 无
并行动画组合: TraverseAffectedRangePlaceHolder -- [delayFunc] 不同动画的开始时间点 (用于多个弹道动画并行,这块的需求其实很不好)
每个节点必包含信息 :<type>类型, <actor>释放者, <postFix>文件后缀名,每个节点会根据当前战斗节点的信息,来判断动画位置和作用区域
3 好处
1⃣️ 使用者在拓展技能时,只需要关注技能定义类即可
2⃣️ 技能细分粒度较细, 便于应对较复杂的组合
4 待优化
1⃣️ 技术实现: 复杂度很高,却仅仅应对如此简单的战斗 (ps 全民英雄的战斗那么富有深度, 包含了速度,集火,各种buff, 跟其对技能动画的合理简化是离不开的)
2⃣️ 多余需求: 群攻击动画时, 所有弹道动画,受击动画应该同时播放,降低美术和技术的复杂度
3⃣️ 考虑不周: 策划和美术在制作技能动画时, 应该多考虑翻转,阵型位置,人不足等表现情形
4⃣️ 多余需求: 英雄抬手动画和冲击动画可以作为一个, 且保证冲击动画只冲击中间部分,这样无需根据阵型去调整
6⃣️ 考虑不周: 美术方面. 多体攻击时, 技能动画应该忽略占位,占位是随时都会变的, 比如人死了, 其位置不会播具体的动画, 不要在每个占位处出现什么技能特效之类的具体动画
7⃣️ 考虑不周: 技能没有专门的特效音
5 代码
1⃣️ 技能定义类
2⃣️ 技能模板:
3⃣️ 技能动画节点