跳到主要内容

FX 节点

Guide

查找并配置用于把结算结果转成动画、音频、VFX、飘字、位移与镜头反馈的节点

节点用法​

Flash Unit

需要让单个单位短暂闪色,以表现受击、治疗、增益或减益时,使用 Flash Unit

输入

  • In(Flow):启动节点
  • Duration(Float):可选的闪色时长覆盖值
  • Target(UnitRef):可选的暴露目标输入

输出

  • Out(Flow):发出闪色请求后继续执行

参数

  • TargetSource(Self):Self、Opponent、AllUnits、ActivePlayer、AllAllies、AllOpponents、AllDeadAllies、Target;Target 未连接时选择单位
  • Color(白色 RGBA(1, 1, 1, 1)):任意颜色;设置闪色颜色
  • Duration(0.3):秒;Duration 端口未连接时使用的时长

节点只解析一个单位,并通过 UnitPresentationSystem 请求单位视图闪色,缺少单位或表现视图时不会显示效果,集合来源只使用第一个单位

Flash Unit 节点

Play Animation

需要向单个单位的表现动画器发送 Hit、Attack 或 Death 等触发器时,使用 Play Animation

输入

  • In(Flow):启动节点
  • Target(UnitRef):可选的暴露目标输入

输出

  • Out(Flow):发出触发请求后继续执行

参数

  • TargetSource(Self):Self、Opponent、AllUnits、ActivePlayer、AllAllies、AllOpponents、AllDeadAllies、Target;Target 未连接时选择单位
  • Trigger(Hit):任意 Animator Trigger 名称;指定发送给单位表现动画器的触发器

Trigger 为空、单位无法解析、缺少单位视图,或动画器没有同名触发器时都不会出现可见动画,节点只解析一个单位,也不会等待动画播放结束才从 Out 继续

Play Animation 节点

Play SFX

需要播放一次性的出牌、命中、状态或 UI 音效时,使用 Play SFX

输入

  • In(Flow):启动节点
  • Volume(Float):可选的播放音量覆盖值

输出

  • Out(Flow):音效开始播放后立即继续执行

参数

  • Clip(None):任意 AudioClip;选择一次性音效
  • Volume(1):数值;Volume 端口未连接时使用的音量

没有 Clip 时不会播放声音,运行时把音量限制在 0 到 1,以 2D 方式播放,并为每次播放加入 0.97 到 1.03 的轻微随机音高,GCS 最多保留 12 个持久化 AudioSource,池满后按顺序复用,这个节点不适合播放音乐或环境循环,也不会等待音频结束

Play SFX 节点

Play VFX

需要把一个特效预制体生成在单个单位上,或固定世界坐标时,使用 Play VFX

输入

  • In(Flow):启动节点
  • Lifetime(Float):可暴露的生命周期覆盖端口,连接值优先于节点字段
  • Target(UnitRef):Anchor 为 OnUnit 时可用,连接后覆盖 TargetSource

输出

  • Out(Flow):生成预制体后立即继续执行

参数

  • TargetSource(Self):Self、Opponent、AllUnits、ActivePlayer、AllAllies、AllOpponents、AllDeadAllies、Target;Anchor 为 OnUnit 且 Target 未连接时选择一个单位
  • Anchor(OnUnit):OnUnit、AtPosition;选择单位位置或固定世界坐标
  • Position((0, 0, 0)):世界坐标 Vector3;仅在 AtPosition 下使用的生成位置
  • Prefab(None):任意 GameObject 预制体;选择要实例化的特效
  • Lifetime(0):秒;正数表示精确生命周期,0 或负数启用自动检测

OnUnit 只解析一个单位,找不到单位表现位置时会退回世界原点,AtPosition 会隐藏目标输入并始终使用 Position,没有 Prefab 时不会生成对象

自动生命周期会读取最长的非循环粒子时长加最大初始生命周期,或最长的非循环 Animator Clip,然后再加 0.1 秒,两者都不存在时按 2 秒销毁,循环粒子和循环动画不会延长这个时间,计算结果会按预制体缓存

连接 Lifetime 后会覆盖节点字段,连接值或字段值大于 0 时按该秒数销毁,等于或小于 0 时仍使用自动生命周期

Play VFX 节点

Shake Camera

需要为重击、Boss 行为或大型范围攻击加入镜头反馈时,使用 Shake Camera

输入

  • In(Flow):启动节点
  • Intensity(Float):可选的震动强度覆盖值
  • Duration(Float):可选的震动时长覆盖值

输出

  • Out(Flow):震动开始后立即继续执行

参数

  • Intensity(0.3):世界空间距离;设置节点内的震动强度
  • Duration(0.3):秒;设置节点内的震动时长

节点需要 Camera.main,强度或时长小于等于 0 时不震动,同一相机上再次启动震动,会先停止上一次 Tween 并还原记录的初始位置,再开始新的衰减抖动,Tween 完成后会再次还原相机位置

Shake Camera 节点

Show Floating Text

需要在一个或多个单位上方显示实际伤害、治疗、护甲、格挡或短文本时,使用 Show Floating Text

输入

  • In(Flow):启动节点
  • Target(UnitRefOrCollection):可选的暴露目标输入,支持单个单位或集合
  • Amount(Int):Content 为 Amount 时可用,覆盖节点中的数值
  • Text(String):Content 为 Text 时可用,覆盖节点中的文本

输出

  • Out(Flow):提交全部飘字请求后继续执行

参数

  • TargetSource(Self):Self、Opponent、AllUnits、ActivePlayer、AllAllies、AllOpponents、AllDeadAllies、Target;Target 未连接时选择目标
  • Kind(Custom):Damage、Heal、Armor、Block、Custom;选择飘字语义样式
  • Content(Text):Amount、Text;选择启用的内容字段和数据端口
  • Amount(0):整数;Amount 模式下显示的数值
  • Text(空):任意短文本;Text 模式下显示的标签
  • Color(白色 RGBA(1, 1, 1, 1)):任意颜色;自定义飘字颜色
  • UseCustomColor(关闭):关闭、开启;开启时使用 Color,关闭时由飘字样式决定颜色
  • IncludeSign(开启):关闭、开启;显示数值内容时是否带正负号
  • ScaleMultiplier(1):倍率;缩放配置好的字体大小
  • DurationMultiplier(1):倍率;缩放配置好的显示时长
  • Offset((0, 0, 0)):相对单位表现的 Vector3 偏移;调整飘字位置

与其他核心目标型 FX 节点不同,这个节点会遍历所有解析到的单位,并跳过空对象,如果 Content 为 Amount、解析到的数值为 0,同时 Text 不为空,运行时会改用文本内容,需要显示真实结算值时,应连接 Deal Damage.Dealt 等输出,不要重复填写可能被护甲或 Hook 改变的原始数值

Show Floating Text 节点

Slide Unit

需要让单个单位表现出突进、后坐、闪避或击退,但不修改战斗位置数据时,使用 Slide Unit

输入

  • In(Flow):启动节点
  • Target(UnitRef):可选的暴露目标输入
  • To(Vector3):必须连接的世界坐标目标位置
  • Duration(Float):可选的位移时长覆盖值

输出

  • Out(Flow):位移开始后立即继续执行

参数

  • TargetSource(Self):Self、Opponent、AllUnits、ActivePlayer、AllAllies、AllOpponents、AllDeadAllies、Target;Target 未连接时选择一个单位
  • Duration(0.3):秒;Duration 端口未连接时使用的时长
  • Ease(Linear):Linear、InSine、OutSine、InOutSine、OutCubic、InCubic、OutBack、InBack、OutBounce、OutElastic;选择运动曲线

To 没有节点内后备值,未连接时运行时会得到 (0, 0, 0),节点只解析一个单位,只移动单位表现而不修改战斗状态,也不会等待 Tween 结束才继续执行

Demo 扩展 FX 节点​

Status Apply FX 和 Status Expire FX 来自 GCS Demo 程序集,不属于核心运行时节点,它们把 Demo 状态资产使用的多种表现合并在一起,并依赖 Demo 中的 UnitView、BattleAudio 和投射物组件

Slide Unit 节点

Status Apply FX

Demo 状态应用流图需要用一个可复用节点表现光环附加或投射物命中时,使用 Status Apply FX

输入

  • In(Flow):启动节点
  • Target(UnitRefOrCollection):可选的暴露目标输入,运行时只解析第一个单位
  • ApplyVolume(Float):可选的光环音效音量覆盖值
  • FlightTime(Float):可选的投射物飞行时长覆盖值
  • ArcHeight(Float):可选的投射物弧线高度覆盖值
  • ThrowVolume(Float):可选的发射音效音量覆盖值
  • ImpactVolume(Float):可选的命中音效音量覆盖值
  • HitHeight(Float):可选的目标命中高度覆盖值
  • DropHeight(Float):可选的后备生成高度覆盖值
  • RepeatCooldown(Float):可选的重复抑制时间覆盖值

输出

  • Out(Flow):请求光环效果或发射投射物后继续执行

参数

  • TargetSource(Self):始终;Target 未连接时选择一个目标
  • Mode(Aura):始终;选择 Aura 或 Projectile 行为
  • Tint(白色 RGBA(1, 1, 1, 1)):始终;设置目标视图持续 0.22 秒的闪色颜色
  • AuraVfx(None):Aura,或投射物后备流程;在命中点生成的预制体
  • ApplyClip(None):Aura,或投射物后备流程;光环附加时播放的音效
  • ApplyVolume(0.9):Aura,或投射物后备流程;ApplyClip 的音量
  • ProjectilePrefab(None):Projectile;飞向目标的投射物预制体,缺失时退回 Aura 行为
  • FlightTime(0.55):Projectile;存在独立攻击者视图时的飞行秒数
  • ArcHeight(1.6):Projectile;存在独立攻击者视图时的弧线高度
  • ThrowClip(None):Projectile;发射时播放的音效
  • ThrowVolume(0.8):Projectile;ThrowClip 的音量
  • ImpactVfx(None):Projectile;投射物落点生成的预制体
  • ImpactClip(None):Projectile;投射物落地时播放的音效
  • ImpactVolume(1):Projectile;ImpactClip 的音量
  • HitHeight(0.9):始终;命中点相对目标原点的垂直偏移
  • DropHeight(2.4):Projectile 且没有独立攻击者视图;后备投射物起点位于目标上方的高度
  • RepeatCooldown(0.12):始终;同一状态在同一目标上再次播放前的最短秒数,0 或负数关闭抑制

节点需要有效目标和已注册的 UnitView,投射物模式下,如果 ctx.Attacker 与目标不同且有可用视图,就从攻击者位置发射,否则从目标上方向下投射,飞行时间改为 FlightTime 的 65%,弧线高度固定为 0.15,落地回调会尽量跟随目标当时的实时视图位置,然后闪色并播放命中特效与音效

重复抑制按目标和传入状态或当前状态共同记录,没有状态时使用节点 ID,Out 不会等待投射物命中,音效依赖 BattleAudio.Instance,生成的 VFX 使用最长非循环粒子时长加初始生命周期和 0.1 秒,没有可用时长时按 2 秒销毁,循环粒子不会延长生命周期

Status Apply FX Demo 扩展节点

Status Expire FX

Demo 状态到期流图需要在受影响单位上播放一个粒子效果和音效时,使用 Status Expire FX

输入

  • In(Flow):启动节点
  • Target(UnitRefOrCollection):可选的暴露目标输入,运行时只解析第一个单位
  • ExpireVolume(Float):可选的到期音效音量覆盖值
  • HitHeight(Float):可选的特效高度覆盖值

输出

  • Out(Flow):发出表现请求后立即继续执行

参数

  • TargetSource(Self):Self、Opponent、AllUnits、ActivePlayer、AllAllies、AllOpponents、AllDeadAllies、Target;Target 未连接时选择一个目标
  • Tint(白色 RGBA(1, 1, 1, 1)):任意颜色;简单粒子起始色乘以该颜色,渐变或随机起始色模式则直接替换为该颜色
  • ExpireVfx(None):任意 GameObject 预制体;在目标位置生成的到期特效
  • ExpireClip(None):任意 AudioClip;状态到期时播放的音效
  • ExpireVolume(0.55):数值;ExpireClip 的音量
  • HitHeight(0.9):世界空间单位;特效位置相对目标原点的垂直偏移

节点需要有效目标和已注册的 UnitView,VFX 与音效资产缺失时会分别跳过,音效还依赖 BattleAudio.Instance,生成的 VFX 使用最长非循环粒子时长加初始生命周期和 0.1 秒,没有可用时长时按 2 秒销毁,循环粒子不会延长生命周期

Status Expire FX Demo 扩展节点