继续在不同的场景中播放音频
在我的Unity项目中,有不同的菜单,每个菜单都是不同的场景。 每个场景都有用于控制音乐的按钮。
public void musicToggle(GameObject Off){ if (PlayerPrefs.GetInt ("Music") == 1) { musicPlayer.Stop (); Debug.Log ("Stop 2"); PlayerPrefs.SetInt ("Music", 0); Off.SetActive(true); } else { musicPlayer.Play (); Debug.Log ("Play 2"); PlayerPrefs.SetInt ("Music", 1); Off.SetActive (false); } }
这是我的musicTooglefunction。 在每个场景中音乐重新开始,在每个场景中,当我想打开/关闭音乐时,我点击一个部署此代码的按钮。 但是,我不希望音乐重新开始每一个场景变化,我希望它能够恢复,我希望能够控制每个场景中的音乐(打开/关闭)。 我怎样才能做到这一点 ?
我的回答是假设musicPlayer
变量是一种AudioSource
。
有两种方法可以做到这一点:
1.而不是使用musicPlayer.Stop
来停止音乐,
使用musicPlayer.Pause();
暂停然后音乐然后使用musicPlayer.UnPause();
取消暂停 这将确保音乐恢复而不是重新开始。
在这种情况下,您使用DontDestroyOnLoad(gameObject);
在每个带有AudioSource
这样当你在下一个场景时它们就不会被破坏。
2.存储AudioSource.time
值。 下次加载它然后在播放之前将其应用到AudioSource
。
您可以使用PlayerPrefs
执行此操作,但我更喜欢使用json和DataSaver
类进行存储。
保存 :
AudioSource musicPlayer; AudioStatus aStat = new AudioStatus(musicPlayer.time); //Save data from AudioStatus to a file named audioStat_1 DataSaver.saveData(aStat, "audioStat_1");
装载 :
AudioSource musicPlayer; AudioStatus loadedData = DataSaver.loadData("audioStat_1"); if (loadedData == null) { return; } musicPlayer.time = loadedData.audioTime; musicPlayer.Play();
您的AudioStatus
课程:
[Serializable] public class AudioStatus { public float audioTime; public AudioStatus(float currentTime) { audioTime = currentTime; } }
您将需要创建一个单例类并在第一个场景中实例化它,然后您可以将它传递到各种场景,如此统一答案中所述: http : //answers.unity3d.com/answers/12176/view.html