1.5版本
新增
碰撞检测实例新增SourceObject,当你同时使用多个武器,且每个武器都创建了相同Tag的TraceInstance时,你可以利用SourceObject来标记TraceInstance的实际来源。
游戏效果上下文重构
得益于GGA的GameplayEffectContextPayload系统的引入,该系统允许蓝图/C++用户往GameplayEffectContext中添加任意自定义数据,而无需处理手动序列化。GCS_GameplayEffectContext已经弃用,转而使用GGA提供的GGA_GameplayEffectContext。
原本通过GCS_GameplayEffectContext传递的数据现已迁移为GCS_ContextPayload_Combat,并作为GGA_GameplayEffectContext携带的Payload之一。
此改进使得GCS更加模块化,C++若需要自定义GameplayEffectContext,也无需修改已经存在的代码,而是通过ContextPayload的方式进行扩充。
供蓝图使用的上层API并未改变,C++可能需要更新为最新的API。
子弹系统重构(Delay to 1.6)
为进一步提升子弹系统在网络游戏中的可用性,以及灵活度。1.5版本引入BulletSystemComponent用于管理与单个Actor相关的所有子弹请求。
BulletInstance作为Actor已经不再通过网络同步,转而由BulletSystem对所有子弹请求进行同步。每个客户端有自己版本的子弹。
属性系统重构
之前的版本,使用少量的属性实现了多类型伤害及减免。这次进一步将战斗伤害和伤害减免系统简化为2个属性,即Damage和DamageNegation。同时进一步扩大了属性系统的通用性,基于这套设计,你可以在无需修改代码的情况下,新增各种伤害类型,如体力伤害/减免,状态伤害/减免,暴击伤害/减免等。
请参考提供的配套项目了解属性如何设计,以及在运行时修改。
装备系统重构(delay to 1.6)
配套项目中的Demo_WeaponManager将被重构为Demo_EquipmentManager,并以简单的方式展示了如何装备如何动态修改属性,战斗动作等。
碰撞追踪系统
完全重写碰撞检测系统(破坏性变更):
现在GCS的碰撞检测系统是面向数据,多线程,高性能的碰撞检测系统。遗憾的是,该系统的API已经变更,配套项目中的案例已经更新至最新API,对于现有项目,你需要更改一些API调用以升级到新版本。
- 基于UObject的CollisionTraceInstance已经弃用。
- CollisionSystemComponent现在是CollisionTraceSystemComponent,且父是ActorComponent而不是PawnComponent,使其用途进一步扩大。
- 支持稳定帧率,以及基于距离变化的碰撞检测。
- 允许你以非常灵活地方式去定义各种动态的碰撞形状。
- 主体仍然是通过CollisionTraceDefinition进行配置
武器系统改进
- 现在武器可以实现ToggleTrail来对Trail的激活做出响应。
- Trail的激活不再与Trace耦合,而是通过动画通知(
ANS_GCS_ToggleWeaponTrail)来单独控制。 - 默认武器实现可以同时支持Niagara或者Cascade粒子系统来作为武器拖尾。
迁移:你可以批量选中你的攻击Montage,右键->Scripted Asset Actions->GCS->Sync Trail For Attack Trace, 该脚本会自动为所有ANS_GCS_AttackTrace(近战攻击请求)通知所在的地方,自动添加ANS_GCS_ToggleWeaponTrail通知,该通知是用于开关武器拖尾的默认方式。
连击系统
新增数据驱动的连击系统,你可以通过DataTable自由的将不同的Ability组合成不同的连招,你还可以逐武器分配不同的连击表。
原来的实现更多地是在单个Ability的Action层面进行动态变招,这次功能极大的地减少了输入层和Action层配置的复杂度,并进一步改进了GCS的灵活性。
配套项目已经采用全新的Combo系统以供参考,文档TODO。
技能系统改进
引入伤害预测和HitReaction的逻辑与表现分离。
- 弃用GA_GCS_HitReaction_Additive和GA_GCS_HitReaction_IK,当前只需要GA_GCS_HitReaction_Normal。
- GA_GCS_HitReaction_Normal使用RootMotionSource配合AttackDefinition的KnockDistance进行受击位移。
- GA_GCS_BlockHit_Normal配合AttackDefinition的KnockDistance,并根据自身逻辑自定义位移影响。
- GA_GCS_HoldAttack变成GA_GCS_SkillAttack_Charged,并重做。
杂项
- AttackDefinition和BulletDefinition新增名为Extension的InstancedStruct字段,允许蓝图/C++用户使用自定义结构体定义的字段,而无需修改插件代码。原有的UserSettings已经不推荐使用。
功能性技能改进
- MotionWarping特性现在已支持在动画通知上指定位移阈值,若当目标与自身距离在此范围内时才会应用根运动的位移。
GameplayTags整理
在这次更新中,一些GameplayTags进行了重定向以便好地组织和管理。
理由:
- Trace引入二级分类,如武器和身体。比如一把长枪,武器Trace可能包含枪头和枪身,所以可用Trace.Tip和Trace.Default进行区分,若是Tip击中,可以添加额外伤害等。
- InputTag.XXX全部归属到GIPS.InputTag.XXX,与GIPS.Input和GIPS.InputBuffer平级。我希望尽可能避免一级分类(我有强迫症)。
你不需要做任何操作,配套项目提供的Tags已经包含了Tags重定向。
