유니티 개발할 때, 사운드 두 개를 이어서 나오게 하고 싶다면 어떻게 할까?


일단, 사운드를 위해서는 AudioSource와 AudioClip 두 개가 필요하다.


public AudioClip[] intro_music;
AudioSource soundSource;


오디오 클립은 각각의 사운드 파일을 의미하며, AudioSource를 통해 플레이 한다고 할 수 있다.


사운드를 넣기 위해 public으로 선언했다. AudioSource는 GetComponent로 호출할 수 있으므로 안 해도 된다.


    void Start () {
        soundSource = GetComponent<AudioSource>();
        StartCoroutine("Playlist");
    }


이것처럼, 해당 오브젝트에서 AudioSource를 선언한 뒤, 코루틴을 호출한다.


   
 IEnumerator Playlist() {
        soundSource.clip = intro_music[0];
        soundSource.Play();
        while (true)
        {
            yield return new WaitForSeconds(1.0f);
            if(!soundSource.isPlaying) {
                soundSource.clip = intro_music[1];
                soundSource.Play();
                soundSource.loop = true;
            }
        }
    }


먼저, 


배열 0번째를 실행한다. 


실행 방법은 AudioSource의 객체 audioSource를 이용한다. 그래서 AudioSource가 필요한 것이다.


audioSource.clip을 통해 어떤 사운드 데이터를 사용할 것인지 설정한다(배열 첫 번째)

audioSource.Play();를 통해 먼저 사운드를 재상한다. 따라서, 0번째 사운드가 실행된다.


그 다음 while문이 실행된다. true이므로 무한 반복.


yield를 통해 1.0초 대기 후 아래 코드를 수행한다.


만약 사운드가 진행이 되지 않는다면, -> isPlaying


 audioSource.isPlaying의 경우 bool형이다. 실행되고 있다면 True, 재생되고 있지 않다면 False


!가 붙었으므로 멈췄으면 if를 실행하라는 의미가 된다.


즉, 1초마다 체크 후 0번째 사운드가 종료되었으면 if문을 실행하라는 의미이다.


다시 audioSource.clip을 통해 1번째 사운드를 플레이한다.


audioSource.Play()을 통해 사운드를 재생한다.


audioSource.loop를 통해 반복 재생을 할 지 설정한다. true면 반복, false면 반복하지 않는다는 뜻이다.


이렇게 하게 되면


0번째 사운드는 1회 실행되고 1번째 사운드는 루프가 체크되어 무한반복된다.


이상으로 사운드를 이용하여 연속적으로 재생하는 방법을 알아보았다.


여러개의 사운드를 재생하는 것도 동일할 것이다. for문으로 i번 순서대로 돌릴 수도 있고,


랜덤으로 재생하고 싶다면 [i] 대신 Random.Range(0,xx)으로 하면 될 것이다.
















Posted by sungho88
,