- CRIWARE Unreal Engine Plugin v1.27.11.00 では大きな仕様変更が行われました。v1.27.11.00 未満の CRIWARE Unreal Engine Plugin で開発した Unreal Engine プロジェクトを v1.27.11.00 環境へアップデートする場合は充分な注意が必要です。本ページでは移行に際しての注意点を説明します。
API の変更に関する諸注意
- v1.27.11.00 には複数の CRIWARE API に対するリネーム・置き換えなどの変更が含まれます。旧バージョンの CRIWARE Unreal Engine Plugin で開発したプロジェクトを本バージョンに更新する場合、プロジェクト内の CRIWARE 関連アセットの一部情報が失われたり、 C++ コード、 Blueprint 等がコンパイルエラーとなる恐れがあります。更新前に、必ずプロジェクトのバックアップを行ってください。
以下、API の変更によって生じる移行時の問題を列挙します。
既存の C++ コードや Blueprint がコンパイルエラーになる
- 旧バージョンの API から新バージョンの API に置換を行う場合は、当該クラスのヘッダファイルや「 古いAPI 」を参照の上、手動で行っていただく必要があります。旧バージョンに対応する API が見つからない場合は、 CRIWARE のテクニカルサポートにご相談ください。
Unreal Engine Editor 上で設定したループ情報が破損する
- CRIWARE Unreal Engine Plugin v1.27.11.00 より、CRI サウンドのループ情報を表す EAtomLoopSettingID 型 を EAtomLoopSetting 型にリネームしました。また、列挙子を下記のようにリネームしました。
before | after |
EAtomLoopSettingID::DefaultLoop | EAtomLoopSetting::Inherited |
EAtomLoopSettingID::ForceLoop | EAtomLoopSetting::Loop |
EAtomLoopSettingID::IgnoreLoop | EAtomLoopSetting::OneShot |
- 上記変更により、 Atom Cue アセットに設定していたループ情報が、プラグインのアップデート後に予期せぬ値に変わる可能性があります。また、レベル上に配置していた AtomComponent のループ設定も同様の影響を受けます。これを避けるには、プロジェクト設定( DefaultEngine.ini 等)に下記のリダイレクト設定を追記してください。
[CoreRedirects]
+EnumRedirects=(OldName="EAtomLoopSettingID",NewName="EAtomLoopSetting",ValueChanges=(("DefaultLoop","Inherited"),("ForceLoop","Loop"),("IgnoreLoop","OneShot")))
- 上記設定を適用した場合であっても、 C++ コード上で EAtomLoopSettingID 型を使用していた場合はコンパイルエラーになります。その場合は手動で型名と列挙子名を置換する必要があります。
既存の Atom Cue アセットから一部の設定値が失われる
- 旧バージョンのプラグインで作成した Atom Cue アセットを v1.27.11.00 で更新した場合、下記の設定値が失われます。
- bUseLegacyCullingSettings
- MaxProcessDistance
- これらは距離カリング機能 ( 距離に応じたサウンド再生処理のカリング ) を設定するためのレガシーなインタフェースでした。CRIWARE Unreal Engine Plugin v1.27.10.00 にて追加した新方式の設定インタフェースを使用していた場合、設定値は v1.27.11.00 に更新後も引き継がれます。もしレガシーなインタフェースを介して距離カリングを設定していた場合は、新しい方式で設定しなおす必要があります。
SoundAtomCueSheetの仕様変更に関する諸注意
- v1.27.11.00 より、 USoundAtomCueSheet クラスの仕様が大幅に変更されました。既存の仕様に基づいて構築されたゲームロジックを破壊する可能性があります。以下、この仕様変更について説明します。
USoundAtomCueSheet クラスの概要
- Atom Cue アセットは個々のサウンドに対応するデータ表現です。これに対し、各サウンドデータの本体を複数まとめて保持しているバンクデータが Atom Cue Sheet アセットです。このアセットを実際に定義しているのが USoundAtomCueSheet クラスです。 Atom Cue Sheet アセットを使用するには USoundAtomCueSheet::LoadAtomCueSheet 関数を呼び出す必要があります。これによってアセット内のデータ本体 (Raw ACB Data) が CRIWARE ランタイムライブラリに対して登録され、はじめて使用可能な状態となります。これを「Raw ACB Data のロード」と呼びます。
以前の仕様
- Raw ACB Data のロード処理は、必ず同期的に実行されていました。ユーザが USoundAtomCueSheet::LoadAtomCueSheet 関数等を呼び出すと、Raw ACB Data のロード処理が完了するまで呼び出し元スレッドをブロックする仕様となっていました。 また、Raw ACB Data のロードは CRIWARE API の中で強制的に実行されるケースもありました。例えば、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() 関数を使用します。また、ロード完了をキャッチするデリゲートもこのクラスに定義されています。 以前の仕様に存在していた、特定の 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 の仕様変更に関する諸注意
- v1.27.11.00 より、 UAtomComponent クラスの仕様が変更されました。既存の仕様に基づいて構築されたゲームロジックを破壊する可能性があります。以下、この仕様変更について説明します。
UAtomComponent クラスの概要
- アクターに付与され、音声再生プレイヤーコンポーネントとして振る舞うのが UAtomComponent クラスの主な役割です。 Atom Cue アセットを参照し、そこに紐付けられたサウンドデータを再生します。また、再生以外にも停止やフェードイン・フェードアウトなどの制御を行うためのインタフェースを提供しています。加えて、音声の再生状態を確認するために UAtomComponent::GetStatus() 関数を公開しています。
以前の仕様
- UAtomComponent オブジェクトは独自の状態を持っていませんでした。 UAtomComponent::GetStatus() は音声の再生状態を返していましたが、この状態値は UAtomComponent オブジェクトに対するメンバ関数呼び出しによって変化することはありませんでした。また、 UAtomComponent オブジェクトの Tick 処理に連動して変化することもありませんでした。
新しい仕様
- UAtomComponent オブジェクトは独自の状態を持ちます。 UAtomComponent::GetStatus() は UAtomComponent の状態を返します。この状態値は UAtomComponent オブジェクトに対するメンバ関数呼び出しによって変化する可能性があります。また、 UAtomComponent オブジェクトの Tick 処理に連動して変化する可能性があります。
Atomトラックの仕様変更に関する諸注意
- v1.27.11.00 より、 Atom トラックの仕様が変更されました。既存のプロジェクトやワークフローを破壊する可能性は低い変更ですが、Unreal Engine のシーケンサー機能を用いたカットシーン編集の際に、従来とは異なる操作手順が必要になります。
Atomトラックの概要
- シーケンサーエディタ上のタイムラインに Atom Cue アセットをドロップすると、Atomトラックが作成されます。トラック上には配置した Atom Cue アセットに対応するキューの長さに一致するセクションが表示されます。
以前の仕様
- 無限ループ設定が有効なキューでセクションを作成した場合、とても長いセクションが Atom トラック上を占有していました。
新しい仕様
- ループ設定のキューを Atom トラックに配置した場合、キューの先頭波形と同じ長さのセクションが生成されます
- このセクションの長さはシーケンスエディタ上で自由に伸縮させることができます
- このセクションの終端でループ再生が停止します
- 既に生成済みのセクションの長さが自動で変更されることはありません