본문 바로가기

Today I Learned

[TIL][Unity] 오브젝트 충돌 시 효과음 출력

오브젝트 충돌 시 효과음 출력

오늘 팀 프로젝트를 진행하며 배경음악 및 효과음 넣기 파트를 맡아 진행하기로 하였다. 저번 개인 프로젝트를 진행하며 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