Unity中实现在切换场景时控制音乐的同步播放

测试:新建两个场景命名为Test1.sence和Test2.sence

(1)在Test1中新建一个空物体,在该物体上添加AudioSource,并赋予音乐文件,将此物体做成prefab;

  在Test1中新建一个按钮,并给脚本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(音乐预设);在Test2.sence中与Test1.sence中使用同样的音乐控制按钮,并赋予Test.cs脚本。


你可能感兴趣的:(Unity3D)