跳转到正文

Trace 与子弹定义

作

作者

作者

创建时间: 2026年10月21日更新时间: 2026年10月21日

目录

Trace 与子弹定义

本页解释近战窗口和子弹命中用的检测形状,以及子弹表如何覆盖实例、链式生成和发射器。概念见 Trace 与命中窗口、子弹运行时。

FGCS_TraceDefinition

Data Table 行,也常内嵌在武器或子弹定义里。UGCS_TraceSystemComponent 用它创建实例,UGCS_TraceSubsystem 按 Tick 策略提交异步 Sweep。一条定义对应一种形状 + 一种查询方式 + 一种采样节奏;真正启停由近战请求的 TracesToControl、武器激活或子弹生命周期驱动。

IsValidDefinition() 要求 TraceTag 有效且形状实例可用。无效行在武器校验里会标 Warning,运行时加不进去。

字段

意图

何时调整

误配风险

TraceTag

实例标识,Categories=GGF.Combat.Trace。

刀刃、刀尖、子弹体各用不同标签。

与 TracesToControl 对不上则窗口不会启动这条 Trace。

CollisionShape

Instanced 形状,基类 FGCS_CollisionShape,默认 Static。

见下节。

选了 Attached / Socket Based 但 Socket 不存在,初始化失败。

SweepSetting

查询来源:通道、对象类型或 Profile。

见下表。

通道与目标碰撞响应不一致时“挥空”。

TraceTickType

采样策略,默认 FixedFrameRate。

高速挥砍用距离阈值,普通近战用固定帧率。

DistanceBased 阈值过大,快砍会漏检。

FixedTickFrameRate

固定帧率,默认 30。仅 FixedFrameRate。

要更密的刀光采样。

过高会打满异步 Sweep。

DistanceTickThreshold

位移超过该距离才采样,默认 30。仅 DistanceBased。

武器移动很快时。

旧字段名 DistanceTickInterval 已 redirect 到此名;新表请写 Threshold。

AngleTickThreshold

旋转超过该角度(度)也采样,默认 15。仅 DistanceBased。

原地拧刀、小位移大转角。

过小会几乎每帧都扫。

还有一个 Default Tick 类型,走子系统默认采样。新表一般显式选 Fixed 或 Distance。

FGCS_TraceSweepSetting

字段

意图

何时调整

误配风险

SweepType

ByChannel / ByObject / ByProfile,默认通道。

按项目碰撞规范选一种,不要混用。

ByProfile 的 ProfileName 为空等于没有查询。

TraceChannel

通道查询,默认 ECC_Visibility。

角色用 Pawn / 自定义武器通道。

Visibility 打不到设为 Ignore 的身体。

ObjectTypes

对象类型数组,仅 ByObject。

只要 Pawn 和 WorldStatic。

空数组扫不到任何对象。

ProfileName

碰撞 Profile 名,仅 ByProfile。

复用已有武器 Profile。

名字拼错时查询失败。

bTraceComplex

是否打复杂碰撞。

需要贴着武器网格的精确刃。

打开后开销大,对角色通常不必要。

碰撞形状

CollisionShape 排除基类,运行时在 SourceComponent 空间里取样。四种内置:

形状

显示名

职责

何时用

误配

FGCS_CollisionShape_Static

Collision Shape (Static)

在源组件空间放一个固定 Sphere / Box / Capsule。

拳头、固定长度的棍。

Box/Capsule 忘了 Orientation,扫偏。

FGCS_CollisionShape_ShapeBased

Collision Shape (Shape Based)

绑定源组件上的 Box/Sphere/Capsule,把尺寸读进运行时。

武器上已经有碰撞组件,不想再手填半径。

源组件不是 Shape,初始化拿不到尺寸。

FGCS_CollisionShape_Attached

Collision Shape (Attached)

在 Static 基础上跟随 SocketOrBoneName。

刃口挂在刀尖 Socket。

Socket 名错则形状停在组件原点。

FGCS_CollisionShape_SocketBased

Collision Shape (Socket Based)

用 MeshSocketStart / MeshSocketEnd(默认 TrailStart / TrailEnd)拉一条胶囊。

刀刃拖尾、双 Socket 武器。

网格没有这对 Socket,半高退化,看起来“刀变短”。

Static / ShapeBased 的 Radius、HalfHeight、HalfSize 按 ShapeType 显隐。Socket Based 另有 MeshSocketLengthOffset 加长胶囊。

FGCS_TraceHandle

运行时身份:TraceTag + Guid + SourceObject。组件用它启动、停止、移除和把命中回调对回同一实例。武器激活后把句柄存在 TraceHandles;子弹激活后存在 FGCS_BulletState.TraceHandles。不要手填 Guid。SourceObject 默认可是武器或子弹实例,用来区分“同一角色两把刀上的同名 Trace”。

FGCS_BulletDefinition

Data Table 行(显示名 GCS Bullet Definition)。UGCS_BulletSystemComponent 按行生成一批实例、建 GE、处理穿透和链式/发射器。子弹 Actor 只负责表现和运动;权威 GE 由组件在命中时应用,预测弹不会 Apply GE。

字段

意图

何时调整

误配风险

BulletActorClass

子弹 Actor 软引用,必须实现 IGCS_BulletInterface,不允许 Abstract。

球形弹用 AGCS_SphereBulletInstance 子类。

未实现接口或仍是 Abstract,对象池取不出来。

Duration

存活秒数,默认 3;-1 表示无限。

激光、持续法球。

无限弹必须有可靠的命中/取消路径,否则池会占满。

ExplosionDelay

终止命中后延迟结算(应用效果、链式、命中表现、结束),0 立即。

手雷落地再爆。

不会自动做范围伤害;范围仍走 GE / EffectContainer 或项目逻辑。

bCancellableByParent

父子弹过期时是否取消此弹。

子散射不应比父弹活更久。

链式里误开会提前拆掉爆炸弹。

BulletCount

一次发射数量,最小 1。

霰弹。

数量大且共享命中列表时,后发子弹打不到同一 Pawn。

LaunchAngle / LaunchAngleInterval / LaunchElevationAngle

水平角、间隔、仰角。

扇形散射、抛射。

间隔为 0 时多发重叠。

AttenuationRange

开始改重力系数的水平距离(厘米),默认 800。

弩矢先平飞再下坠。

与两个 GravityScale 一起看;只改这个看不见弧线。

GravityScaleInRange / GravityScaleOutRage

衰减范围内 / 外的重力系数。后者是历史拼写,Details 显示 Gravity Scale Out Range。

近距无重力、远距下坠。

在蓝图里按 “OutRange” 搜字段会搜不到,要用 GravityScaleOutRage。

InitialHitRadius / FinalHitRadius

初始 / 最终命中半径。最终 -1 表示沿用初始。

膨胀弹、缩小弹。

半径 0 几乎扫不到。

InitialSpeed / MaxSpeed

初速与最大速度,默认都是 1500。

加速弹、匀速弹。

Max 小于 Initial 时运动组件会卡住上限。

AttackDefinition

命中后用的 FGCS_AttackDefinition 行。

每种弹对应一种结算。

空句柄则权威命中没有 GE。

TraceDefinitions

命中检测定义数组,覆盖子弹实例类上的定义。

定义比 Actor 默认球更大或改通道。

空数组才回退实例;写了一条无效定义等于没有检测。

ProjectileFX / ProjectileFX_Cascade / ImpactFX / ImpactFX_Cascade

飞行与命中 Niagara / Cascade。AGCS_BulletInstance 激活和结算时自动生成。

只换皮。

软引用未加载则无特效,不影响结算。

ProjectileFXModifer / ImpactFXModifer

Niagara 参数覆盖(类型名 Modifer 是历史拼写)。

同一套 FX 改颜色或尺寸。

用户参数名必须和 Niagara 资产一致。

ProjectileSFX / ImpactSFX / SpawnSFX

飞行附着、命中、生成音效。

同样只换皮。

SpawnSFX 每次从池激活都会播。

bPenetrateCharacter / MaxPenetrationCount

是否穿透 Pawn;最大次数,0 表示不限制。

穿甲、穿透射击。

不勾选穿透时碰到第一个 Pawn 就终止。

bPenetrateMap

是否穿透地图几何。

穿墙弹。

打开后仍受 Trace 通道约束。

HitBulletDefinition

命中或失效时再生成的子弹行,不能等于自己。

爆炸分裂、落地残留。

指向自己会拒绝生成,避免无限递归。

HitChainType

链式生成位姿,Categories=GGF.Combat.Bullet.ChainType。

见原生标签。

空标签走 Default:父子弹位置和旋转。

LaunchCondition

何时发射链式,Categories=GGF.Combat.Bullet.LaunchCond。

见原生标签。

空标签时不要假设“总是发射”;按你填的条件核对。

bUseSharedHitList

同一批子弹共享命中历史(按 EntryId),默认 true。只对命中 Pawn 生效。

霰弹不要 8 发打同一人。

关掉后同批可以重复打同一 Pawn。

DamageHitDuration

对同一 Pawn 的命中冷却(秒),0 表示不冷却。

持续激光。

0 且穿透打开时,同一目标可能被连续登记。

EmitterBulletDefinition

作为发射器时周期性生成的子弹行。

空中法阵往下丢弹。

子行再配 Emitter 要自己避免环。

EmitterSourceType

发射器如何选生成点,Categories=GGF.Combat.Bullet.EmitterType。

见原生标签。

TargetingSystem 但角色没 Targeting 组件且没有 EmitterTargetingPreset,发不出来。

EmitterTargetingPreset / EmitterSourceRadius

搜目标的 Preset 与半径(厘米)。

在射击者周围随机,或锁定最近敌人。

半径 0 时随机偏移为 0。

EmitterInitialWaitTime / EmitterMinShootInterval / EmitterMaxShootInterval

首次等待与随机间隔。间隔下限 ClampMin=1。

法阵节奏。

Min>Max 时间隔行为依赖调度代码,应保持 Min<=Max。

NativeExtension / Extension

与攻击定义相同:C++ / 蓝图扩展。

给弹种加项目字段。

用途与误配同攻击定义。

FGCS_BulletSpawnParameters、FGCS_BulletState 是运行时生成参数和实例状态,不要在表里手填。链式和发射器子弹只在权威端生成。

原生子弹标签

命名空间在 GCS_GameplayTags.h,实际 GameplayTag 挂在 GGF.Combat.Bullet.*。

GCS_BulletLaunch(LaunchCondition)

标签

值

行为

Always

GGF.Combat.Bullet.LaunchCond.Always

只要发生命中就生成后续。

DidNotHitPawn

GGF.Combat.Bullet.LaunchCond.DidNotHitPawn

未命中 Pawn 才生成(落地爆炸)。

HitPawn

GGF.Combat.Bullet.LaunchCond.HitPawn

命中 Pawn 才生成(击中分裂)。

GCS_BulletEmitter(EmitterSourceType)

标签

值

行为

Default

GGF.Combat.Bullet.EmitterType.Default

复用父子弹变换。

ShooterWithRandomRadius

GGF.Combat.Bullet.EmitterType.ShooterWithRandomRadius

在射击者周围按 EmitterSourceRadius 随机偏移。

TargetingSystem

GGF.Combat.Bullet.EmitterType.TargetingSystem

向 UGCS_TargetingSystemComponent 或 EmitterTargetingPreset 要目标。

GCS_BulletChain(HitChainType)

标签

值

行为

Default

GGF.Combat.Bullet.ChainType.Default

在父子弹位置和旋转生成。

FromHitResult

GGF.Combat.Bullet.ChainType.HitResult

在命中点生成,方向为 TraceEnd−TraceStart。

FromSourceRequest

GGF.Combat.Bullet.ChainType.SourceRequest

用原始攻击请求的变换。

HitLocWithOwnerFwdDir

GGF.Combat.Bullet.ChainType.HitLocWithOwnerFwdDir

命中点 + 所属者朝前。

ParentLocWithOwnerFwdDir

GGF.Combat.Bullet.ChainType.ParentLocWithOwnerFwdDir

父子弹位置 + 所属者朝前。

自定义实例和接口见 接口与自定义实例。