从Ver.1.27.10.00迁移时
CRIWARE UE4插件Ver.1.27.10.00进行了主要的更改规格。因此,如果您所开发的UE4项目为Ver.1.27.11.00以前的版本,迁移至Ver.1.27.11.00环境时,应格外小心。注意事项如下。

更改API的注意事项

Ver.1.27.11.00包含多个已修改CRIWARE API,例如重新命名和替换等。要将在CRIWARE UE4插件旧版本中的开发项目更新至此版本时,有可能导致以下问题,例如丢失项目中的部分CRIWARE的相关Asset信息、C++代码和蓝图的编译错误等。因此,在更新之前请务必备份您的项目。

以下是更新API后所引起的迁移问题。

现有的C++代码和蓝图的编译错误

由旧版本更新至新版本的API时,务必参照相关类的头文件和“ 旧API ”,并以手动执行更新。如果无法找到支持旧版本的API,请联系CRI的技术支持。

丢失在UE4编辑器中设置的循环信息

从CRIWARE UE4插件Ver.1.27.11.00开始,代表CRI声音的循环信息的EAtomLoopSettingID类型重命名为EAtomLoopSetting类型。而重命名的枚举符如下。
beforeafter
EAtomLoopSettingID::DefaultLoop EAtomLoopSetting::Inherited
EAtomLoopSettingID::ForceLoop EAtomLoopSetting::Loop
EAtomLoopSettingID::IgnoreLoop EAtomLoopSetting::OneShot
由于上述更改,更新插件后,在Atom Cue Asset中设置的循环信息可能会出现意外的值。配置在关卡上的AtomComponent的循环设置也可能受到相同影响。为避免此情况发生,请将以下重定向设置添加到项目设置(如DefaultEngine.ini等)中。
[CoreRedirects]
+EnumRedirects=(OldName="EAtomLoopSettingID",NewName="EAtomLoopSetting",ValueChanges=(("DefaultLoop","Inherited"),("ForceLoop","Loop"),("IgnoreLoop","OneShot")))
即使使用了上述设置,如果在C++代码中使用了EAtomLoopSettingID型时,也将出现编译错误。请手动替换类型名称和枚举符名称。

丢失现有Atom Cue Asset的部分设置值

使用Ver.1.27.11.00更新在旧版本插件中创建的Atom Cue Asset时,将丢失以下设置。
  • bUseLegacyCullingSettings
  • MaxProcessDistance
以上是设置距离Culling功能的旧接口( 按照距离对音频播放处理进行Culling ) 。如果在CRIWARE UE4插件Ver.1.27.10.00中使用了新设置接口,这些设置值将在更新后继承到Ver.1.27.11.00。若曾通过旧接口设置距离Culling的话,则需要使用新方法重新设置这些值。

SoundAtomCueSheet更改规格的注意事项

从Ver.1.27.11.00版本开始,大大改变了USoundAtomCueSheet类的规格。因此可能会破坏现有规格的游戏逻辑。关于此规范更改的说明如下。

USoundAtomCueSheet类的概要

Atom Cue Asset是对应单个声音的数据形式。与其相对,Atom Cue Sheet Asset则是组合保存了多个声音数据的数据集合。 由USoundAtomCueSheet类实际定义此Asset。 要使用Atom Cue Sheet Asset,则必须调用USoundAtomCueSheet::LoadAtomCueSheet函数。这将把Asset中的数据主体(Raw ACB Data)注册到CRIWARE运行时库中,更改为可以使用的状态。这动作就是"加载Raw ACB Data"。

旧规格

以前加载处理Raw ACB Data是必须同步执行。当用户调用USoundAtomCueSheet::LoadAtomCueSheet等函数时,将阻碍调用线程,直至加载Raw ACB Data完成处理为止。 在某些情况下,在CRIWARE API中可能强制加载了Raw ACB Data。例如,如果用户在未加载Raw ACB Data时调用以下函数,在插件内部将于强制加载Raw ACB Data完成前阻碍调用线程。
CRIWARE API 于未加载Raw ACB Data时调用时的动作
UAtomComponent::Play 函数 完成加载前阻碍调用线程,完成加载后发出声音播放请求。
USoundAtomCueSheet::Get 系列函数 完成加载前阻碍调用线程,完成加载后返回信息
USoundAtomCue::Get 系列函数 完成加载前阻碍调用线程,完成加载后返回信息

新规格

加载Raw ACB Data已更改为非同步运行。因此USoundAtomCueSheet::LoadAtomCueSheet 函数也更改为即时返回型函数。调用此函数时,将于后台线程中请求加载Raw ACB Data。用户可以使用USoundAtomCueSheet::IsLoaded() 函数来检测加载是否完成。此类中还定义了捕捉加载完成事件的委托(Delegate)。 已解决了在旧规格中某些情况下,在CRIWARE API中可能强制加载了Raw ACB Data的问题。例如,如果用户在未加载Raw ACB Data时调用以下函数,插件内部中将隐式加载Raw ACB Data请求。关于在旧规格中强制加载了的API的更改规格如下。
CRIWARE API 于未加载Raw ACB Data时调用时的动作
UAtomComponent::Play 函数 即时返回型函数。UAtomComponent对象转换为Prep状态,调用Raw ACB Data的异步加载并返回调用线程。UAtomComponent对象在检测到加载完成后发出声音播放请求。
USoundAtomCueSheet::Get 系列函数 即时返回型函数。没有加载Raw ACB Data 时,则返回无效值。
USoundAtomCue::Get 系列函数 即时返回型函数。没有加载Raw ACB Data 时,则返回无效值。
更改规格解除了上述函数阻碍调用线程的问题。而使用上述Get 系列函数的用户,如果想随时获取有效信息时,请务必确认是否已预先加载了Raw ACB Data。

AtomComponent更改规格的注意事项

从Ver.1.27.11.00版本开始,大大改变了UAtomComponent类的规格。因此可能会破坏现有规格所创建的游戏逻辑。关于此规格更改的说明如下。

UAtomComponent 类的概要

UAtomComponent类的主要作用是附加于Actor,并作为播放声音Player组件。将参照Atom Cue Asset,并播放其相关音频数据。除播放外,还提供了可以控制停止、淡入、淡出等功能接口。此外,也公开了确认音频播放状态的 UAtomComponent::GetStatus()函数。

旧规格

UAtomComponent对象没有包含特有的状态。UAtomComponent::GetStatus() 返回了音频播放状态,但此状态值没有因UAtomComponent对象的成员函数调用而发生改变。也不能跟随UAtomComponent对象的Tick处理发生改变。

新规格

UAtomComponent对象包含特有的状态。UAtomComponent::GetStatus() 返回 UAtomComponent 状态。此状态值可能因UAtomComponent对象的成员函数调用而发生改变。也可能跟随UAtomComponent对象的Tick处理发生改变。

Atom Track更改规格的注意事项

从Ver.1.27.11.00版本开始更改了Atom Track的规格。虽然因此更改而破坏现有项目和工作流程的可能性低,但注意在使用UE4的Sequencer功能编辑剪接场景时,需要添加不同的操作步骤。

Atom Track的概要

将Atom Cue Asset拖放到Sequencer编辑器时间轴时会创建Atom Track,显示为与轨迹上Atom Cue Asset所对应Cue长度一致的Session。

旧规格

使用包含无限循环设置的Cue创建Session时,很长的Session会占用了Atom Track。

新规格

  • 在Atom Track上配置了有循环设置的Cue时,将创建与Cue的第一个波形相同长度的Session。
  • 此Session长度可以在序列编辑器中可随意加长和缩短。
  • 于此Session结束时停止循环播放。
  • 已创建完成的Session长度不会自动更改。