장면을 전환해도 배경 음악을 계속 재생하는 방법

Unity에서 사운드를 재생하는 간단한 방법은 Audio Source 게임 객체에 Play On Awake 속성과 Loop 속성을 켜면 됩니다.

그러나 Scene에서 Scene으로 천이하는 경우와 BGM의 게임 오브젝트가 사라져 버리기 때문에, 이 방법에서는 BGM을 계속해서 재생되지 않습니다.

이 문제를 해결하려면 배경 음악 게임 객체가 장면으로 전환해도 사라지지 않도록해야합니다.

그래서 Object 클래스 (MonoBehaviour의 기본 클래스)의 DontDestroyOnLoad 함수로 실현할 수 있습니다.

배경 음악에 대한 객체 만들기



배경 음악을위한 객체를 만들기 위해 먼저 빈 게임 객체를 만듭니다. 오브젝트명은 「MainSoundObject」로 해 둡니다.



음악 파일을 배경 음악에 객체에 추가



음악 파일을 배경 음악 객체에 추가합니다.
Asset에서 BGM으로 하고 싶은 WAV 파일을,
MainSoundObject로 드래그하여 추가합니다.

스크립트 추가



MainSoundObject에 스크립트를 추가합니다.
Script명은 「MainSoundScript」로 언어는 C#로 합니다.



BGM용 Script 작성



BGM용 Script에 DontDestroyOnLoad 함수를 추가하여 Scene이 전환해도 객체가 사라지지 않도록 합니다.
using UnityEngine;
using System.Collections;

public class MainSoundScript : MonoBehaviour {
    public bool DontDestroyEnabled = true;

    // Use this for initialization
    void Start () {
        if (DontDestroyEnabled) {
            // Sceneを遷移してもオブジェクトが消えないようにする
            DontDestroyOnLoad (this);
        }
    }

    // Update is called once per frame
    void Update () {

    }
}

전환 처리 작성



트랜지션 후에도 BGM이 울리는 것을 확인하기 위해 키를 누르면 Scene을 트랜지션하는 프로세스가 추가됩니다.
여기에서는 「A」를 누르면 천이하도록 합니다.
if ( Input.GetKeyDown(KeyCode.A) == true ) {
    Debug.Log("Now scene is " + Application.loadedLevelName);
    // Aキーを押すとシーンが遷移する
    Application.LoadLevel("Scene2");
}

마지막으로



Scene을 이동해도 BGM이 울리는 것을 확인할 수 있었습니다.

참고문헌



Unity에서 시작하는 2D 게임 만들기 철저 가이드 스마트폰에서도 즐길 수 있는 본격 게임 개발에 도전 Chapter13
Unity - Scripting API: Object.DontDestroyOnLoad

좋은 웹페이지 즐겨찾기