概述
本文简要的阐述了通用战斗系统中的战斗攻/防流程,帮助你更容易地理解GCS的工作流。
进攻流程
进攻流程,指战斗实体对游戏中的其它战斗实体发起攻击的流程。
任意参与战斗的实体对象(包括环境/陷阱),都能针对游戏中的其它战斗实体发起进攻。
整个进攻流程的唯一目的是:创建GameplayEffect实例,并将其应用到目标。
下图是GCS中,人形角色发起进攻的一般流程:

流程步骤
- 激活技能:Attacker(玩家/AI)激活不同的技能,如近战Ability,或者法术Ability。
- 发起攻击请求:技能会播放不同的技能动作(动画),你在动画中放置AttackTrace/BulletTrace动画通知状态,并配置相关的攻击请求参数。
- Ability处理攻击请求:AttackTrace这个
动画通知状态的开始和结束,会通过Gameplay事件)将攻击请求交由Ability处理。而Ability则会根据攻击请求中的相关信息,构建需要应用的GameplayEffects实例。 - Melee:如果是Melee请求,则会激活角色或者武器所关联的碰撞追踪实例,并将相关信息传递给碰撞检测实例。碰撞检测实例获取到有效目标后,会告知Ability进行游戏效果应用。
- Bullet:如果是Bullet请求,则会通过子弹系统生成子弹实例,并将相关信息(游戏效果实例)传递给子弹实例。每一个子弹实例拥有自己的碰撞检测实例,当获取到有效目标后,由子弹将攻击信息应用到目标上。
对于在进攻流程中产生的游戏效果实例(GameplayEffectSpec/GameplayEffectContainerSpec),在实际应用到目标前,你都可以对其进行修改。
比如:
- 将攻击定义中的数值参数传递到GE。
- 根据情况为GE添加不同的Tag并在之后的流程中使用(比如用Tag表示是否为火焰伤害或者魔法伤害)
- 子弹随着飞行距离衰减伤害。
- 子弹飞行过程中为GE添加新的目标。
- 发送GameplayEvent并将Context传入,使得其它被动技能可以条件性修改Context中的内容。
伤害计算
GCS标准化了进攻流程的实现方式,攻击者的目的是给目标添加GameplayEffect,而你作为游戏设计者,则需要自定义你的伤害执行计算。
防守流程
防守流程,指战斗实体在游戏中受到其它战斗实体的攻击后,其对应的处理流程。
下图是“受击者”处理攻击的一般流程:

而每一个战斗实体则是通过战斗流去处理每一次的进攻。
总结
所谓的战斗,其本质上指的就是:游戏中的战斗实体之间进行攻防博弈,产生战斗结果,并进行相关处理。
