バージョン
menu_open
Wwise Unity Integration Documentation
Unity WAAPI Client

バージョン2018.1より、Wwise Authoring API (WAAPI) のサポートをUnityインテグレーションに組み込みました(詳しくは Wwise Authoring API (WAAPI)を使用する を参照)。

AkWaapiClient というクラスが提供され、WAAPIに接続しWAAPIコールを開始するために使います。以下のラインで、WAAPIにport 8080のlocalhostを使い接続できます。

AkWaapiClient.Connect("127.0.0.1", 8080);

WAAPIコールを出しレスポンスを受領するには、JSON引数を構築しパースする必要があります。Unity JsonUtility クラスで、C::クラスとJSON文字列の間の翻訳が簡単にできます。以下のクラスが、JSON文字列をクラスから作成したり、その逆を行ったりするための機能を提供します。

public class WaapiJsonClassBase<T>
{
public override string ToString()
{
return JsonUtility.ToJson(this);
}
public static implicit operator string(WaapiJsonClassBase<T> obj)
{
return obj.ToString();
}
public static T Create(string FromJson)
{
return JsonUtility.FromJson<T>(FromJson);
}
}

次にこのクラスを拡張すれば、特定のWAAPIスキーマ用にC::ラッパーを提供できます。例えば、以下のクラスを使い、 ak.wwise.core.object.get へのコールのためのargとoptionのJSON文字列を構築できます(詳細は ak.wwise.core.object.get を参照)。

[System.Serializable]
public class ObjectGetArgs : WaapiJsonClassBase<ObjectGetArgs>
{
[System.Serializable]
public class From
{
public string[] id;
}
public From from = new From();
}
[System.Serializable]
public class CallOptions : WaapiJsonClassBase<CallOptions>
{
public string[] @return;
}

次に、以下のクラスを使い、結果をパースできます。

[System.Serializable]
public class CallReturn : WaapiJsonClassBase<CallReturn>
{
[System.Serializable]
public class ReturnContents
{
public string name;
public string type;
public string path;
}
public ReturnContents[] @return;
}

以下のコードを見ると、これらの例や、ほかの似たクラスを使い、WAAPに接続するシンプルなスクリプトを作成し、Wwiseでオブジェクトが作成されたときのためのコールバックを登録する方法が分かります。Wwiseをインテグレートした既存のUnityプロジェクトにこのコードを追加すると、Editorにメニューオプションが追加されるので、そこでWAAPIとの接続をテストできます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class WaapiJsonClassBase<T>
{
public override string ToString()
{
return JsonUtility.ToJson(this);
}
public static implicit operator string(WaapiJsonClassBase<T> obj)
{
return obj.ToString();
}
public static T Create(string FromJson)
{
return JsonUtility.FromJson<T>(FromJson);
}
}
[System.Serializable]
public class ProjectInfo : WaapiJsonClassBase<ProjectInfo>
{
[System.Serializable]
public class ProjectInfoDirectories
{
public string authoring;
public string bin;
public string help;
public string install;
public string log;
public string user;
}
[System.Serializable]
public class VersionInfo
{
public int build;
public string displayName;
public int major;
public int minor;
public string nickname;
public int schema;
public int year;
}
public int apiVersion;
public string branch;
public string configuration;
public string copyright;
public ProjectInfoDirectories directories;
public string displayName;
public bool isCommandLine;
public string platform;
public int processId;
public string processPath;
public VersionInfo version;
}
[System.Serializable]
public class ObjectCreatedJsonObject : WaapiJsonClassBase<ObjectCreatedJsonObject>
{
[System.Serializable]
public class subObject
{
public string id;
}
public subObject @object;
}
[System.Serializable]
public class ObjectGetArgs : WaapiJsonClassBase<ObjectGetArgs>
{
[System.Serializable]
public class From
{
public string[] id;
}
public From from = new From();
}
[System.Serializable]
public class CallOptions : WaapiJsonClassBase<CallOptions>
{
public string[] @return;
}
[System.Serializable]
public class CallReturn : WaapiJsonClassBase<CallReturn>
{
[System.Serializable]
public class ReturnContents
{
public string name;
public string type;
public string path;
}
public ReturnContents[] @return;
}
[System.Serializable]
public class WaapiTest : MonoBehaviour
{
public static void OnObjectCreated(ulong subID, string Json)
{
ObjectCreatedJsonObject CreatedObject = ObjectCreatedJsonObject.Create(Json);
if(CreatedObject != null)
{
string Result;
var Args = new ObjectGetArgs { from = new ObjectGetArgs.From { id = new[] { CreatedObject.@object.id } } };
var Options = new CallOptions { @return = new[]{ "name", "type", "path" } };
AkWaapiClient.Call("ak.wwise.core.object.get", Args, Options, out Result);
var ReturnedObject = CallReturn.Create(Result);
Debug.Log("New object of type " + ReturnedObject.@return[0].type + " named " + ReturnedObject.@return[0].name + " with ID " + CreatedObject.@object.id + " created at path " + ReturnedObject.@return[0].path);
}
}
[MenuItem("WWISE/TEST WAAPI")]
public static void WaapiClientTest()
{
if (AkWaapiClient.Connect("127.0.0.1", 8080))
{
Debug.Log("Connect Success!");
string WaapiResult = string.Empty;
bool res = AkWaapiClient.Call("ak.wwise.core.getInfo", "{}", "{}", out WaapiResult);
if (res)
{
var projectInfo = ProjectInfo.Create(WaapiResult);
Debug.Log(projectInfo);
}
else
{
Debug.Log("Call failed :(");
}
var Options = new CallOptions { @return = new[] { "id" } };
ulong subId = 0;
res = AkWaapiClient.Subscribe("ak.wwise.core.object.created", Options, OnObjectCreated, out subId, out WaapiResult);
if (res)
{
Debug.Log("Subscribe success!" + WaapiResult);
}
else
{
Debug.Log("Subscribe failed :(");
}
}
else
{
Debug.Log("Connect fail :(");
}
}
}

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

サポートは必要ですか?

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

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

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

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

Wwiseからはじめよう