版本
menu_open
Wwise Unity Integration Documentation
Unity WAAPI 客户端

自 2018.1 版本起,我们将对 Wwise Authoring API (WAAPI) 的支持嵌入到了 Unity Integration 中(有关详细信息,请参阅使用 Wwise Authoring API (WAAPI))。

同时,提供了 AkWaapiClient 类,可用于建立 WAAPI 连接和开始进行 WAAPI 调用。以下代码行将使用 localhost 的端口 8080 连接到 WAAPI。

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# 封装器。比如,利用以下类来构建参数和选项 JSON 字符串,以此调用 ak.wwise.core.object.get (有关详细信息,请参阅 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;
}

以下代码展示了如何运用这些示例(和相似的类)创建简单的脚本来连接到 WAAPI,并注册回调以便在 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 之旅