情景效果系统

视频介绍

请从12:10分开始看

系统概述

通用效果系统(GES),用于在任意情境下播放声效和特效,主要用于自动化脚步声/效,也可用于其他需要声音和视觉反馈的场景。

初步设置

在安装此插件后,请确保你的项目启用了Niagara插件。

情景效果组件

为角色添加GES_ContextEffect组件即可。

ggs ges 1
  • DefaultEffectContexts:指定该组件默认的Tags,用作播放效果时的SourceTags。如果使用TagsProvider,通常可以不设置。
  • DefaultContextEffectsLibraries:指定多个VFX/SFX库,播放请求将从这些库中寻找合适的效果。
  • AutoSetupTagsProvider:勾选后,该组件在BeginPlay时会查询Actor及其组件树中第一个实现了IGameplayAssetTagInterface接口的对象,将其作为TagsProvider。

vfx/sfx库

这是一个类型为GES_ContextEffectsLibrary的数据资产,可以在内容浏览器中创建。

下图展示了两个配置好的情景效果库:

  • CFX_MMS_Sfx:用于控制脚步声/效,定义了不同类型的脚步与不同材质表面接触时播放的声音。
  • CFX_CombatFX:用于战斗效果控制,定义了不同武器在不同情况下播放的声音。
ggs ges 2
  • EffectTag:指定效果的名字Tag,在API调用时使用该Tag以决定播放的效果。
  • Effects:在Effects数组中添加任意声音资产及Niagara/Cascade特效资产。
  • SourceTagQuery:播放效果时,只有传入的SourceTags与指定的SourceTagQuery匹配时,才会播放配置的效果。
  • TargetTagQuery:在API调用时,可以传入其他对象的Tags以进一步匹配合适的效果。

编辑器设置

ggs ges 3

在项目设置中,Game部分可以找到GES的全局设置,在这里可以将项目中用到的物理材质映射为GameplayTag。同时,可以启用编辑器预览并指定使用的预览设置。

编辑器预览

ggs ges 4

上图是一个编辑器预览案例,选择在动画序列播放窗口中从哪个VFX/SFX库寻找声音和效果,同时通过PreviewContexts模拟不同情景。

你需要在全局设置中启用编辑器预览,这样你在动画序列播放器中滑动时间轴时,才会触发对应的效果,否则什么也不会发生。

通过动画播放声效/特效

手动放置Play Context Effects动画通知

下图利用情景效果通知来与武器挥舞的动作进行配合。

ggs ges 5
ggs ges 6

取决于你如何配置你的情景特效库,角色会在播放此动作时,根据情景效果组件所拥有的Tags,决定最合适的音效/特效进行播放。

ggs ges 7

自动化脚步声放置

此部分用于自动化设置角色的脚步放置及脚步声。任何需要脚步效果的动画需添加如下动画修改器:

ggs ges 8
  • AM_FootFX:自动检测动画中脚步着地的时间,并添加相应的动画通知。
  • AM_FootstepContextEffect:根据脚步着地的位置自动添加“Play Context Effects”的动画通知。
ggs ges 9

下图是Play Context Effects动画通知上的参数。通过EffectIn指定需要播放的效果,例如着陆动画使用Footstep.Land,行走动画使用Footstep.Walk

ggs ges 10

通过API播放声效/特效

在某些情况下,你可能想通过蓝图播放声效/特效,以下是简单的API:

ggs ges 11
  • Attached:勾选后需传递ComponentToAttach到Input参数中。
  • SourceContextType:选择Override时,将直接使用传递的SourceContext作为SourceTags查询效果;选择Merge时,将合并传递的SourceContext与效果组件本身的Tags。
  • TargetContext:可选,根据游戏机制可能需要传递TargetContext以进行复杂效果查询。

这是底层API,通常在其他系统中使用。例如,武器添加情景效果组件,在武器击中环境时,将武器类型Tag作为Contexts播放击中效果。

GAS集成

GES中的情景一般指GameplayTags,EffectContext组件除了设置默认Contexts外,还可以通过外部对象提供GameplayTags,该对象需实现GameplayTagsAssetInterface,通常为GameplayAbilities插件中的AbilitySystemComponent

调用EffectContext组件上的“SetGameplayTagsProvider”,并传入技能组件,即可用GAS驱动GES。

ggs ges 12

在GameplayCue中使用GES

假设有一个Cue用于武器击中目标角色后播放声效/特效,可以将Cue的相关参数作为播放情景特效的参数,让GES处理声效/特效播放。

ggs ges 13

采用这种方式,只需一个简单的Cue即可实现多种机制。