버전
menu_open
Wwise SDK 2023.1.3
Defining 사용자 지정 속성 정의하기

사용자 지정 속성을 이용하면 Wwise 오브젝트에 추가적인 정보를 입력할 수 있습니다. 사용자 지정 속성은 프로젝트 관리나 게임에서 사용하는 메타 데이터를 저장하는 데 쓰입니다.

사용자 지정 속성은 다음과 같은 곳에서 편집할 수 있습니다.

Wwise Authoring 사용자 인터페이스에서 Project > Project Settings > Custom Properties 메뉴를 이용하면 커스텀 속성을 직접 정의할 수 있습니다.
사용자 인터페이스를 이용하면 제한된 기능 세트에 접근할 수 있다는 점을 기억하세요. 이 커스텀 속성은 프로젝트 폴더 안에 있는 PROJECTNAME.wcustomproperties 파일에 저장됩니다 (PROJECTNAME은 WPROJ 파일과 동일한 이름임). 이 파일을 직접 수정하지 마세요.

완전한 기능 세트를 활성화하려면 다음 위치 중 한 XML 파일에서 커스텀 속성을 수동으로 정의하세요.

  • 'Add-ons\Properties' 폴더 아래 프로젝트 폴더에 들어있는 하나 또는 여러 개의 .wcustomproperties 파일
  • 'APPDATA%\Audiokinetic\Wwise\Add-ons\Properties' 폴더에 들어있는 하나 또는 여러 개의 .wcustomproperties 파일
  • 주요 Wwise 설치 폴더 아래 'Authoring\Data\Add-ons\Properties' 폴더에 들어있는 하나 또는 여러 개의 .wcustomproperties 파일
참고: .wcustomproperties 파일이 수정될 때마다 Wwise Project를 다시 로딩해야 속성이 업데이트됩니다. 커스텀 속성의 이름을 변경할 때 프로젝트의 내용이 자동으로 마이그레이션되지 않는다는 점에 유의하세요.
참고: 이름끼리 충돌할 경우, 맨 처음 로딩된 속성만 등록됩니다. 위에 지정된 순서대로 해당 속성이 로딩됩니다.
참고: 모든 커스텀 속성은 정의된 곳으로부터 독립적으로 프로젝트 로딩 시간에 로드됩니다.

오디오 오브젝트 타입의 커스텀 속성은 AK::SoundEngine::Query::GetCustomPropertyValue 를 이용해 게임 안에서 가져올 수 있습니다. 이 커스텀 속성은 각자 32 비트 데이터로 SoundBank에 내보내지며 32 비트 정수(AkInt32)나 32 비트 부동 소수(AkReal32)로 쿼리할 수 있습니다. bool이나 int16, Real64 같이 다른 타입은 XML에서 지정할 수 있으며 Wwise Authoring 애플리케이션에서 기본적으로 지원됩니다. 그러나 SoundBank 생성 시 지원 타입이 32 비트로 캐스팅됩니다. 문자열과 같이 숫자가 아닌 타입들은 SoundBank로 내보내지 않습니다.

참고: 대사 Event 오브젝트 또한 게임에서 쿼리할 수 있는 커스텀 속성을 지원하며, AK::SoundEngine::DynamicDialogue::GetDialogueEventCustomPropertyValue 를 참조합니다.

XML 파일의 콘텐츠

XML 설명 파일에는 다양한 오브젝트 타입에 추가될 수 있는 커스텀 속성에 대한 정보가 들어있습니다.

  • 다음을 포함한 속성 설명:
    • 속성 이름 (코드와 유지된 파일의 속성을 식별하는 데 사용되는 문자열)
    • 속성 타입
    • RTPC 지원
    • 기본 값
    • 사운드 엔진 속성 ID (사운드 엔진 플러그인에서 이 속성을 코드에 바인딩)
    • 범위 제한 또는 열거 제한
    • 다른 속성에 대한 종속성
    • 사용자 인터페이스 설명 요소

예제: wcustomproperties 파일

아래는 사운드 오브젝트의 추가 속성을 정의하는 간단한 커스텀 속성 XML 설명 파일의 예제입니다.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (C) Audiokinetic Inc. -->
<PluginModule>
<WwiseObject Name="Sound" CompanyID="1" PluginID="1">
<Properties>
<Property Name="MyCompany:Status" Type="int16" DisplayName="Status">
<DefaultValue>0</DefaultValue>
<Restrictions>
<ValueRestriction>
<Enumeration Type="int16">
<Value DisplayName="To do">0</Value>
<Value DisplayName="Done">1</Value>
<Value DisplayName="Verified">2</Value>
</Enumeration>
</ValueRestriction>
</Restrictions>
</Property>
<Property Name="MyCompany:IsReady" Type="bool" DisplayName="Is Ready">
<DefaultValue>false</DefaultValue>
<AudioEnginePropertyID>2</AudioEnginePropertyID>
</Property>
<Property Name="MyCompany:MyPriority" Type="int32" DisplayName="My Priority">
<DefaultValue>50</DefaultValue>
<AudioEnginePropertyID>6</AudioEnginePropertyID>
<Restrictions>
<ValueRestriction>
<Range Type="int32">
<Min>1</Min>
<Max>100</Max>
</Range>
</ValueRestriction>
</Restrictions>
</Property>
<Property Name="MyCompany:CoolDownDelay" Type="Real64" DisplayName="Cool Down Delay">
<UserInterface UIMax="10" Step="0.5" Fine="0.1" Decimals="3" />
<DefaultValue>0</DefaultValue>
<AudioEnginePropertyID>7</AudioEnginePropertyID>
<Restrictions>
<ValueRestriction>
<Range Type="Real64">
<Min>0</Min>
<Max>600</Max>
</Range>
</ValueRestriction>
</Restrictions>
</Property>
<Property Name="MyCompany:GameId" Type="string" DisplayName="Game Id">
<DefaultValue></DefaultValue>
</Property>
<Property Name="MyCompany:ReadOnlyData" DocId="MyCustomProperty" DisplayName="ReadOnlyData" Type="int32">
<UserInterface ControlClass="ReadOnlyText" />
<DefaultValue>10</DefaultValue>
<Restrictions>
<ValueRestriction>
<Range Type="int32">
<Min>0</Min>
<Max>100</Max>
</Range>
</ValueRestriction>
</Restrictions>
</Property>
<Reference Name="MyCompany:StateGroup" DisplayName="State Group">
<AudioEnginePropertyID>10</AudioEnginePropertyID>
<Restrictions>
<TypeEnumerationRestriction>
<Type Name="StateGroup" />
</TypeEnumerationRestriction>
</Restrictions>
</Reference>
</Properties>
</WwiseObject>
</PluginModule>

XML 설명 파일 헤더

이 XML 파일의 헤더 부분을 살펴보고 자세한 내용을 알아봅시다.

<?xml version="1.0" encoding="UTF-8"?>

어떤 XML 파일이든 첫 번째 라인에서는 XML 버전과 인코딩을 정의합니다. 여기서는, XML 버전은 1.0이고 인코딩은 UTF-8 입니다. 모든 Wwise 플러그인 설명 파일의 첫 번째 라인은 항상 위의 것과 같은 양식이어야 합니다.

PluginModule 구성 요소

<PluginModule>
...
</PluginModule>

이 문서의 주요 XML 요소는 PluginModule 라고 이름 붙였으며, 파일 안에 정의된 다양한 오브젝트 타입의 모든 정보를 담고 있습니다.

WwiseObject 구성 요소

<WwiseObject Name="Sound" CompanyID="1" PluginID="1">
<Properties>
...
</Properties>
</WwiseObject>

각 WwiseObject 요소는 해당 오브젝트 타입의 커스텀 속성을 정의합니다. Wwise 내에서 나타나지 않는 속성들을 제외하고 Name 및 CompanyID, PluginID는 Wwise가 알고 있는 것이어야 합니다. 사용 가능한 WwiseObject 구성 요소 목록을 보시려면 Wwise Object ID 를 참고하세요.

속성

모든 사용자 지정 속성에는 접두어가 있어야 합니다. 이는 Audiokinetic 내장 속성과 서드 파티 속성 및 자신의 커스텀 속성과 이름이 충돌하는 것을 방지하는 데 매우 중요합니다.

사용자 인터페이스에서 생성된 속성은 (Project > Project Settings > Custom Properties) 이름에 'Custom:'이라는 접두어가 붙어있습니다. 커스텀 속성을 .wcustomproperties 파일에서 직접 정의할 때에는 'Custom:' 접두어를 사용하지 마세요. 자신의 고유한 접두어를 사용하세요. WPROJECTNAME.wcustomproperties 안에 있는 속성만 'Custom:' 접두어를 사용할 수 있습니다.

회사와 제품 이름을 속성 이름의 접두어로 사용할 것을 강력히 권장합니다. 예시:

<Property Name="MyCompanyMyProduct:MyProperty" Type="string" DisplayName="Game Id">
<DefaultValue></DefaultValue>
</Property>

속성과 레퍼런스에 대한 더 자세한 정보는 Properties XML Description 을(를) 참고하세요.

Wwise Object ID

참고: 사운드(Music Track과 Container 포함)로부터 파생된 오브젝트만 커스텀 속성 값을 구하는 데 사용할 수 있습니다.

다음은 Wwise Authoring 애플리케이션 내 커스텀 속성을 정의하는 데 사용할 수 있는 모든 WwiseObject 타입입니다.

<WwiseObject Name="AcousticTexture" CompanyID="1" PluginID="72"></WwiseObject>
<WwiseObject Name="Action" CompanyID="1" PluginID="5"></WwiseObject>
<WwiseObject Name="ActorMixer" CompanyID="1" PluginID="8"></WwiseObject>
<WwiseObject Name="Attenuation" CompanyID="1" PluginID="41"></WwiseObject>
<WwiseObject Name="AudioDevice" CompanyID="1" PluginID="71"></WwiseObject>
<WwiseObject Name="AudioSource" CompanyID="1" PluginID="0"></WwiseObject>
<WwiseObject Name="AuxBus" CompanyID="1" PluginID="61"></WwiseObject>
<WwiseObject Name="BlendContainer" CompanyID="1" PluginID="29"></WwiseObject>
<WwiseObject Name="BlendTrack" CompanyID="1" PluginID="30"></WwiseObject>
<WwiseObject Name="Bus" CompanyID="1" PluginID="21"></WwiseObject>
<WwiseObject Name="ControlSurfaceBinding" CompanyID="1" PluginID="67"></WwiseObject>
<WwiseObject Name="ControlSurfaceBindingGroup" CompanyID="1" PluginID="68"></WwiseObject>
<WwiseObject Name="ControlSurfaceSession" CompanyID="1" PluginID="66"></WwiseObject>
<WwiseObject Name="Conversion" CompanyID="1" PluginID="55"></WwiseObject>
<WwiseObject Name="DialogueEvent" CompanyID="1" PluginID="46"></WwiseObject>
<WwiseObject Name="Effect" CompanyID="1" PluginID="17"></WwiseObject>
<WwiseObject Name="Event" CompanyID="1" PluginID="4"></WwiseObject>
<WwiseObject Name="ExternalSource" CompanyID="1" PluginID="57"></WwiseObject>
<WwiseObject Name="Folder" CompanyID="1" PluginID="2"></WwiseObject>
<WwiseObject Name="GameParameter" CompanyID="1" PluginID="23"></WwiseObject>
<WwiseObject Name="Language" CompanyID="1" PluginID="75"></WwiseObject>
<WwiseObject Name="MixingSession" CompanyID="1" PluginID="53"></WwiseObject>
<WwiseObject Name="Modifier" CompanyID="1" PluginID="15"></WwiseObject>
<WwiseObject Name="ModulatorEnvelope" CompanyID="1" PluginID="65"></WwiseObject>
<WwiseObject Name="ModulatorLfo" CompanyID="1" PluginID="64"></WwiseObject>
<WwiseObject Name="ModulatorTime" CompanyID="1" PluginID="78"></WwiseObject>
<WwiseObject Name="MultiSwitchEntry" CompanyID="1" PluginID="10000"></WwiseObject>
<WwiseObject Name="MusicClip" CompanyID="1" PluginID="60"></WwiseObject>
<WwiseObject Name="MusicClipMidi" CompanyID="1" PluginID="62"></WwiseObject>
<WwiseObject Name="MusicCue" CompanyID="1" PluginID="59"></WwiseObject>
<WwiseObject Name="MusicPlaylistContainer" CompanyID="1" PluginID="34"></WwiseObject>
<WwiseObject Name="MusicPlaylistItem" CompanyID="1" PluginID="36"></WwiseObject>
<WwiseObject Name="MusicSegment" CompanyID="1" PluginID="27"></WwiseObject>
<WwiseObject Name="MusicStinger" CompanyID="1" PluginID="38"></WwiseObject>
<WwiseObject Name="MusicSwitchContainer" CompanyID="1" PluginID="35"></WwiseObject>
<WwiseObject Name="MusicTrack" CompanyID="1" PluginID="28"></WwiseObject>
<WwiseObject Name="MusicTrackSequence" CompanyID="1" PluginID="58"></WwiseObject>
<WwiseObject Name="MusicTransition" CompanyID="1" PluginID="37"></WwiseObject>
<WwiseObject Name="Panner" CompanyID="1" PluginID="42"></WwiseObject>
<WwiseObject Name="Path" CompanyID="1" PluginID="11"></WwiseObject>
<WwiseObject Name="Platform" CompanyID="1" PluginID="69"></WwiseObject>
<WwiseObject Name="Position" CompanyID="1" PluginID="12"></WwiseObject>
<WwiseObject Name="Project" CompanyID="1" PluginID="3"></WwiseObject>
<WwiseObject Name="Query" CompanyID="1" PluginID="32"></WwiseObject>
<WwiseObject Name="RandomSequenceContainer" CompanyID="1" PluginID="9"></WwiseObject>
<WwiseObject Name="SearchCriteria" CompanyID="1" PluginID="33"></WwiseObject>
<WwiseObject Name="Sound" CompanyID="1" PluginID="1"></WwiseObject>
<WwiseObject Name="SoundBank" CompanyID="1" PluginID="18"></WwiseObject>
<WwiseObject Name="SoundcasterSession" CompanyID="1" PluginID="26"></WwiseObject>
<WwiseObject Name="State" CompanyID="1" PluginID="6"></WwiseObject>
<WwiseObject Name="StateGroup" CompanyID="1" PluginID="7"></WwiseObject>
<WwiseObject Name="Switch" CompanyID="1" PluginID="20"></WwiseObject>
<WwiseObject Name="SwitchContainer" CompanyID="1" PluginID="10"></WwiseObject>
<WwiseObject Name="SwitchGroup" CompanyID="1" PluginID="19"></WwiseObject>
<WwiseObject Name="Trigger" CompanyID="1" PluginID="40"></WwiseObject>
<WwiseObject Name="UserProjectSettings" CompanyID="1" PluginID="51"></WwiseObject>
<WwiseObject Name="WorkUnit" CompanyID="1" PluginID="25"></WwiseObject>
AkForceInline void Max(AkReal32 *in_pVolumesDst, const AkReal32 *in_pVolumesSrc, AkUInt32 in_uNumChannels)
Get max for all elements of two volume vectors, independently.
Type
IDs of temporary memory pools used by the sound engine.
Definition: AkMemoryMgr.h:336
AkForceInline void Min(AkReal32 *in_pVolumesDst, const AkReal32 *in_pVolumesSrc, AkUInt32 in_uNumChannels)
Get min for all elements of two volume vectors, independently.

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

지원이 필요하신가요?

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

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

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

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

Wwise를 시작해 보세요