Trace 与子弹定义
本页解释近战窗口和子弹命中用的检测形状,以及子弹表如何覆盖实例、链式生成和发射器。概念见 Trace 与命中窗口、子弹运行时。
FGCS_TraceDefinition
Data Table 行,也常内嵌在武器或子弹定义里。UGCS_TraceSystemComponent 用它创建实例,UGCS_TraceSubsystem 按 Tick 策略提交异步 Sweep。一条定义对应一种形状 + 一种查询方式 + 一种采样节奏;真正启停由近战请求的 TracesToControl、武器激活或子弹生命周期驱动。
IsValidDefinition() 要求 TraceTag 有效且形状实例可用。无效行在武器校验里会标 Warning,运行时加不进去。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 实例标识,Categories= | 刀刃、刀尖、子弹体各用不同标签。 | 与 |
| Instanced 形状,基类 | 见下节。 | 选了 Attached / Socket Based 但 Socket 不存在,初始化失败。 |
| 查询来源:通道、对象类型或 Profile。 | 见下表。 | 通道与目标碰撞响应不一致时“挥空”。 |
| 采样策略,默认 | 高速挥砍用距离阈值,普通近战用固定帧率。 | |
| 固定帧率,默认 30。仅 | 要更密的刀光采样。 | 过高会打满异步 Sweep。 |
| 位移超过该距离才采样,默认 30。仅 | 武器移动很快时。 | 旧字段名 |
| 旋转超过该角度(度)也采样,默认 15。仅 | 原地拧刀、小位移大转角。 | 过小会几乎每帧都扫。 |
还有一个 Default Tick 类型,走子系统默认采样。新表一般显式选 Fixed 或 Distance。
FGCS_TraceSweepSetting
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| | 按项目碰撞规范选一种,不要混用。 | |
| 通道查询,默认 | 角色用 Pawn / 自定义武器通道。 | Visibility 打不到设为 Ignore 的身体。 |
| 对象类型数组,仅 | 只要 Pawn 和 WorldStatic。 | 空数组扫不到任何对象。 |
| 碰撞 Profile 名,仅 | 复用已有武器 Profile。 | 名字拼错时查询失败。 |
| 是否打复杂碰撞。 | 需要贴着武器网格的精确刃。 | 打开后开销大,对角色通常不必要。 |
碰撞形状
CollisionShape 排除基类,运行时在 SourceComponent 空间里取样。四种内置:
形状 | 显示名 | 职责 | 何时用 | 误配 |
|---|---|---|---|---|
| Collision Shape (Static) | 在源组件空间放一个固定 Sphere / Box / Capsule。 | 拳头、固定长度的棍。 | Box/Capsule 忘了 Orientation,扫偏。 |
| Collision Shape (Shape Based) | 绑定源组件上的 Box/Sphere/Capsule,把尺寸读进运行时。 | 武器上已经有碰撞组件,不想再手填半径。 | 源组件不是 Shape,初始化拿不到尺寸。 |
| Collision Shape (Attached) | 在 Static 基础上跟随 | 刃口挂在刀尖 Socket。 | Socket 名错则形状停在组件原点。 |
| Collision Shape (Socket Based) | 用 | 刀刃拖尾、双 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。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 子弹 Actor 软引用,必须实现 | 球形弹用 | 未实现接口或仍是 Abstract,对象池取不出来。 |
| 存活秒数,默认 3; | 激光、持续法球。 | 无限弹必须有可靠的命中/取消路径,否则池会占满。 |
| 终止命中后延迟结算(应用效果、链式、命中表现、结束),0 立即。 | 手雷落地再爆。 | 不会自动做范围伤害;范围仍走 GE / EffectContainer 或项目逻辑。 |
| 父子弹过期时是否取消此弹。 | 子散射不应比父弹活更久。 | 链式里误开会提前拆掉爆炸弹。 |
| 一次发射数量,最小 1。 | 霰弹。 | 数量大且共享命中列表时,后发子弹打不到同一 Pawn。 |
| 水平角、间隔、仰角。 | 扇形散射、抛射。 | 间隔为 0 时多发重叠。 |
| 开始改重力系数的水平距离(厘米),默认 800。 | 弩矢先平飞再下坠。 | 与两个 GravityScale 一起看;只改这个看不见弧线。 |
| 衰减范围内 / 外的重力系数。后者是历史拼写,Details 显示 Gravity Scale Out Range。 | 近距无重力、远距下坠。 | 在蓝图里按 “OutRange” 搜字段会搜不到,要用 |
| 初始 / 最终命中半径。最终 | 膨胀弹、缩小弹。 | 半径 0 几乎扫不到。 |
| 初速与最大速度,默认都是 1500。 | 加速弹、匀速弹。 | Max 小于 Initial 时运动组件会卡住上限。 |
| 命中后用的 | 每种弹对应一种结算。 | 空句柄则权威命中没有 GE。 |
| 命中检测定义数组,覆盖子弹实例类上的定义。 | 定义比 Actor 默认球更大或改通道。 | 空数组才回退实例;写了一条无效定义等于没有检测。 |
| 飞行与命中 Niagara / Cascade。 | 只换皮。 | 软引用未加载则无特效,不影响结算。 |
| Niagara 参数覆盖(类型名 Modifer 是历史拼写)。 | 同一套 FX 改颜色或尺寸。 | 用户参数名必须和 Niagara 资产一致。 |
| 飞行附着、命中、生成音效。 | 同样只换皮。 | SpawnSFX 每次从池激活都会播。 |
| 是否穿透 Pawn;最大次数, | 穿甲、穿透射击。 | 不勾选穿透时碰到第一个 Pawn 就终止。 |
| 是否穿透地图几何。 | 穿墙弹。 | 打开后仍受 Trace 通道约束。 |
| 命中或失效时再生成的子弹行,不能等于自己。 | 爆炸分裂、落地残留。 | 指向自己会拒绝生成,避免无限递归。 |
| 链式生成位姿,Categories= | 见原生标签。 | 空标签走 Default:父子弹位置和旋转。 |
| 何时发射链式,Categories= | 见原生标签。 | 空标签时不要假设“总是发射”;按你填的条件核对。 |
| 同一批子弹共享命中历史(按 EntryId),默认 true。只对命中 Pawn 生效。 | 霰弹不要 8 发打同一人。 | 关掉后同批可以重复打同一 Pawn。 |
| 对同一 Pawn 的命中冷却(秒), | 持续激光。 | |
| 作为发射器时周期性生成的子弹行。 | 空中法阵往下丢弹。 | 子行再配 Emitter 要自己避免环。 |
| 发射器如何选生成点,Categories= | 见原生标签。 | |
| 搜目标的 Preset 与半径(厘米)。 | 在射击者周围随机,或锁定最近敌人。 | 半径 0 时随机偏移为 0。 |
| 首次等待与随机间隔。间隔下限 ClampMin=1。 | 法阵节奏。 | Min>Max 时间隔行为依赖调度代码,应保持 Min<=Max。 |
| 与攻击定义相同:C++ / 蓝图扩展。 | 给弹种加项目字段。 | 用途与误配同攻击定义。 |
FGCS_BulletSpawnParameters、FGCS_BulletState 是运行时生成参数和实例状态,不要在表里手填。链式和发射器子弹只在权威端生成。
原生子弹标签
命名空间在 GCS_GameplayTags.h,实际 GameplayTag 挂在 GGF.Combat.Bullet.*。
GCS_BulletLaunch(LaunchCondition)
标签 | 值 | 行为 |
|---|---|---|
| | 只要发生命中就生成后续。 |
| | 未命中 Pawn 才生成(落地爆炸)。 |
| | 命中 Pawn 才生成(击中分裂)。 |
GCS_BulletEmitter(EmitterSourceType)
标签 | 值 | 行为 |
|---|---|---|
| | 复用父子弹变换。 |
| | 在射击者周围按 |
| | 向 |
GCS_BulletChain(HitChainType)
标签 | 值 | 行为 |
|---|---|---|
| | 在父子弹位置和旋转生成。 |
| | 在命中点生成,方向为 TraceEnd−TraceStart。 |
| | 用原始攻击请求的变换。 |
| | 命中点 + 所属者朝前。 |
| | 父子弹位置 + 所属者朝前。 |
自定义实例和接口见 接口与自定义实例。