跳到主要内容

FX 节点

GCS · 内置节点库

用动画、音频、VFX、飘字、位移和镜头反馈表现已经结算的结果

FX 节点应在玩法修改提交后请求表现,这里列出 7 个可复用的核心 FX 节点,以及 Demo 程序集注册的 2 个状态表现扩展节点

FX 节点应在玩法修改提交后请求表现,这里列出 7 个可复用的核心 FX 节点,以及 Demo 程序集注册的 2 个状态表现扩展节点


节点用法

Flash Unit

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

输入

  • InFlow):启动节点
  • DurationFloat):可选的闪色时长覆盖值
  • TargetUnitRef):可选的暴露目标输入

输出

  • OutFlow):发出闪色请求后继续执行

参数

  • TargetSourceSelf):SelfOpponentAllEnemiesAllUnitsTarget 未连接时选择单位
  • Color(白色 RGBA(1, 1, 1, 1)):任意颜色;设置闪色颜色
  • Duration0.3):秒;Duration 端口未连接时使用的时长

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

Flash Unit 节点

Play Animation

需要向单个单位的表现动画器发送 HitAttackDeath 等触发器时,使用 Play Animation

输入

  • InFlow):启动节点
  • TargetUnitRef):可选的暴露目标输入

输出

  • OutFlow):发出触发请求后继续执行

参数

  • TargetSourceSelf):SelfOpponentAllEnemiesAllUnitsTarget 未连接时选择单位
  • TriggerHit):任意 Animator Trigger 名称;指定发送给单位表现动画器的触发器

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

Play Animation 节点

Play SFX

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

输入

  • InFlow):启动节点
  • VolumeFloat):可选的播放音量覆盖值

输出

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

参数

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

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

Play SFX 节点

Play VFX

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

输入

  • InFlow):启动节点
  • LifetimeFloat):编辑器中可暴露的生命周期覆盖端口
  • TargetUnitRef):AnchorOnUnit 时可用,连接后覆盖 TargetSource

输出

  • OutFlow):生成预制体后立即继续执行

参数

  • TargetSourceSelf):SelfOpponentAllEnemiesAllUnitsAnchorOnUnitTarget 未连接时选择一个单位
  • AnchorOnUnit):OnUnitAtPosition;选择单位位置或固定世界坐标
  • Position(0, 0, 0)):世界坐标 Vector3;仅在 AtPosition 下使用的生成位置
  • PrefabNone):任意 GameObject 预制体;选择要实例化的特效
  • Lifetime0):秒;正数表示精确生命周期,0 或负数启用自动检测

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

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

当前 Lifetime 端口边界

当前运行时直接读取节点上的 Lifetime 字段,暴露并连接自动生成的 Lifetime 输入还不能覆盖这个值,在运行时行为修正前,请直接在节点字段中设置生命周期

Play VFX 节点

Shake Camera

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

输入

  • InFlow):启动节点
  • IntensityFloat):可选的震动强度覆盖值
  • DurationFloat):可选的震动时长覆盖值

输出

  • OutFlow):震动开始后立即继续执行

参数

  • Intensity0.3):世界空间距离;设置节点内的震动强度
  • Duration0.3):秒;设置节点内的震动时长

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

Shake Camera 节点

Show Floating Text

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

输入

  • InFlow):启动节点
  • TargetUnitRefOrCollection):可选的暴露目标输入,支持单个单位或集合
  • AmountInt):ContentAmount 时可用,覆盖节点中的数值
  • TextString):ContentText 时可用,覆盖节点中的文本

输出

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

参数

  • TargetSourceSelf):SelfOpponentAllEnemiesAllUnitsTarget 未连接时选择目标
  • KindCustom):DamageHealArmorBlockCustom;选择飘字语义样式
  • ContentText):AmountText;选择启用的内容字段和数据端口
  • Amount0):整数;Amount 模式下显示的数值
  • Text(空):任意短文本;Text 模式下显示的标签
  • Color(白色 RGBA(1, 1, 1, 1)):任意颜色;自定义飘字颜色
  • UseCustomColor(关闭):关闭、开启;开启时使用 Color,关闭时由飘字样式决定颜色
  • IncludeSign(开启):关闭、开启;显示数值内容时是否带正负号
  • ScaleMultiplier1):倍率;缩放配置好的字体大小
  • DurationMultiplier1):倍率;缩放配置好的显示时长
  • Offset(0, 0, 0)):相对单位表现的 Vector3 偏移;调整飘字位置

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

Show Floating Text 节点

Slide Unit

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

输入

  • InFlow):启动节点
  • TargetUnitRef):可选的暴露目标输入
  • ToVector3):必须连接的世界坐标目标位置
  • DurationFloat):可选的位移时长覆盖值

输出

  • OutFlow):位移开始后立即继续执行

参数

  • TargetSourceSelf):SelfOpponentAllEnemiesAllUnitsTarget 未连接时选择一个单位
  • Duration0.3):秒;Duration 端口未连接时使用的时长
  • EaseLinear):LinearInSineOutSineInOutSineOutCubicInCubicOutBackInBackOutBounceOutElastic;选择运动曲线

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


Demo 扩展 FX 节点

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

Slide Unit 节点

Status Apply FX

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

输入

  • InFlow):启动节点
  • TargetUnitRefOrCollection):可选的暴露目标输入,运行时只解析第一个单位
  • ApplyVolumeFloat):可选的光环音效音量覆盖值
  • FlightTimeFloat):可选的投射物飞行时长覆盖值
  • ArcHeightFloat):可选的投射物弧线高度覆盖值
  • ThrowVolumeFloat):可选的发射音效音量覆盖值
  • ImpactVolumeFloat):可选的命中音效音量覆盖值
  • HitHeightFloat):可选的目标命中高度覆盖值
  • DropHeightFloat):可选的后备生成高度覆盖值
  • RepeatCooldownFloat):可选的重复抑制时间覆盖值

输出

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

参数

  • TargetSourceSelf):始终;Target 未连接时选择一个目标
  • ModeAura):始终;选择 AuraProjectile 行为
  • Tint(白色 RGBA(1, 1, 1, 1)):始终;设置目标视图持续 0.22 秒的闪色颜色
  • AuraVfxNone):Aura,或投射物后备流程;在命中点生成的预制体
  • ApplyClipNone):Aura,或投射物后备流程;光环附加时播放的音效
  • ApplyVolume0.9):Aura,或投射物后备流程;ApplyClip 的音量
  • ProjectilePrefabNone):Projectile;飞向目标的投射物预制体,缺失时退回 Aura 行为
  • FlightTime0.55):Projectile;存在独立攻击者视图时的飞行秒数
  • ArcHeight1.6):Projectile;存在独立攻击者视图时的弧线高度
  • ThrowClipNone):Projectile;发射时播放的音效
  • ThrowVolume0.8):ProjectileThrowClip 的音量
  • ImpactVfxNone):Projectile;投射物落点生成的预制体
  • ImpactClipNone):Projectile;投射物落地时播放的音效
  • ImpactVolume1):ProjectileImpactClip 的音量
  • HitHeight0.9):始终;命中点相对目标原点的垂直偏移
  • DropHeight2.4):Projectile 且没有独立攻击者视图;后备投射物起点位于目标上方的高度
  • RepeatCooldown0.12):始终;同一状态在同一目标上再次播放前的最短秒数,0 或负数关闭抑制

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

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

Status Apply FX Demo 扩展节点

Status Expire FX

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

输入

  • InFlow):启动节点
  • TargetUnitRefOrCollection):可选的暴露目标输入,运行时只解析第一个单位
  • ExpireVolumeFloat):可选的到期音效音量覆盖值
  • HitHeightFloat):可选的特效高度覆盖值

输出

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

参数

  • TargetSourceSelf):SelfOpponentAllEnemiesAllUnitsTarget 未连接时选择一个目标
  • Tint(白色 RGBA(1, 1, 1, 1)):任意颜色;简单粒子起始色乘以该颜色,渐变或随机起始色模式则直接替换为该颜色
  • ExpireVfxNone):任意 GameObject 预制体;在目标位置生成的到期特效
  • ExpireClipNone):任意 AudioClip;状态到期时播放的音效
  • ExpireVolume0.55):数值;ExpireClip 的音量
  • HitHeight0.9):世界空间单位;特效位置相对目标原点的垂直偏移

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

Status Expire FX Demo 扩展节点