WAAPI 호출을 만들고 응답을 수신하려면 반드시 JSON 인자를 생성하고 파싱해야 합니다. Unity JsonUtility
클래스는 C# 클래스와 JSON 문자열을 쉽게 번역할 수 있게 해줍니다. 다음 클래스는 클래스에서 JSON 문자열을 만들고 JSON 문자열에서 클래스를 만드는 기능을 제공합니다.
그런 다음 특정 WAPPI 스키마의 C# 래퍼를 제공하도록 이 클래스를 확장할 수 있습니다. 예를 들어 다음 클래스를 사용하여 호출에 대한 인수와 옵션 JSON 문자열 ak.wwise.core.object.get
을 생성할 수 있습니다 (더 많은 정보는 ak.wwise.core.object.get을 참고하세요).
다음 클래스를 사용해서 결과를 파싱할 수 있습니다.
다음 코드는 몇몇 유사한 클래스와 함께 이러한 예시를 사용하여 WAAPI에 연결하고 Wwise에서 오브젝트가 생성될 때 호출을 등록하는 간단한 스크립트를 만드는 법을 보여줍니다. 이 코드를 Wwise가 통합된 기존의 Unity 프로젝트에 추가할 경우 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" } };
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()
{
{
Debug.Log("Connect Success!");
string WaapiResult = string.Empty;
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 :(");
}
}
}