[Unity] 3D 퍼즐 플랫포머 게임 개발-3

Connected Brain·2025년 3월 19일

Unity 3D를 활용한 Dungeon 만들기

필수요소

  1. 퍼즐 디자인
  2. 플레이어 캐릭터 및 컨트롤
  3. 퍼즐 해결 시스템
  4. 장애물 및 트랩
  5. 목표 지점
  6. 게임 진행 상태 및 저장
  7. 사운드 및 음악

사운드 및 음악

Coroutine의 사용

Coroutine - Unity 매뉴얼 보기

  • Coroutine이란 다수의 프레임에서 작업을 실행하도록 하기 위해 사용한다. 코루틴을 사용하면 코루틴을 실행하는 중간에 실행을 일시정지하고 다른 작업을 실시하다 다시 일시정지한 부분부터 작코루틴 실행을 이어서 할 수 있도록 한다.
  • 작업의 일시 정지 기준은 다음 프레임 또는 정해진 시간을 설정할 수 있다.
private AudioSource audioSource;
private AudioSource audioSource;

public void PlayWalkSound()
{
    //걷기 사운드 배열에서 무작위 소리를 재생
    int walkSoundIndex = Random.Range(0, walkSounds.Length);
    audioSource.PlayOneShot(walkSounds[walkSoundIndex]);
}
  • 걷기 효과음을 재생하는 메서드를 만들 때, 이처럼 구성하고 이것이 이동을 실시할 때마다 호출된다면 매 프레임마다 소리가 재생되어 소리가 겹치게 될 것이다.
IEnumerator PlayRandomWalkSound()
{
    //지정된 시간이 지날 때까지 대기
    yield return new WaitForSeconds(walkSoundDelay);
    //무작위 걷기 소리를 재생
    int walkSoundIndex = Random.Range(0, walkSounds.Length);
    audioSource.PlayOneShot(walkSounds[walkSoundIndex]);
}

yield return null : 다음 프레임에 이어서 다시 시작
yield return new WaitForSeconds(seconds) : seconds만큼의 초가 흐른 후 다시 시작
yield return new WaitForEndOfFrame : 모든 Update가 실행된 후 다시 시작

  • 코루틴을 사용해 걷기 소리의 정해진 지연시간이 지난 후 다시 걷기 소리를 재생하도록 하여 매 프레임마다 걷기 소리가 겹쳐서 재생되지 않고 일정한 간격으로 실행되게 할 수 있다.
public void PlayWalkSound()
{
    //사운드 재생 코루틴이 비어있을 때
    if (walkSoundCorutine == null)
    {
        //걷기 사운드 배열에서 무작위 소리를 재생
        int walkSoundIndex = Random.Range(0, walkSounds.Length);
        audioSource.PlayOneShot(walkSounds[walkSoundIndex]);
        //코루틴을 시작
        walkSoundCorutine = StartCoroutine(PlayRandomWalkSound());
    }
}

IEnumerator PlayRandomWalkSound()
{
    //지정된 시간이 지날 때까지 대기
    yield return new WaitForSeconds(walkSoundDelay);
    //무작위 걷기 소리를 재생
    int walkSoundIndex = Random.Range(0, walkSounds.Length);
    audioSource.PlayOneShot(walkSounds[walkSoundIndex]);
    
    //지정된 시간이 지날 때까지 대기
    yield return new WaitForSeconds(walkSoundDelay);
    walkSoundCorutine = null;
}
  • 최종적으로는 사운드를 재생하는 코루틴이 비어있을 때는 먼저 소리를 재생하고 이후 코루틴을 시작한다. 만약 이후 입력에서 아직 코루틴이 null이 아니면 소리 재생은 이루어지지 않는다.
  • 다시 일정 시간을 기다린 후 코루틴을 null로 만들어 다음 입력이 있을 때 사운드가 바로 재생될 수 있도록 한다.

정리

  • 코루틴을 사용해 다른 로직이 작동하고 있을 때 정해진 때에 동작을 실시하였다가 일시정지하는 기능을 구현할 수 있었다.
  • 이러한 상황 외에도 Update 대신 필요할 때만 실행하는 코루틴을 사용하여 Update 함수가 비대해지는 것을 막을 수 있으니 유용하게 활용해야겠다.

0개의 댓글