GameDevelop/Unity팀프로젝트

[TeamProject1_2025.04.09] SoundManager, AudioSource, AudioClip

도도돋치 2025. 4. 9. 21:43
Contents 접기
728x90

사운드 관리

기존의 코드는 SoundManager에서 BGM만 관리하고 GameManager에서 카드가 뒤집어질때의 효과음을 플레이해주는 방법을 사용하였다. 그러나 Sound는 SoundManager에서 총괄하기로 해서 리팩토링을 진행했다!(많은 가르침을 주신 팀장, 팀원, 멘토님 감사합니다😄)

 

사운드를 어떻게 관리하면 좋을지 팀원분들과 논의를 많이했는데, SoundManageParent에서 AudioSource를 관리하고 SoundManger에서 이 AudioSource에 clip들을 갈아끼워주는 방식으로 관리하였다.

 

쉽게 설명해서 Audio Source는 CD플레이어, AudioClip은 CD와 같다.

(멘토님께 여쭤보니 Sound를 관리하는 방식은 개발자마다 다른데, 멘토님은 캐릭터관련 오디오면 캐릭터에다 붙이는 식으로 진행하신다고하셨다)

❓(Think)왜 AudioSouce를 나눠서 생성할까?
아까전에 Audio Source는 CD플레이어라고 했는데, 만약 CD플레이어가 BGM을 실행중인데 다른 CD를 넣으면 BGM이 꺼질것이다.
따라서 CD를 갈아낄 수 있는 기능에 맞는 CD플레이어가 필요하다.

 

우선 기본 구조를 살펴보면 크게 SoundManager와 SoundManageParent가 있다.

  • SoundManager: AudioSource, AdioClip총괄
  • SoundManageParent: AudioSource

 

AudioSource와 Clip

SoundManageParent에는 BackgroundBGM, FlipSound가 있다.

BackgroudBGM은 BGM을 실행해주는 CD플레이어,

FlipSound는 Card를 두개 뒤집었을때 일치하는 카드가 나올경우 Flip Success Sound Clip, 두 카드가 일치하지 않는 경우 Flip Fail Sound Clip이 실행되는 CD플레이어로 설정하였다.

 

BGM은 계속 실행되야 하니까 따로 빼주었고, FlipSound는 성공했을때/실패했을때 clip만 바꿔 실행시키면 돼서 AudioSouce를 하나만 붙여주었다.

 

SoundManager Script

 

아까 위에서 설명했듯이, Clip을 담을 수 있는 AudioSource를 2개 생성하였다.

[SerializeField] AudioSource bgmAudioSource;
[SerializeField] AudioSource flipSoundAudioSource;

 

그리고 AudioSource에 들어갈 Clip을 생성하였다.

[SerializeField] private AudioClip flipSuccessSoundClip; //카드 매치 성공시 사운드
[SerializeField] private AudioClip flipFailSoundClip; //카드 매치 실패시 사운드
[SerializeField] private AudioClip gameBGMClip; //게임BGM

 

시작할때 실행될 PlayGameBGM함수와 카드 매치 여부에 따라 실행시켜줄 사운드함수를 구현했다.

public void PlayGameBGM()	//BGM을 실행
{
    bgmAudioSource.clip = gameBGMClip;
    bgmAudioSource.Play();
}
public void FlipSuccessSound()  //성공시 실행
{
    flipSoundAudioSource.clip = flipSuccessSoundClip;
    flipSoundAudioSource.Play();
}
public void FlipFailSound()	//실패시 실행
{
    flipSoundAudioSource.clip = flipFailSoundClip;
    flipSoundAudioSource.Play();
}

또 다른 방법으로 clip을 매개변수로 받아와서 성공, 실패 따로 나눌 필요없이 함수를 하나만 만들어도 된다.

 

 

SoundManager

아까 스크립트에서 생성해준 AudioSource와 Clip들에 해당하는 오디오소스를 넣어주었다.

AudioSource는 소리를 재생시켜주는 역할을 하고, 각 소리들(Clip)을 받아서 재생한다.

동시에 실행을 못해서 오디오 소스를 두개로 나눈 것이다.

728x90