사운드 관리
기존의 코드는 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)을 받아서 재생한다.
동시에 실행을 못해서 오디오 소스를 두개로 나눈 것이다.
'GameDevelop > Unity팀프로젝트' 카테고리의 다른 글
[TeamProject2_2025.05.11] 프로젝트 기획, 우리팀 규칙 (0) | 2025.05.11 |
---|---|
[TeamProject1_2025.04.11] 카드 게임 - 팀프로젝트 회고 (0) | 2025.04.11 |
[TeamProject1_2025.04.10] 코루틴(Coroutine), Invoke (0) | 2025.04.10 |
[TeamProject1_2025.04.08] 카드게임제작 - 카드뒤집기, 애니메이션 기능 (1) | 2025.04.08 |
[TeamProject1_2025.04.07] 팀 협업 도구 Notion, GitHub (1) | 2025.04.08 |