バージョン
menu_open
Wwise Unity Integration Documentation
WAAPIユーティリティ

バージョン2018.1より、Wwise Authoring API (WAAPI) のサポートをUnityインテグレーションに組み込みました(詳しくは Using the Wwise Authoring API (WAAPI) を参照)。 バージョン2021.1でWwise Authoring API (WAAPI) のデザインを見直し、Wwise Pickerとのインテグレーションを改善して全体的に使いやすくしました。 WAAPIとWwise Pickerの関係や使い方について、詳しくはWwise Pickerのドキュメンテーションページをご覧ください: Wwise Picker .

  1. WAAPIの設定
    1. トラブルシューティング
  2. WAAPIをUnityで使う
    1. Waapiを使ってWwise Objectをフェッチする
    2. トピックにサブスクライブする
    3. Disconnection
    4. その他のWAAPIコマンド

WAAPIの設定

WAAPIの設定は、 Project Settings > Wwise Editor > Wwise Authoring API にあります。

ここで Connect to Wwise チェックボックスのチェックを外すと、WAAPI機能は無効になります。 デフォルトで、WAAPIクライアントはlocalhost (127.0.0.1)のPort 8080に接続します。 これらの設定をWAAPIに接続したまま変更すると、現在の接続が切れ、新しいターゲットアドレスに接続しようとします。

トラブルシューティング

プロジェクトにうまく接続できないときは、以下のソリューションを試してみてください:

  • Wwise Authoringで正しいプロジェクトが開いているかを、確認してください。
  • Project Settings > Wwise Editor > Wwise Project のWwise Project Pathが正しいかを、確認してください。
  • 複数のWwise Authoringインスタンスが開いた状態だと、そのうちの1つが、別のインスタンスのWAAPIポートをブロックしてしまうことがあります。
  • Wwise AuthoringでWAAPIが有効になっているか、そして許可された接続やポートが正しいかを、確認してください。
    • WAAPI設定は、User Preferencesにあります。

WAAPIをUnityで使う

AKWaapiClientクラスは、websocket接続を使ってWwise Authoringとメッセージを送受信します。WAAPIメッセージは、JSONオブジェクトです。 WAAPIコールは非同期的で、WAAPIに対するコールがGUIスレッドなどのスレッドからくることがあるので、返信を待つことはできません。 また、websocketの実装は一度に1レスポンスしか待ち受けることができないので、WAAPIクライアントはAkWaapiUtilitiesクラスにラップされています。 このクラスは、WAAPIリクエストを作成したりエンキュー(enqueue)したりする関数セットを提供し、アップデートループ中に順次、それらを呼び出します。 WAAPIリクエストは、非同期関数ポインタペイロードを含むたけのWaapiCommandにカプセル化されています。コマンドが消化されると、ペイロードが実行されます。

AkWaapiUtilitiesで提供される関数で、あなたのほとんどのニーズをカバーできるはずですが、作り込まれていない特別なWAAPIの使い方をしたければ、自分で実装することもできます。詳細は その他のWAAPIコマンド を参照してください。

注意: 提供されるWAAPIコールの大部分は、Wwise Authoring Query Language (WAQL) を使っています。 WAQLの詳細については、 WAQLの introduction ページや、 reference ページを参照してください。

Waapiを使ってWwise Objectをフェッチする

AkWaapiUtilitiesには、すでにWwiseオブジェクトをフェッチするためのWAAPIコールが入っています。

これらが、returnオプションで指定されたプロパティを含むオブジェクトのリストを返します。すべてのreturnオプションの一覧が、 WAAPI ドキュメンテーションにあります。

Wwise Pickerは、WwiseObjectInfoJsonObjectを、これらの関数のテンプレートタイプとして使います。これらのオブジェクトは、次にAkWaapiUtilities.ParseObjectInfo によって、WwiseObjectInfoにキャストされます。

WwiseObjectInfoに含まれていないオブジェクトプロパティをフェッチしたい場合は、アクセスしたいプロパティのためのカスタムクラスが必要です。 例えば、Notesフィールドだけが知りたい場合は、以下のようなクラスを作成します:

public class WwiseObjectNotes
{
public string notes;
}

次に、notesフィールドだけをリストしたReturnOptionsオブジェクトと、WwiseObjectNotesのリストを受け取るコールバックの、 AkWaapiUtilities.GetWwiseObject<T> (前述のほかの関数でも可)をコールします。

{
var callback = ( List<WwiseObjectNotes> notes ) => {
// do something
};
var options = new ReturnOptions(new string[] { "notes" });
var objectGuid = System.Guid.Empty(); //Put an actual guid from your project here
AkWaapiUtilities.GetWwiseObject<WwiseObjectNotes>( objectGuid, options, callback);
}

AkWwiseTreeWAAPIDataSource クラスには、Wwise Pickerで表示するために、WAAPIを使ってWwiseオブジェクトをフェッチする例が、多数入っています。

トピックにサブスクライブする

WAAPIトピックにサブスクライブするには、 AkWaapiUtilities.Subscribe を使います。 URIでサブスクライブするトピックを特定できます。コールバック引数は、トピックがパブリッシュされたときにコールするJSON文字列の引数を受け入れる関数です。 このサブスクリプションの登録が完了すると、handshakeCallbackをコールします。サブスクリプション識別子の入った AkWaapiUtilities.SubscriptionInfo オブジェクトを、受け取ります。 この情報は、サブスクリプションをリクエストしたクラスに保存します。

注意: ライフタイムの終わりにサブスクリプションをクリーンアップする責任は、AkWaapiUtilities.Subscribeをコールしたクラスにあります。 これは、AkWaapiUtilities.Unsubscribe をコールすることで行います。

このインテグレーションで使われているサブスクリプション例を見るには、 AkWwiseTreeWAAPIDataSource クラスを確認してください。

利用可能なトピックについてのさらなる情報は、 >Wwise Authoring API Reference にあります。

  • トピックURIの多くは、 Uri.cs にあります

Disconnection

WAAPI接続が終了する直前に(または急に終了したときに)、 AkWaapiUtilities.Disconnection デリゲートがコールされます。 デリゲートのブーリアンパラメータが、まだ接続が有効かどうかを示します。

注記: WAAPIトピックにサブスクライブしているクラスは、接続が切れる前にサブスクリプションを解除できるように、このデリゲートにバインドしておくべきです。

その他のWAAPIコマンド

AkWaapiUtilitiesクラスに含まれる以下の追加の関数を使い、Unity内からあなたのWAAPIプロジェクトとやり取りができます:

これらのコマンドの使用例が、AkWwisePicker や、AkWwiseTreeView にあります。

あなたが実行したいWAAPIコマンドが、まだ AkWaapiUtilities に実装されていなくても、自分でコマンドを作成することができます。 WAAPIコールを出しレスポンスを受領するには、JSON引数を構築しパースする必要があります。

レスポンスをパースする必要がないコマンドには、 AkWaapiUtilities.QueueCommand を使います

レスポンスに、パースする値があるコマンドには、 AkWaapiUtilities.QueueCommandWithReturnType<T> を使います

Unity JsonUtility クラスで、C::クラスとJSON文字列の間の翻訳が簡単にできます。JSON文字列に変換する必要のある引数やオプションのベースクラスとして JsonSerializable を使います。

public class JsonSerializable
{
public static implicit operator string(JsonSerializable o) => UnityEngine.JsonUtility.ToJson(o);
}

次にこのクラスを拡張すれば、特定のWAAPIスキーマ用にC::ラッパーを提供できます。使用例については、Eventを再生してトランスポートにサブスクライブするのに必要なスキーマクラスを、WAAPIを使ってどのように作成したかを、参考にしてください:

引数やオプションのスキーマ

リターンされるオブジェクトのスキーマ

AkWaapiUtilities.TogglePlayWwiseEventAsync や、 AkWaapiUtilities.CreateTransport で、これらがどのように使われているのかを見ることができます。

Base class for Json serializable objects. Implements implicit cast to string using UnityEngine....
Definition: AkWaapiHelper.cs:26
WAAPI options to specify the names of fields to return in a WAAPI request returning WwiseObjects.
Definition: AkWaapiHelper.cs:149
This class wraps the client that communicates with the Wwise Authoring application via WAAPI....
Definition: AkWaapiUtilities.cs:34

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

サポートは必要ですか?

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

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

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

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

Wwiseからはじめよう