1.3(2024.02.17)
This is the final update for UE5.4, with versions beyond 1.3 being developed in UE5.5.
Numerous updates are reflected in the sample project; here, I shall highlight some of the principal modifications.
Combat Flow
- New Feature: The
AttackResultProcessor
now supports WorldContext, allowing for the use of additional nodes (such as SpawnActor) within Blueprints.
Collision Detection System
- The collision detection instance no longer utilizes GameplayEventData as TraceInformation and has been supplanted by Set/GetTraceSource and Set/GetAttackRequest.
- An AsyncAction_CollisionTrace has been provided for ease of use.
Bullet System Enhancements
- Fixed: Hit events are now correctly synchronized.
- Improved: Trace information for bullets is now contained within the bullet definition, supporting multiple traces linked to a single bullet.
- Enhanced: Bullets can now be configured to either penetrate characters or the environment.
- Refined: The bullet system has been further optimized to support penetration and allow for the generation of bullets upon impact (chain effect).
Demonstration Content Improvements
- TargetingPresets related to weapons will now filter out weapon type Actors.
- The Posture (torso) attribute has been removed from the demonstration content due to its overly specific ties to gameplay mechanics: users can still execute perfect defenses or parries, but the resulting outcomes can be defined independently.
- The movement control logic within DemoCombatCore has been decoupled into a distinct, simplified movement system. This facilitates reuse across different projects without redundant development while providing a clearer integration method for any movement system within the combat framework.
- Fixes have been applied to ensure that weapon animation layers link/unlink correctly under certain conditions.
Collision Detection System
- The usage of TargetingSourceContext has been standardized.
- Trace Instance uses the TargetingSystem for target acquisition. The contents of the TargetingSourceContext are as follows:
- SourceActor refers to the Owner of the PrimitiveComponent associated with the Trace; for instance, if the Trace primitive is tied to a weapon Mesh, the SourceActor would be the weapon itself; for Trafe primitive being a bullet's Shape component, the SourceActor would be the bullet actor.
- InstigatorActor: All Trace instances are created and managed by the CollisionSystem component, making the Owner of the CollisionSystem component the InstigatorActor.
LockOn System
The LockIndicator component has been enhanced, allowing for the definition of multiple Indicators. When a character is locked onto a target, a WidgetComponent will be automatically created and associated with the UI. By default, only the LockOn UI and the character's health bar UI will be displayed when locked onto a target.
In essence, this component offers a convenient method for dynamically creating a series of world UIs on a locked target.
Faction System
GCS_CombatTeamAgentComponent
can optionally set team id on pawn's controller(Only when controller implements GenericTeamAgentInterface) .
Migration Guide
Open your project’s DefaultGameplayTags.ini and add the following Tag redirections under [/Script/GameplayTags.GameplayTagsSettings]:
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")14Beginning with version 1.3, GCS_AbilitySystemGlobalsmust be utilized; you may refer to the DefaultGame.ini in the sample project: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/Cues19;AbilitySystemGlobalsClassName="/Script/GenericGameplayAbilities.GGA_AbilitySystemGlobals"20PredictTargetGameplayEffects=true21bUseDebugTargetFromHud=true
1.2(2024.11.21)
BigChange
I have moved the code module "Generic Effects System" and "Generic Camera System" into my free plugin:Generic Game System(Free)
Combat System doesn't depend on these two modules at code level, And provided content will rely on these 2 modules, So make sure to install GenericGameSystem either from Fab or discord(If fab version is not up to date.).
Collision Trace System
New: CollisionTraceDefinition
- The CollisionSystem
component can be configured with default collision detection instances.
New: You can listen to changes in the activation state of any collision trace instance through the CollisionSystem
: TraceInstanceStateChanged
.
New: Create collision trace instances from collision trace definitions.
Improvement: Support for manual/automatic initialization of the collision system component.
Weapon System
New: Weapons support multiple collision trace instances bound to a single Mesh/Primitive, distinguished by SocketPrefix
.
New: Weapon Hit supports playing ContextEffects
for interaction with the physical environment.
Deprecated: The original configurations starting with Trace
on weapons have been removed.
Change: OnTraceHit
has been changed to OnAnyTraceHit
. OnTraceStateChanged
has been changed to OnAnyTraceStateChanged
.
Targeting System
Change: TP_GCS_Trace_WeaponSockets
can scan any object, not just pawns, allowing hits to the physical environment.
Bullet System
Fix: When bullets respawn from pool, ensure that the corresponding visual assets are properly reset.
Fix: Properly replicate hit events for clients.
Ability System
Improvement: Enhanced the logic for Dodge abilities, making manual correction of character orientation optional. Added more types of error checks.
Improvement: WeaponFire
has been fixed in multiplayer mode to only spawn bullets on the server and use the correct Bullet LineTrace Task
to obtain the target data.
Multiplayer System
Improvement: Improved the initialization logic of the CombatCore
component to prevent errors in multiplayer scenarios.
Improvement: AbilityTask_CollisionTrace
adds an optional bAdjustAnimTickOption
. If checked, it temporarily sets the skeletal mesh anim tick mode to AlwaysTickPoseAndRefreshBones
in Dedicated Server mode, ensuring that combat logic dependent on animations works correctly during melee-based combat.
Reference Content
Improvement: Adjusted the Motion Warping notification for free animations to allow changes to player input during attacks.
New: AirAttack
supports combos.
Development Experience
New: Combat system project settings allow global disabling of faction checks for easier testing of friendly fire without adjusting team IDs individually.
New: GetMainCharacterMeshComponent
allows querying the Mesh component without directly casting to the Character
class.