[실전 게임 코드 리뷰 :: 유니티 클리커 게임] 12. Managers - SoundManager

Data:     Updated:

Category:

태그:

인프런에 있는 Rookiss님의 [실전 게임 코드 리뷰] 유니티 클리커 게임 강의를 듣고 정리한 게시글입니다.
🔔강의 보러가기 클릭

🧑‍💼 SoundManager.cs


keyboard

해당 클래스에서는 아래와 같은 Enum 클래스로 AudioSource를 관리한다.

public enum Sound
{
	Bgm,
	Effect,
	Speech,
	Max,
}

그리고 Dictionary<string, AudioClip> 형식의 Dictionary로 AudioClip들을 관리한다.

🏗️ [Constructor] SceneManagerEx

로그만 찍고 특별한 건 없다.

🖨️ [Method] Init()

먼저 @SoundRoot 라는 오브젝트가 하이어라키에 존재할 경우 GameObject 변수 _soundRoot에 할당한다.

만약 _soundRoot가 null 일 경우

@SoundRoot 라는 오브젝트를 새로 만들고 Object.DontDestroyOnLoad(Object target) 메서드로 오브젝트 파괴 방지를 해준다.

그리고 열거형 클래스의 내장 메서드 GetNames 을 호출해서 string[] 형식 값을 반환 받는다. 마지막 Max 는 열거형 요소의 Count를 뜻한다. 따라서 직접 사용하지 않을 것이기 때문에, soundTypeNames.Length - 1 까지만 for loop를 돌려서 GameObject를 생성 후 AddComponent 메서드로 AudioSource 컴포넌트를 추가 후 _audioSources 배열의 요소에 넣어준다.

_soundRoot가 null 이 아닐 경우

Sound.Bgm AudioSource를 loop 한다.

🖨️ [Method] Clear()

모든 AudioSource를 Stop() 하고 _audioClips Dictionary를 Clear 함.

🖨️ [Method] SetPitch()

public void SetPitch(Define.Sound type, float pitch = 1.0f)

인수로 받아온 pitch 할당, Default = 1.0f

🖨️ [Method] Play()

public bool Play(Define.Sound type, string path, float volume = 1.0f, float pitch = 1.0f)

Bgm, Effect, Speech 분기를 나눠서 audioSource Play

🖨️ [Method] Stop()

public void Stop(Define.Sound type)

인수로 받아온 type으로 해당하는 _audioSources 요소에 접근해 stop

🖨️ [Method] GetAudioClipLength()

public float GetAudioClipLength(string path)

path를 기준으로 가져온 AudioClip의 길이를 반환하는 메서드

🖨️ [Method] GetAudioClip()

private AudioClip GetAudioClip(string path)

해당 오디오 클립이 존재한다면 반환, 없으면 Resource.Load로 찾아와서 _audioClips Dictionary에 Add로 추가 후 반환


📢 오늘의 한마디


조금 꼬여있는 것 같은데…


이 게시물에는 지극히 주관적인 생각이 포함되어 있습니다. 
오류나 틀린 부분, 또는 수정해야 할 부분이 있다면 언제든지 댓글 혹은 메일로 지적 부탁드립니다.

Unity Lesson 1 Go to see other posts in the category

Comment