카테고리 없음

[TeamProject2_2025.05.15] SoundManager로 게임 사운드 시스템 구축

도도돋치 2025. 5. 15. 21:18
Contents 접기
728x90

개발 배경

로그라이크 게임을 만들면서 사운드 시스템이 필요했다.

  • 효과음이 겹치면 끊김
  • 씬이 전환되면 BGM이 끊김
  • 사운드 코드가 여기저기 퍼짐

사운드 시스템이 없을경우 이러한 문제들이 발생할 수 있기때문에  SoundManager를 만들기로 했다.

 

 

SoundManager 기본 구조

[Scene Root]
├── SoundManager  ← 빈 GameObject (SoundManager 스크립트 부착)
│   ├── BGMSource  ← 배경음 전용 AudioSource
│   ├── SFXSource  ← 효과음 전용 AudioSource
오브젝트 설명
SoundManager 사운드 매니저 스크립트가 붙은 GameObject
BGMSource 배경음용 AudioSource (loop, volume 조절 등)
SFXSource 효과음용 AudioSource (PlayOneShot 등 사용)

BGM과 SFX를 각각 관리하고, 싱글톤 패턴으로 어디서든 접근 가능하게 만들었다.

 

 

구현 포인트

  • DontDestroyOnLoad(gameObject); 추가해서 씬 전환에도 사운드 유지
  • BGM은 루프 재생
  • SFX는 PlayOneShot 사용해서 효과음 겹침 문제 해결
  • 싱글톤 패턴(Singleton<SoundManager>)으로 관리

 

 

사용 방법

상황 코드
BGM 재생 SoundManager.Instance.PlayBGMSource(battleBGMClip);
효과음 재생 SoundManager.Instance.PlaySFX(clip);
반복되는 사운드 SoundManager.Instance.PlaySFX(SFXType.Jump);

 

 

SFXType(Enum)으로 반복 사운드 관리

사운드가 많아지다 보니, 스크립트마다 Clip을 관리하면 번거로웠다.
그래서 효과음을 enum으로 관리하는 방법을 선택했다.

public enum SFXType
{
    Jump,
    Hit,
    Die,
    LevelUp,
    Click
}
SoundManager.Instance.PlaySFX(SFXType.Jump);

 

장점

  • 효과음 관리가 한 곳에 집중
  • 중복 선언 없이 코드 깔끔
  • 새로운 사운드 추가 시 enum과 switch문만 수정

 

같은 소리 100개 동시에 재생

총알이 발사될때마다 효과음을 내고 싶어서 동시에 효과음 소리를 재생할 수 있는 방법을 찾아보았다.

PlayOneShot을 사용하면 가능했다.

AudioSource.PlayOneShot(audioClip);
재생 방법 특징
audioSource.Play() ❌ 새로 재생하면 이전 소리가 끊김
audioSource.PlayOneShot() ✅ 같은 소리를 여러 번 겹쳐서 재생 가능
 

Unity는 PlayOneShot() 호출 시마다 내부적으로 인스턴스를 따로 생성해준다.
덕분에 100개 200개든 겹쳐서 효과음을 재생할 수 있다.


현실적인 한계

Unity 기본 세팅에서는 동시 재생 오디오 수에 제한이 있다:

  • 보통 32~256개
  • 초과되면 일부 사운드 재생 누락 가능

 대응법

방법 설명
AudioSource 풀링 AudioSource를 여러 개 준비해서 분산 재생
AudioMixer 설정 조정 Voice Limit 수치를 올려서 동시 재생 수 증가
재생 제한 로직 추가 같은 소리를 0.1초 딜레이로 제한하는 방법

실제 출시 게임은 AudioMixer + 풀링 조합을 많이 쓴다고 한다.

 

 

📖 요약

 

항목 결과
구조 싱글톤 SoundManager + BGM/SFX 분리
효과음 중복 재생 PlayOneShot() 사용으로 문제 해결
반복 사운드 관리 SFXType enum으로 깔끔하게
사운드 타이밍 Animation Event로 자연스러운 효과

 

 

직접 해보니 느낀 점

장점 단점
사운드 관리가 일관되고 깔끔해짐 사운드가 많아지면 SFXType 관리 부담
효과음 중첩 문제 해결 100개 이상 재생은 별도 튜닝 필요

 

이번에 SoundManager를 직접 만들면서 느낀 건:

처음에 시간 좀 써서 시스템화 해두면 나중에 정말 편하다는 것!

728x90