Unityではシーン切り替え時に音楽の同期再生を制御

2074 ワード

テスト:Test 1という名前の2つのシーンを新規作成します.senceとTest 2.sence
(1)Test 1に空の物体を新規作成し,その物体にAudioSourceを追加し,音楽ファイルを付与し,その物体をprefabとする.
Test 1にボタンを新規作成し、スクリプトTestを作成します.cs、内容は以下の通りです.
private AudioSource music;
    private static bool flag = false;   // 
    private AudioCtrl audioCtrl;

    private GameObject backMusic;
    public GameObject prefabBackMusic;
    
    void Awake()
    {
        backMusic = GameObject.FindGameObjectWithTag("sound");
        if (backMusic == null)
        {
            backMusic = (GameObject)Instantiate(prefabBackMusic);
        }
    }

    void Start()
    {
        audioCtrl = new AudioCtrl();    // 
        music = backMusic.GetComponent().audio;
        music.volume = 1.0f;
        if (flag)
        {
            this.GetComponentInChildren().spriteName = "MusicON";	// NGUI 
            //music.Play();
            audioCtrl.IsMute = false;   // 
        }
        else
        {
            this.GetComponentInChildren().spriteName = "MusicOFF";
            //music.Stop();
            audioCtrl.IsMute = true;    // 
        }
    }

    void OnClick()
    {
        // true , true
        if (!flag)
        {
            this.GetComponentInChildren().spriteName = "MusicON";
            music.Play();
            flag = true;
            audioCtrl.IsMute = false;
        }
        else
        {
            this.GetComponentInChildren().spriteName = "MusicOFF";
            music.Stop();
            flag = false;
            audioCtrl.IsMute = true;
        }
    }
上記のスクリプトのAudioCtrlは、次のようなクラスです.
// 、 
public class AudioCtrl
{
    public static bool isMute;
    public bool IsMute
    {
        get { return isMute; }
        set { isMute = value; }
    }
}
メインシーンでは、音楽オブジェクトのプリセットがシーンに保持されないことに注意してください.loadlevelシーンではDon'tDestroyObject(音楽プリセット)が必要です.Test 2.sence中とTest 1.senceでは同様の音楽制御ボタンを用いる、Testを付与する.csスクリプト.