バージョン

menu_open
Wwise Unity Integration Documentation
UnityのためのWwise Addressablesパッケージ

Unity Addressablesについて

Unity AddressablesはAssetBundlesをベースにつくられたシステムで、アセットをプレイヤーとは別にパッケージングするためのものです。 追加のアセットを外部サーバに格納することのできるDLCなどの用途には、特に便利です。

もし、まだAddressablesを使い始めたばかりで慣れていない場合は、 公式ドキュメンテーション学習リソース などを読むと良いでしょう。

Wwise Unity Addressablesパッケージを使い始めるには、ここからスタートすると良いでしょう:

以下のセクションで、Wwise Addressablesパッケージの機能を説明します:

  1. Addressablesシステムの特殊性
  2. 既知の問題点と限界
  3. Wwise Addressablesサンプル
  4. WwiseのAddressable Assetsの概要
    1. SoundBankと、AddressableSoundBank
    2. Addressable Bank Managerについて
    3. WwiseBankReference
    4. WwiseのAsset Importer
    5. ストリーミングメディア
注意: このパッケージは実験的な段階のものです。 Addressablesの対応はUnity integrationに導入された新機能で、変更される可能性があります。
注意: Unity 2018はサポートされていません。 Unity 2018で外部パッケージを使ったときに問題が起きやすいことを考慮すると、このパッケージがUnity 2019よりも前のバージョンで正しく作動することを、保証できません。

Addressablesシステムの特殊性

Addressablesシステムは、以下の特殊性があるので、注意してください:

  • Addressablesでアセットをロードすると、本質的に、非同期となります: SoundBankをロードすることと、イベントをポストすることが、同じトリガーにリンクしている場合は、問題が発生する可能性があります。そこで、イベントの正確なタイミングが特に重要なときは、SoundBankに関連付いているEventがトリガーされる前に、そのSoundBankをロードするようにしてください。なお、Init Soundbankは特別なケースで、シーンのどのSoundBankよりも先にロードする必要があります。Init SoundBankアセットをリモートでアップデートしている場合は、シーンの最初にSoundBankをロードする際に、わずかな追加のディレイが生じることが予測されますが、これは、まずAddressablesを使って新しいInit SoundBankをウェブサーバからフェッチする必要があるからです。
  • Addressableアセットを、シーンで、直接のリファレンスとしてはいけません: Addressablesのアセットは、Addressablesシステムを使ってシーンにダイナミックにロードすることになっています。シーンで直接参照先となっているアセットは、そのシーンのAssetBundleに作り込まれるため、Addressables経由でロードされることはありません。もし、シーンに直接置いたアセットを、Addressablesでもパッケージ化した場合は、ゲームデータに、このアセットの2つの別々のコピーが存在することになります。1つはシーンのAssetBundleにあり、もう1つはAddressableグループのAssetBundleにあります。

既知の問題点と限界

  • プロジェクトの全プラットフォームが、ルートとして同じ Generated SoundBanks Path を共有する必要があります。
  • Unityのプロジェクト設定で Generated SoundBank Path を設定しても、External Sourcesのアウトプットパスは自動的に変更されません。
  • Decoded SoundBanksの保存とロードに、まだ未対応です。
  • Prepared Eventsに、まだ未対応です。
  • External Sourcesに、まだ未対応です。

Wwise Addressablesサンプル

Wwise Addressablesサンプル でWwise Addressablesアセットの管理を助けるために設計されたコードサンプルの追加情報を提供します。

WwiseのAddressable Assetsの概要

WwiseのAsset Importer

作成された .bnk ファイルや .wem ファイルは、WwiseBankImporterクラスやWwiseStreamingAssetImporterクラスによって処理されます。 このスクリプトで、ファイルのバイナリデータの入ったアセットが作成されます。次に、独自のアセットポストプロセッサであるWwiseBankPostProcessが、新アセットをそれぞれのプラットフォームのAddressablesグループに追加します。 各プラットフォームのInit SoundBankは、そのプラットフォームのAddressablesグループに追加されます。ここでInit Bankを別に扱っているのは、リリース後にプロジェクトへの変更(新しいオーディオバスの追加など)があった場合に、それをアップデートする必要があるからです。 Init SoundBankを、Addressable対象の専用AssetBundleにパッケージすることで、ホスティングサービスから、このアセットの最新バージョンを短時間でフェッチできます。 どのAddressablesグループにアセットを追加するのかや、どのラベルをアセットに適用するのかをカスタマイズしたい場合は、 Wwise Addressablesサンプル を参照してください。

SoundBankと、AddressableSoundBank

アセットポストプロセッサは、プロジェクトの各SoundBankのWwiseAddressableSoundBankも作成してくれます。 このアセットには、プラットフォーム名を、そのSoundBankやストリーミングメディアアセットに対してマッピングするディクショナリが入っています。

  • WwiseAddressableSoundBankは、Generated SoundBanksフォルダのルートレベルにあります。
  • WwiseAddressableSoundBankクラスは、SoundBankやメディアファイルをポイントするのに、AssetReferenceTを使います。
  • プロジェクトをビルドするときに、WwiseAddressableSoundBankのCurrent Platfrom Assetsフィールドが、ターゲットとなるビルドプラットフォームに設定されます。
注意: WwiseAddressableSoundBankが参照するSoundBankやストリーミングメディアは、ソフトリファレンスです。Addressablesを使ってロードされるので、必ずAddressablesグループの中にパッケージしてください。
注意: 誤ってWwiseAddressableSoundBankを削除してしまった場合は、それに関連づけられているSoundBankを一度削除して再生成して、新しいものを作成してリファレンスを正しく設定しなおす必要があります。

Init Bank Holderについて

Init SoundBankのWwiseAddressableSoundBankが作成されると、InitBankHolderコンポーネントが、そのシーンのWwiseGlobalゲームオブジェクトに追加されます。 このコンポーネントは、AddressableBankManagerが見つけやすいように、単純にWwiseAddressableSoundBankを保存します。

Addressable Bank Managerについて

Wwise Addressablesを使うと、AkAddressableBankManagerが、メモリにサウンドバンクをロード・アンロードするのを担当します。このクラスに、ロード中やロード済みのAddressableSoundBankへのリファレンスが保存され、必ずInit SoundBankが最初にロードされるようにしてくれます。 もしAkEventが、そのSoundBankのロード終了前にトリガーされてしまった場合は、このクラスが、トリガーされたコールのパラメータを保存し、SoundBankのロードが済んでから、このイベントを再度トリガーします。

SoundBankがロードされたら、現在のプラットフォームに対応するSoundBankアセットが、Addressablesを使ってロードされます。ロードが済むと、SoundBankデータがピン付けされ、AkSoundEngine.LoadBankMemoryCopy()を使ってメモリのコピーがサウンドエンジンにロードされます。

Editorでプレイモードのときは、AddressablesではなくAssetDatabaseを使って、SounBanksが同期的にロードします。非同期のロードは、ビルドしたゲームでしかテストできません。

WwiseBankReference

WwiseBankReferenceクラスは、Ak.Wwise.Bankコンポーネントのために、カスタムInspectorで使います。 WwiseBankReference に、 WwiseAddressableSoundBank へのハードリファレンスが入っています。 このリファレンスはWwiseAddressableSoundBank Assetを AkAssetUtilities.AddressableBankUpdated デリゲート経由で作成した時に更新されます。 WwiseBankReferenceWwiseAddressableSoundBank の後に作成された場合は、そのバンク名に一致するWwiseAddressableSoundBankアセットをSoundBanksフォルダ内で探します。 シリアル化されたWwiseBankReferencesは、 Assets\Wwise\ScriptableObjects\SoundBank に保存されます。

注記: ゲームオブジェクトによって直接参照されるアセットは、すべてそのゲームオブジェクトと共にパッケージされます。 AkBank Componentには、WwiseBankReferenceへのハードリファレンスが含まれ、WwiseBankReferenceには、それに対応するWwiseAddressableSoundBankへのハードリファレンスが含まれます。 AkBankコンポーネントのあるGameObjectをAddressablesグループに入れると、それと共にWwiseBankReferenceや、WwiseAddressableSoundBankも、パッケージされます(グループに意図的に追加しなくても)。

ストリーミングメディア

ストリーミングメディア(.wem ファイル)にも、WwiseBankImporterスクリプトが対応します。 WwiseAddressableSoundBankには、このバンクに関連するプラットフォーム別のストリーミングメディアアセットへのリファレンスのリストが、含まれます。 バンクをロードすると、メディアアセットがAddressables経由でロードされ、 Application.persistentDataPath フォルダにコピーされます。 同名のファイルがすでにフォルダ内にある場合は、両者のハッシュを比較します。異なるファイルであれば、そのファイルを、AssetBundleのファイルで上書きします。


このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう