这是什么?
这是一个虚幻引擎插件,专门设计用于支持与音频分离的字幕、隐藏式字幕和场景描述。 例如,这些新字幕可以从任何其他系统触发,独立于任何相关音频资产的持续时间或播放状态。 这个新的字幕系统最终将取代并废弃现有系统,现有系统不支持字幕独立于声音的使用。 用户可以自定义字幕的显示时间、字体、颜色等属性。
插件位置?
\Engine\Plugins\Experimental\SubtitlesAndClosedCaptions
包含文件:#include SubtitlesSubsystem.h
要在编辑器中加载插件,请转到编辑(Edit) > 插件(Plugins),在打开的选项卡中输入插件名称或滚动找到字幕和隐藏式字幕(Subtitles and Closed Captions),选中复选框,然后点击重启编辑器(Restart the Editor)。
如何使用?
每个字幕都作为USubtitleAssetUserData UCLASS存储,该类派生自UAssetUserData,可以被子类化以在任何虚幻资产对象上存储额外的自定义数据。
USubtitleAssetUserData成员
Text:要在字幕中显示的可本地化FText。
支持多行文本,使用Shift + Enter或在文本中包含\n来指定换行。
FText会使用本地化系统的哈希键实现在客户端本地化为当前语言——本地化过程在字幕系统之前进行,且独立于字幕系统。
Duration:字幕显示时长(以秒为单位)。
默认:3秒。
必须 >= 0.05秒。
仅在Duration Type设置为
UseDurationProperty时启用。
Duration Type: 可以设置为UseDurationProperty(启用Duration属性),或设置为UseSoundDuration以在附加声音结束时自动停止。
UseSoundDuration仅在字幕作为AssetUserData添加到SoundBase资产时有效。
StartOffset:开始显示字幕行的时间偏移(以秒为单位)。
这可用于简化每个音频资产显示多个字幕的操作,例如: 包含多个句子的长
SoundWave可以使用多个字幕,每个字幕的StartOffset设置为各句子开始的时间偏移。默认值:0秒。
Priority:如果多个字幕同时播放,只有具有最高(数值最大)优先级的字幕会播放,而非那些优先级较低的字幕。
即使字幕仅部分重叠,此规则也适用。重叠判定基于
StartOffset和持续时间。如果新字幕设置为立即显示或通过
StartOffset显示,而此时正在显示更高优先级的字幕,则较低优先级的字幕不会显示。每个类别(字幕、音频描述等)同时只显示一个。
如果两个的竞争字幕具有相同的优先级,处于队列较早的字幕将继续显示。 每当一个已加入队列的字幕因优先级冲突而未能显示时,会向调试日志(debug log) 发送一条警告信息。
默认值:1。
ESRB:字幕类别的ESRB分级。 这是游戏开发者设置和使用的描述性字段。
调用者可以通过检查此值来确定是否应该显示某个字幕行。
默认值:ESRB::Everyone。
SubtitleType:指定资产类型为Subtitle、ClosedCaption还是AudioDescription。这是游戏开发者设置的描述性字段。
调用者可以通过检查此值来确定是否应该显示某个字幕行。
每个
SubtitleType都有独立显示参数,可通过下文介绍的TextBlock控件进行设置。显示时,不同字幕类型会定位在不重叠的位置。
显示参数
字幕将使用TextBlock控件显示:
在虚幻编辑器中,转到编辑(Edit) > 项目设置(Project Settings),滚动到游戏(Game),点击字幕和隐藏式字幕(Subtitles and Closed Captions)。
在菜单中,使用下拉菜单选择
DefaultSubtitleWidget。点击浏览到资产(Browse to Asset)图标查看控件。
双击控件将其打开。
默认字幕控件允许为字幕、隐藏式字幕和音频描述设置独立的显示参数 (例如位置、字体、颜色、不透明度等)。 双击字幕文本框以打开细节(Details)选项卡。
默认情况下,字幕使用白色字体显示,而隐藏式字幕(ClosedCaptions)和音频描述(AudioDescriptions)使用灰色字体。
蓝图访问
除了USubtitleAssetUserData和TextBlock控件参数外,还提供以下API供C++和蓝图使用:
QueueSubtitle(const FQueueSubtitleParameters&, const ESubtitleTiming Timing = ESubtitleTiming::InternallyTimed)
其中FQueueSubtitleParameters包含:
字幕,即上文所述的
USubtitleAssetUserData。用于覆盖资产持续时间的可选参数。
如果字幕已在主动显示,则活动字幕的持续时间将更新为指定的持续时间。
定时
设置为ESubtitleTiming::ExternallyTimed可以手动控制字幕的加入队列和过期,而不是使用字幕的默认持续时间。采用外部计时的字幕将无限期保持活动状态,直到使用StopSubtitle()方法手动移除。对于涉及时间膨胀或扭曲的序列器场景,最好使用ESubtitleTiming::ExternallyTimed模式,并手动管理字幕的加入队列和停止。当多个字幕加入队列时,会显示最高优先级中最新的字幕。
| 代码 | 结果 |
|---|---|
IsSubtitleActive (const | 如果指定的字幕资产正在显示,则返回true。 |
StopSubtitle (const | 停止显示指定的字幕资产。 这包括因 |
StopSubtitle() | 停止所有已排队字幕的显示。 这包括因 |
显示动态生成的字幕
来自任意来源(例如 从多人游戏服务器动态复制)的FText可以显示为字幕。 示例:
USubtitlesSubsystem* Subsystem = NewObject<USubtitlesSubsystem>(pWorld, NAME_None, RF_Transient);
check(Subsystem != nullptr);
USubtitleAssetUserData* Subtitle = NewObject<USubtitleAssetUserData>(GetTransientPackage(), NAME_None, RF_Transient);
check(Subtitle != nullptr);
Subtitle->Text = <arbitrary FText input>;
const UAssetUserData& AssetUserData = *CastChecked<const UAssetUserData>(Subtitle);
Sequencer
将你的字幕资产拖动到Sequencer中的字幕轨道上。然后可以通过右键点击字幕并选择属性(Properties)来编辑字幕属性。 在Sequencer中,字幕持续时间由选择范围的开始和结束位置控制,而不是其持续时间属性。
本地化
字幕系统通过其可本地化的FText属性支持本地化功能。FText会使用本地化系统的哈希键实现在客户端本地化为当前语言——本地化过程在字幕系统之前进行,且独立于字幕系统。请参阅在虚幻引擎中本地化内容 | 虚幻引擎5.5文档 | Epic开发者社区。
迁移指南
迁移工具(Migration Tool)会复制指定DialogueWave和/或SoundWave中的字幕数据到新的字幕(Subtitle)资产类型中。 它会将新资产放入指定DialogueWave和/或SoundWave的AssetUserData中。 如果再次迁移指定的DialogueWave和/或SoundWave,已迁移的字幕会得到更新。但是,如果重新迁移没有产生变化,目标资产不会被标记为脏数据,也无需重新保存到磁盘。
迁移是非破坏性的;新旧字幕默认都会自动显示,让用户控制使用哪些内容。
显示参数设置(例如 字体、颜色等)目前不是迁移工具的组成部分。这些设置通过上文介绍的TextBlock控件按类别进行设置。
迁移SoundWave
要使用该工具,请在内容浏览器(Content Browser)中选择一个或多个SoundWave资产。 然后右键点击,找到脚本化编辑器操作(Scripted Editor Actions)子菜单,并选择创建字幕(Create Subtitle)。这将为包含迁移字幕数据的SoundWave创建新的USubtitleAssetUserData。
如果需要,可以通过以下方式从旧字幕系统中删除数据:
在内容浏览器(Content Browser)中选择一个或多个
SoundWave资产。右键点击,找到脚本化编辑器操作(Scripted Editor Actions)子菜单。
选择删除旧版字幕(Remove Legacy Subtitles),这会清空旧的字幕数组……
迁移DialogueWave
迁移与DialogueWave关联的SoundWave后,在此字幕插件使用控制台命令au.UseNewSubtitles 1查看效果。 你可以通过将控制台变量设置回其默认值 0,来切换回使用原始的内容和字幕系统。
性能说明
新旧系统间的磁盘使用量略有差异。迁移至新系统的字幕在显示队列中时,每个字幕约占16字节(从旧系统的80字节增至新系统的96字节)。
迁移前(每个排队字幕80字节):
FQueueSubtitleParams:56字节FSubtitleCue:24字节的倍数。 此比较中假设只有其中一个。
迁移后(每个排队字幕96字节):
FQueueSubtitleParameters:16字节USubtitleAssetUserData:80字节
内存中未排队的字幕不使用FQueueSubtitleParameters结构体,因此“批量”字幕会显示更大的差异,从24字节(旧版)增加到80字节(新版),由于增加了附加属性和功能,两者相差56字节。
迁移工具源代码
如果需要修改迁移工具,可在字幕插件文件夹中找到:SubtitlesAndClosedCaptions/Content/EditorUtilities/CreateSubtitlesFromSoundWaves.uasset
与新字幕插件的其他部分一样,迁移工具目前也被标记为实验性功能。