오늘은 FPS 게임처럼 방향이나 거리감에 따라 소리가 달라지는 3D 사운드를 Unity에서 구현해봤다.
플레이어가 소리에 가까워지면 소리가 커지고, 멀어지면 작아지도록 만들기
왼쪽/오른쪽 등 소리의 방향성을 적용하기
유니티에서는 기본적으로 3D 사운드를 구현할 수 있는 기능을 제공한다.
핵심은 AudioSource + AudioListener + Spatial Blend(3D) 세 가지다.
말 그대로 "귀" 역할을 하는 컴포넌트
일반적으로 플레이어의 카메라에 붙어있음
사운드를 발생시키는 컴포넌트
소리를 내고 싶은 오브젝트에 붙임 (ex. 적, 총 등)
Spatial Blend 값을 1 (3D) 로 설정하면 위치 기반 사운드가 된다


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SoundTest : MonoBehaviour
{
public AudioClip growlClip;
private AudioSource audioSource;
private void Awake()
{
audioSource = GetComponent<AudioSource>();
}
void Start()
{
audioSource.clip = growlClip;
audioSource.spatialBlend = 1.0f; // 3D 사운드
audioSource.minDistance = 1.0f;
audioSource.maxDistance = 15f;
audioSource.rolloffMode = AudioRolloffMode.Logarithmic;
audioSource.Play();
}
}
Spatial Blend:
0이면 2D 사운드, 1이면 3D 사운드
방향/거리 등에 따라 소리의 감쇠 및 방향성 적용됨
Min Distance / Max Distance:
Min Distance보다 가까우면 최대 볼륨
Max Distance보다 멀면 거의 안 들림
Rolloff Mode:
소리 나는 오브젝트에 가까이 가면 점점 커지고,
멀어질수록 작아지는 게 확실히 느껴짐
이어폰으로 들으면 방향감도 정확하게 느껴짐 (왼쪽/오른쪽 구분됨)
처음에는 복잡할 줄 알았는데, 생각보다 간단하게 구현됐다.
Spatial Blend 하나만 바꿔줘도 꽤 현실감 있는 공간 사운드를 만들 수 있었다.
나중에 실내/실외 구분을 위한 Reverb Zone이나 벽 뒤에 있을 때 소리를 줄이는 Occlusion 기능도 추가해보고 싶다.