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

来源:互联网 发布:文华财经看盘软件 编辑:程序博客网 时间:2024/05/29 10:12

测试:新建两个场景命名为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<AudioSource>().audio;        music.volume = 1.0f;        if (flag)        {            this.GetComponentInChildren<UISprite>().spriteName = "MusicON";//使用NGUI时同步按钮图片            //music.Play();            audioCtrl.IsMute = false;   //传递当前音效为静音状态        }        else        {            this.GetComponentInChildren<UISprite>().spriteName = "MusicOFF";            //music.Stop();            audioCtrl.IsMute = true;    //传递当前音效为播放状态        }    }    void OnClick()    {        //当播放状态为true时执行播放,并将标记设置为true        if (!flag)        {            this.GetComponentInChildren<UISprite>().spriteName = "MusicON";            music.Play();            flag = true;            audioCtrl.IsMute = false;        }        else        {            this.GetComponentInChildren<UISprite>().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脚本。


0 0