Sound Class 계층
사운드를 논리적으로 그룹핑하고 볼륨/피치를 계층적으로 제어하는 시스템
Sound Class란?
유사한 사운드를 그룹으로 묶어 일괄 제어하는 에셋
Sound Class(USoundClass)는 사운드를 논리적 카테고리로 분류하는 에셋입니다. "SFX", "Music", "Dialogue", "UI" 등으로 사운드를 그룹핑하면, 해당 그룹의 볼륨, 피치, 우선순위 등을 일괄적으로 제어할 수 있습니다.
Sound Class 주요 프로퍼티
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| Volume | float | 이 클래스의 기본 볼륨 배수 (0.0 ~ 1.0) |
| Pitch | float | 이 클래스의 기본 피치 배수 |
| Low Pass Filter Frequency | float | 로우패스 필터 컷오프 (Hz) |
| Default Submix | USoundSubmix* | 이 클래스의 사운드가 라우팅될 기본 Submix |
| Loading Behavior Override | ESoundWaveLoadingBehavior | 로딩 동작 오버라이드 |
| bAlwaysPlay | bool | Voice 한도 초과 시에도 항상 재생 |
| bApplyAmbientVolumes | bool | Ambient Zone 볼륨 영향 받을지 여부 |
Sound Class는 "논리적 분류"이고, Submix는 "신호 라우팅 경로"입니다. Sound Class의 Default Submix를 설정하면 두 시스템이 연결됩니다. Sound Class로 분류하고, Submix로 이펙트를 적용하는 것이 표준 워크플로우입니다.
계층 구조 설계
부모-자식 관계로 Sound Class를 조직하는 방법
Sound Class는 트리 구조로 계층을 형성합니다. 부모 클래스의 볼륨 변경은 모든 자식 클래스에 영향을 줍니다. 이를 통해 "전체 SFX 볼륨" 같은 광범위한 제어가 가능합니다.
권장 Sound Class 계층 구조
├─ SFX (Volume: 1.0)
│ ├─ Weapons
│ ├─ Footsteps
│ ├─ Impacts
│ └─ Ambient
├─ Music (Volume: 0.8)
│ ├─ BGM
│ └─ Stinger
├─ Dialogue (Volume: 1.0, bAlwaysPlay: true)
│ ├─ NPC
│ └─ Narration
└─ UI (Volume: 1.0)
// Sound Wave에 Sound Class 지정
// 1. Content Browser에서 Sound Wave 선택
// 2. Details > Sound Class 드롭다운에서 선택
// C++에서 런타임 Sound Class 변경
USoundWave* Wave = ...;
Wave->SoundClassObject = SFXSoundClass;
// Blueprint에서 사운드 재생 시 Sound Class 적용됨
// Sound Class의 Volume이 0.5이면, 모든 SFX가 절반 볼륨으로 재생
옵션 메뉴 볼륨 슬라이더 구현
Sound Class를 활용한 게임 설정 UI 연동
게임 옵션의 "마스터 볼륨", "효과음 볼륨", "음악 볼륨" 슬라이더는 Sound Class와 Sound Mix를 통해 구현합니다.
// Sound Mix를 통해 Sound Class 볼륨 조절
void UMyAudioSettings::SetSFXVolume(float Volume)
{
if (FAudioDevice* AudioDevice = GEngine->GetMainAudioDevice())
{
// Sound Mix Override로 Sound Class 볼륨 설정
AudioDevice->SetSoundMixClassOverride(
SettingsSoundMix, // USoundMix* (설정 전용 Mix)
SFXSoundClass, // USoundClass* (SFX 클래스)
Volume, // 볼륨 배수 (0.0 ~ 1.0)
1.0f, // 피치 배수
0.2f, // 페이드 인 시간
true // Submix에도 적용
);
}
}
// 게임 시작 시 Sound Mix 활성화
void UMyAudioSettings::InitAudioSettings()
{
UGameplayStatics::PushSoundMixModifier(
this, SettingsSoundMix);
}
볼륨 설정을 UGameUserSettings 또는 SaveGame에 저장하고, 게임 시작 시 로드하여 Sound Mix에 재적용하세요. Sound Class 볼륨 자체는 에셋이므로 런타임 변경이 영속되지 않습니다.
Sound Class와 MetaSounds 연동
MetaSound Source에서 Sound Class를 활용하는 방법
MetaSound Source 에셋에도 Sound Class를 지정할 수 있습니다. MetaSound Source의 Details 패널에서 Sound Class 프로퍼티를 설정하면, 해당 Sound Class의 볼륨/믹싱 규칙이 적용됩니다.
| 설정 위치 | 적용 대상 | 우선순위 |
|---|---|---|
| MetaSound Source > Sound Class | 에셋 기본값 | 낮음 |
| Audio Component > Sound Class Override | 인스턴스별 오버라이드 | 높음 |
| PlaySoundAtLocation > 파라미터 | 일회성 재생 시 | 높음 |
자식 Sound Class는 부모의 볼륨/피치를 곱셈으로 상속합니다. Master(0.8) > SFX(0.9) > Weapons(1.0)이면, 최종 Weapons 볼륨은 0.8 * 0.9 * 1.0 = 0.72입니다.
핵심 요약
- Sound Class는 사운드를 논리적 카테고리로 분류하여 볼륨/피치를 일괄 제어하는 에셋이다
- 트리 구조의 부모-자식 계층으로 조직하면, 부모 볼륨 변경이 모든 자식에 전파된다
- 옵션 메뉴의 볼륨 슬라이더는 Sound Mix + Sound Class 조합으로 구현한다
- Sound Class의 Default Submix를 설정하면 자동 라우팅이 적용된다
- 자식 클래스는 부모의 볼륨을 곱셈으로 상속한다
도전 과제
배운 내용을 직접 실습해보세요
Master > SFX, Music, Voice, UI의 4가지 Sound Class 계층을 만드세요. SFX 하위에 Footstep, Weapon, Environment 서브클래스를 추가하고, 각 클래스에 적절한 Volume과 Priority를 설정하세요.
옵션 메뉴에서 Master, SFX, Music, Voice 볼륨을 슬라이더로 제어하는 UI를 구현하세요. USoundMix::SetSoundMixClassOverride()를 사용하여 Sound Class별 볼륨을 실시간으로 조절하세요.
게임 상태에 따라 Sound Class의 Volume과 Pitch를 자동으로 조절하는 시스템을 구현하세요. 전투 시 Music 볼륨 증가, 대화 시 SFX 볼륨 감소, 메뉴에서 Game Sound 뮤트 등의 규칙을 Sound Mix로 관리하세요.