战斗攻防流程

本文简要的阐述了通用战斗系统中的战斗攻/防流程,帮助你更容易地理解GCS的工作流。

Cover.GCS
罗传月武(YueWu)

作者

罗传月武(YueWu)

专注游戏开发和Web技术。

创建时间: 2025年11月25日更新时间: 2026年9月15日

目录

概述

本文简要的阐述了通用战斗系统中的战斗攻/防流程,帮助你更容易地理解GCS的工作流。

进攻流程

进攻流程,指战斗实体对游戏中的其它战斗实体发起攻击的流程。

任意参与战斗的实体对象(包括环境/陷阱),都能针对游戏中的其它战斗实体发起进攻。

整个进攻流程的唯一目的是:创建GameplayEffect实例,并将其应用到目标。

下图是GCS中,人形角色发起进攻的一般流程:

战斗流程.攻

流程步骤

  1. 激活技能:Attacker(玩家/AI)激活不同的技能,如近战Ability,或者法术Ability。
  2. 发起攻击请求:技能会播放不同的技能动作(动画),你在动画中放置AttackTrace/BulletTrace动画通知状态,并配置相关的攻击请求参数。
  3. Ability处理攻击请求:AttackTrace这个动画通知状态的开始和结束,会通过Gameplay事件)将攻击请求交由Ability处理。而Ability则会根据攻击请求中的相关信息,构建需要应用的GameplayEffects实例。
  4. Melee:如果是Melee请求,则会激活角色或者武器所关联的碰撞追踪实例,并将相关信息传递给碰撞检测实例。碰撞检测实例获取到有效目标后,会告知Ability进行游戏效果应用。
  5. Bullet:如果是Bullet请求,则会通过子弹系统生成子弹实例,并将相关信息(游戏效果实例)传递给子弹实例。每一个子弹实例拥有自己的碰撞检测实例,当获取到有效目标后,由子弹将攻击信息应用到目标上。

对于在进攻流程中产生的游戏效果实例(GameplayEffectSpec/GameplayEffectContainerSpec),在实际应用到目标前,你都可以对其进行修改。
比如:

  1. 将攻击定义中的数值参数传递到GE。
  2. 根据情况为GE添加不同的Tag并在之后的流程中使用(比如用Tag表示是否为火焰伤害或者魔法伤害)
  3. 子弹随着飞行距离衰减伤害。
  4. 子弹飞行过程中为GE添加新的目标。
  5. 发送GameplayEvent并将Context传入,使得其它被动技能可以条件性修改Context中的内容。

伤害计算

GCS标准化了进攻流程的实现方式,攻击者的目的是给目标添加GameplayEffect,而你作为游戏设计者,则需要自定义你的伤害执行计算。

防守流程

防守流程,指战斗实体在游戏中受到其它战斗实体的攻击后,其对应的处理流程。

下图是“受击者”处理攻击的一般流程:

战斗流程设计.防

而每一个战斗实体则是通过战斗流去处理每一次的进攻。

总结

所谓的战斗,其本质上指的就是:游戏中的战斗实体之间进行攻防博弈,产生战斗结果,并进行相关处理。