오브젝트 충돌 시 효과음 출력
오늘 팀 프로젝트를 진행하며 배경음악 및 효과음 넣기 파트를 맡아 진행하기로 하였다. 저번 개인 프로젝트를 진행하며 Audio Source 기능을 구현할 때 Scene의 AudioManager와 같은 오브젝트를 생성하여 이 오브젝트가 Audio 기능을 도맡아 수행하도록 구현하는 것이 좋다는 피드백을 받았다.
따라서 이번 프로젝트에서 효과음 출력을 AudioManager 오브젝트에서 담당하기로 하였다....만 장애물 오브젝트, 점수를 제공하는 코인 오브젝트 등 너무 다양한 AudioClip이 필요했다. 일단 내가 아는 방법을 먼저 적용하기로 하였다.
각 장애물 및 코인 오브젝트에는 Player 오브젝트와의 충돌을 감지하는 메서드가 존재한다.
public virtual void OnInteraction(GameObject ob)
{
if(ob.TryGetComponent<PlayerScript>(out var player))
{
player.hpCondition.DecreaseHP();
GameManager.Instance.DecreaseDifficulty();
gameObject.SetActive(false);
}
}
이 메서드에 AudioClip을 재생하는 코드를 넣어보았다. 결과는 대실패였다. 이미 경험했던 현상을 경험했다.
그것은 오브젝트에 AudioClip 재생을 명령하였으나 해당 오브젝트가 비활성화되어 명령을 수행하지 않은 것이다.
이 이유로 AudioManager를 생성하여 Audio 기능을 담당시키는 것인데, 이유를 잊었나보다.
이 문제를 해결하기 위해 AudioManager 오브젝트에 빈 AudioSource를 생성하고 Player와의 충돌이 생길 시에 충돌한 오브젝트에 저장되어 있는 AudioSource를 AudioManager의 AudioSource에서 재생하는 것으로 방법을 바꾸었다.
// AudioManager.cs
public void PlaySound(AudioSource _audioSource)
{
AudioClip clip = _audioSource.clip;
audioSource.clip = clip;
audioSource.Play();
}
그 결과 사운드가 재생되었다.
하지만 하나의 문제가 더 발생하였다. 게임의 속도가 빨라져 AudioClip의 재생이 채 끝나기 전에 다음 오브젝트와 충돌하면 효과음이 뚝뚝 끊어지는 매우 불편한 현상이 발생하였다. AudioSource를 하나만 사용하여 생기는 문제인 듯 하다. 다음 시간엔 이 현상을 해결하는 작업을 진행할 것이다.
게임을 구성하는 데에 양질의 컨텐츠도 중요하지만 BGM, 효과음과 같은 분야 또한 매우 중요하다고 생각한다. 어쨌든 사람들의 관심을 끌고 흥미를 유발할 수 있어야 하므로 외적인 부분이 중요하지 않을 수 없다. 어쩌면 컨텐츠 구성보다 기초가 되어야 하는 부분이라고 생각한다.
24.06.07 Today I Learned
'Today I Learned' 카테고리의 다른 글
[TIL][Unity] 확률 가중치 부여하기 (0) | 2024.06.12 |
---|---|
[TIL][Unity] PlayerPrefs 이용하기 (0) | 2024.06.10 |
[TIL][Unity] 인터페이스 (0) | 2024.06.05 |
[TIL][Unity] 싱글톤 패턴 (0) | 2024.06.04 |
[TIL][Unity] 오브젝트 풀링 (0) | 2024.06.03 |