更新日志

1.3版本

这是针对UE5.4的最后一次更新,1.3以上版本则会在UE5.5上进行开发。

很多更新细节体现在了演示项目,这里主要罗列一些主要修改。

战斗流程

新增:AttackResultProcessor支持WorldContext,意味着在蓝图中可以使用更多的节点(比如SpawnActor)。

碰撞检测系统

碰撞检测实例不再使用GameplayEventData作为TraceInformation,并由Set/GetTraceSource和Set/GetAttackRequest代替。

提供AsyncAction_CollisionTrace,方便使用。

子弹系统改进

修复:正确同步Hit事件。

改进:子弹的Trace信息放在子弹定义上,同样支持一个子弹关联多个Trace。

改进:子弹现在可以配置是否穿透角色,场景。

改进:子弹系统进一步完善,支持穿透,子弹命中生成子弹(链)

演示内容改进

武器相关的TargetingPreset会过滤掉武器类型Actor。

移除演示内容中的Posture(躯干)属性,因为这太特定于游戏机制了:用户仍然可以完美防御/弹反,但其造成的结果可以自行定义。

将DemoCombatCore中的运动控制逻辑单独解耦为一个简单的运动系统,1是为了可以在不同的项目中不用重新造轮子,2是提供更清晰的战斗系统整合任意运动系统的方式。

修正武器动画层在某些情况下没有正常link/unlink。

碰撞检测系统

规范TargetingSourceContext的用法。

TraceInstance使用TargetingSystem进行目标获取。其中,TargetingSourceContext中的内容如下:

SourceActor是与Trace关联的PrimitiveComponent的Owner,如:Trace捆绑的武器Mesh,SourceActor就是武器;Trace捆绑的子弹的Shape,SourceActor就是子弹。

InstigatorActor:所有的Trace实例都由CollisionSystem组件创建和管理,所以CollisionSystem组件的Owner就是InstigatorActor。

锁定系统

“LockIndicator组件”强化了,你可以填一堆Indicator定义,当角色被锁定后会自动创建WidgetComponent并与UI进行关联。默认情况下,只有LockOn UI和角色血条UI会在被锁定时显示。

简单来说,这是一个方便地在被锁定目标上动态创建一堆世界UI的组件。

阵营系统

GCS_CombatTeamAgentComponent允许在设置TeamId时,也会同步设置到Pawn所属的Controller上(如果Controller实现了GenericTeamAgentInterface

迁移指南

打开你项目的DefaultGameplayTags.ini,并在[/Script/GameplayTags.GameplayTagsSettings]下添加如下的Tag重定向。

1[/Script/GameplayTags.GameplayTagsSettings]
2+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type.Tailsman",NewTagName="GIS.Item.Tailsman")
3+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type.Weapon",NewTagName="GIS.Item.Weapon")
4+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type.Weapon.Axe",NewTagName="GIS.Item.Weapon.Axe")
5+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type.Weapon.BowAndArrow",NewTagName="GIS.Item.Weapon.Bow")
6+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type.Weapon.GreatSword",NewTagName="GIS.Item.Weapon.GreatSword")
7+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type.Weapon.Hammer",NewTagName="GIS.Item.Weapon.Hammer")
8+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type.Weapon.Pistol",NewTagName="GIS.Item.Weapon.Pistol")
9+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type.Weapon.Sword",NewTagName="GIS.Item.Weapon.Sword")
10+GameplayTagRedirects=(OldTagName="GIS.Item.Type.Skill",NewTagName="GIS.Item.Skill")
11+GameplayTagRedirects=(OldTagName="GIS.Item.Type.Potion",NewTagName="GIS.Item.Consumable")
12+GameplayTagRedirects=(OldTagName="GIS.Equipment.Type",NewTagName="GIS.Item")
13+GameplayTagRedirects=(OldTagName="GIS.Item.Type",NewTagName="GIS.Item")
14从1.3开始,必须使用GCS_AbilitySystemGlobals,你可以参考案例项目中的DefaultGame.ini
15[/Script/GameplayAbilities.AbilitySystemGlobals]
16+GlobalAttributeSetDefaultsTableNames="/Game/GenericGame/CombatSystem/Extras/DataTables/CT_GCS_DefaultStats"/Script/Engine.CurveTable'/Game/GenericGame/CombatSystem/Extras/DataTables/CT_GCS_DefaultStats.CT_GCS_DefaultStats'
17AbilitySystemGlobalsClassName="/Script/GenericCombatSystem.GCS_AbilitySystemGlobals"
18+GameplayCueNotifyPaths=/Game/GenericGame/CombatSystem/Extras/Cues
19;AbilitySystemGlobalsClassName="/Script/GenericGameplayAbilities.GGA_AbilitySystemGlobals"
20PredictTargetGameplayEffects=true
21bUseDebugTargetFromHud=true

1.2版本

碰撞检测系统

新增:CollisionTraceDefinition,CollisionSystem组件可以配置默认碰撞检测实例。

新增:可以通过CollisionSystem监听任意碰撞检测实例的激活状态变化:TraceInstanceStateChanged。

新增:通过一组碰撞检测定义生成碰撞检测实例。

改进:支持手动/自动处初始化碰撞检测系统。

武器系统

新增:武器支持一个Mesh绑定多个碰撞检测实例,并由SocketPrefix区分。

新增:武器Hit,支持播放ContextEffects,用于和物理环境进行交互。

弃用:原本武器上的Trace开头的配置已经删除。

更改:OnTraceHit变成了OnAnyTraceHit。OnTraceStateChanged变成OnAnyTraceStateChanged。

定位系统

更改:TP_GCS_Trace_WeaponSockets可以扫描任意对象,而不仅仅是Pawn,这样可以允许击中物理环境。

子弹系统

修正:当子弹重生时,确保根据子弹定义刷新对应的视觉资产,避免指定的特效/音效资产驻留。

技能系统

改进:改进Dodge技能的逻辑,手动修正角色朝向变成可选。添加更多类型的错误检查。

改进:WeaponFire在联机模式下得到修正,只在服务端生成子弹,且使用正确的Bullet LineTrace Task来获取目标点。

多人系统

改进:CombatCore组件的初始化逻辑,避免多人情况下的时候出现报错。

改进:AbilityTask_CollisionTrace添加可选的bAdjustAnimTickOption,如果勾选,会在DedicatedServer模式下,临时将角色骨骼网格体的刷新模式设置为AlwaysTickPoseAndRefreshBones,这使得在基于近战的战斗中,依赖骨骼位置的相关战斗逻辑可以正常工作。

参考内容

改进:调整免费动画的MotionWarping通知,确保攻击时可以更改玩家输入。

新增:AirAttack支持空中连招。

开发体验

新增:战斗系统项目设置,允许全局禁用阵营判定,方便测试友军伤害,而无需挨个调整队伍ID。

新增:GetMainCharacterMeshComponent,不直接通过Cast成Character取Mesh组件,而是通过此组件进行查询。

通用战斗系统更新日志 | 虚幻引擎 UE5 | 月武的编程之旅