버전
menu_open
Wwise Unity Integration Documentation
WAAPI 유틸리티

2018.1 버전부터 Wwise Authoring API (WAAPI) 지원이 Unity 통합 안에 내장됩니다 (더 자세한 설명은 Wwise Authoring API (WAAPI) 사용하기를 참조하세요). 2021.1 버전에서 Wwise Authoring API (WAAPI)는 Wwise Picker와의 더 나은 통합과 전반적인 사용을 쉽게 할 수 있도록 재설계되었습니다. Wwise Picker와 함께 WAAPI 사용하기에 대한 더 많은 정보는 해당 설명서 페이지인 Wwise Picker 에서 확인하실 수 있습니다.

  1. WAAPI 설정
    1. 문제 해결
  2. Unity에서 WAAPI 사용하기
    1. Waapi를 사용하여 Wwise Object 페치하기
    2. 토픽 구독하기
    3. 연결 해제
    4. Other WAAPI 명령어

WAAPI 설정

WAAPI 설정은 Project Settings > Wwise Editor > Wwise Authoring API 에서 찾을 수 있습니다.

Connect to Wwise 체크 상자가 선택되지 않았을 경우 WAAPI 기능이 비활성화됩니다. 기본적으로 WAAPI 클라이언트는 localhost (127.0.0.1)에서 포트 8080에 연결됩니다. WAAPI가 연결되어 있을 때에 이 설정을 변경할 경우 현재 연결이 닫히며 새로운 대상 주소로 연결을 시도합니다.

문제 해결

프로젝트에 연결하는 데에 문제가 있을 경우 다음의 잠재적 해결 방법을 참고해보세요:

  • Wwise Authoring에서 올바른 프로젝트가 열려 있는지 확인하세요.
  • Project Settings > Wwise Editor > Wwise Project에 있는 Wwise Project Path가 올바른지 확인하세요.
  • 여러 Wwise Authoring 인스턴스가 열려 있을 경우 그중 하나가 다른 하나의 WAAPI 포트를 막고 있을 수 있습니다.
  • Wwise Authoring에서 WAAPI가 활성화되어있으며 허용된 연결과 포트가 올바른지 확인하세요.
    • WAAPI 설정은 User Preferences에서 찾을 수 있습니다.

Unity에서 WAAPI 사용하기

AKWaapiClient 클래스는 웹소켓 연결을 사용하여 Wwise Authoring과 메시지를 주고받습니다. WAAPI 메시지는 JSON 오브젝트입니다. WAAPI 호출은 비동기적이며 WAAPI로의 호출이 GUI 스레드와 같은 스레드에서 올 수 있기 때문에 스레드에서의 응답을 기다릴 수가 없습니다. 또한 웹소켓 구현은 한 번에 한 반응만 기다릴 수 있기 때문에 WAAPI 클라이언트가 AkWaapiUtilities 클래스에 의해 래핑됩니다. 이 클래스는 WAAPI 요청을 생성하며 대기열에 더한 후 업데이트 루프를 사용하여 순차적으로 호출할 수 있는 기능을 제공합니다. WAAPI 요청은 비동기 함수 포인터 페이로드를 포함하는 WaapiCommand 안에 캡슐화됩니다. 명령어가 소비되면 페이로드가 실행됩니다.

AkWaapiUtilities에서 제공되는 함수가 여러분이 대부분 필요로 하는 것들을 충족시켜주어야 하지만, 제공되지 않은 특정한 방법으로 WAAPI를 사용하려고 할 경우 여전히 직접 구현할 수 있습니다. 더 자세한 내용은 Other WAAPI 명령어 를 참고하세요.

주의: 제공되는 대부분의 WAAPI 호출은 Wwise Authoring Query Language (Wwise 저작 대기열 언어, WAQL)를 사용합니다. WAQL에 대한 더 많은 정보는 WAQL 소개참조 페이지를 참고해 주세요.

Waapi를 사용하여 Wwise Object 페치하기

AkWaapiUtilities는 이미 Wwise 오브젝트를 페치할 수 있는 WAAPI 호출을 기본적으로 담고 있습니다.

이 호출은 리턴 옵션에서 지정된 속성이 담긴 오브젝트 목록을 리턴합니다. 리턴 옵션의 전체 목록은 WAAPI 설명서에서 찾을 수 있습니다.

Wwise Picker는 이러한 함수에 WwiseObjectInfoJsonObject를 템플릿 타입으로 사용합니다. 그런 다음 이 오브젝트는 AkWaapiUtilities.ParseObjectInfo에 의해 WwiseObjectInfo로 캐스트됩니다.

WwiseObjectInfo에 들어 있지 않은 오브젝트 속성을 페치하려면, 접근하고자 하는 속성에 대한 커스텀 클래스가 필요합니다. 예를 들어 Notes 입력란을 페치하려는 경우 다음과 같은 클래스를 생성할 수 있습니다:

public class WwiseObjectNotes
{
public string 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 클래스는 WAAPI를 사용하여 Wwise 오브젝트를 페치하고 Wwise Picker를 구성하는 많은 예시를 담고 있습니다.

토픽 구독하기

AkWaapiUtilities.Subscribe 를 사용하여 WAAPI 토픽으로 구독하세요. URI은 구독하는 토픽을 식별합니다. 콜백 인자는 토픽이 발행되었을 때 호출할 JSON 문자열 인자를 수락하는 함수입니다. handshakeCallback은 구독이 성공적으로 등록되었을 때에 호출됩니다. 이 호출은 구독 식별자를 담은 AkWaapiUtilities.SubscriptionInfo 오브젝트를 받습니다. 구독을 요청한 클래스에 이 정보가 저장되어 있어야 합니다.

주의: AkWaapiUtilities.Subscribe를 호출하는 클래스는 수명이 다한 후에 해당 구독을 제거해야 합니다. 이 작업은 AkWaapiUtilities.Unsubscribe 를 호출함으로써 실행됩니다.

이 통합에서 사용된 구독의 예시는 AkWwiseTreeWAAPIDataSource 클래스를 참고해 주세요.

사용 가능한 토픽에 대한 정보는 >Wwise Authoring API 참조에서 찾을 수 있습니다.

  • 대부분의 토픽 URI는 Uri.cs 안에서 찾을 수 있습니다

연결 해제

WAAPI 연결이 닫힐 때가 되면 (혹은 갑자기 닫혔을 경우) AkWaapiUtilities.Disconnection 델리게이트가 호출됩니다. 델리게이트의 불리언 매개 변수는 이 연결이 여전히 살아있는지의 여부를 나타냅니다.

참고:WAAPI 토픽으로 구독하는 클래스는 이 델리게이트를 바인드하여 연결이 끊기기 전에 구독 해제할 수 있게 해주어야 합니다.

Other WAAPI 명령어

AkWaapiUtilities 클래스는 Unity 안에서 WAAPI 프로젝트와 상호작용할 수 있게 해주는 다음의 추가 함수를 담고 있습니다:

이 명령어가 사용되는 예시는 AkWwisePicker와 AkWwiseTreeView에서 찾을 수 있습니다.

실행하려는 WAAPI 명령어가 이미 AkWaapiUtilities 안에 구현되어 있지 않을 경우 여전히 명령어를 직접 생성할 수 있습니다. WAAPI 호출을 만들고 응답을 수신하려면 반드시 JSON 인자를 생성하고 파싱해야 합니다.

이 응답에서 파싱할 것이 없는 명령어의 경우 AkWaapiUtilities.QueueCommand 를 사용하세요

이 응답에서 파싱해야 할 값이 있는 명령어의 경우 AkWaapiUtilities.QueueCommandWithReturnType<T> 를 사용하세요

Unity JsonUtility 클래스는 C# 클래스와 JSON 문자열을 쉽게 번역할 수 있게 해줍니다. 인자의 기본 클래스로 JsonSerializable을 사용하세요. 옵션은 반드시 JSON 문자열로 변환되어야 합니다.

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

그런 다음 특정 WAPPI 스키마의 C# 래퍼를 제공하도록 이 클래스를 확장할 수 있습니다. 이 클래스 확장의 사용 예시를 확인하려면 저희가 WAAPI를 사용하여 Event를 재생하고 트랜스포트에 구독하기 위해 필요한 스키마 클래스를 생성한 방식을 살펴보세요.

인자와 옵션 스키마

리턴된 오브젝트 스키마

이 스키마가 사용된 방식은 AkWaapiUtilities.TogglePlayWwiseEventAsync와 AkWaapiUtilities.CreateTransport에서 확인할 수 있습니다.

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

이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요