DontDestroyOnLoad 游戏对象中的连续音频源
Continuous AudioSource in DontDestroyOnLoad GameObject
我的游戏包含多个场景,我想在多个场景之间播放连续的游戏音乐。
为此,我编写了如下代码:
public static SoundManager Instance { get { return instance; } }
public AudioClip[] levelClips;
public AudioSource bgMusicAS;
//
private static SoundManager instance;
private bool isSoundEnable;
private void Awake ()
{
if (SoundManager.Instance != null) {
Destroy (gameObject);
return;
}
DontDestroyOnLoad (gameObject);
instance = this;
isSoundEnable = DataStorage.RetrieveSoundStatus ();
}
在游戏的主菜单中,执行上述代码脚本并创建 Don'tDestroyOnLoad AudioSource 游戏对象。但是当我进入游戏场景时,游戏音乐从最初开始,现在从我们离开主菜单场景的地方开始。
我希望这在游戏的所有场景之间都是连续的。请给我一些建议。
编辑:
这是我播放和暂停背景音乐的方式。
public void PlayLevelMusic (int musicId)
{
if (!isSoundEnable)
return;
bgMusicAS.clip = levelClips [musicId];
bgMusicAS.Play ();
}
public void StopLevelMusic ()
{
bgMusicAS.Pause ();
}
新场景启动时,我所有场景自动从第一个开始播放背景音乐。
作为解决方案,您可以使用 SceneManager.LoadSceneAsync() 并将您的音乐对象放在单独的场景中。
无论如何,DontDestroyOnLoad 将来可能会贬值(尽管不要引用我的话,我没有内部信息,这是猜测)
我在 Unity Question/Answer 部分通过 @Harinezumi 的帮助找到了解决这个问题的方法。
问题是 AudioSource.Play() 重置了 AudioClip 的进度。当您调用 PlayLevelMusic() 时,请检查所选剪辑是否与当前播放的剪辑不同,并且只有在不同时才更改并开始播放。像这样:
if (bgMusicAS.clip != levelClips[musicId]) {
bgMusicAS.clip = levelClips[musicId];
bgMusicAS.Play();
}
我的游戏包含多个场景,我想在多个场景之间播放连续的游戏音乐。
为此,我编写了如下代码:
public static SoundManager Instance { get { return instance; } }
public AudioClip[] levelClips;
public AudioSource bgMusicAS;
//
private static SoundManager instance;
private bool isSoundEnable;
private void Awake ()
{
if (SoundManager.Instance != null) {
Destroy (gameObject);
return;
}
DontDestroyOnLoad (gameObject);
instance = this;
isSoundEnable = DataStorage.RetrieveSoundStatus ();
}
在游戏的主菜单中,执行上述代码脚本并创建 Don'tDestroyOnLoad AudioSource 游戏对象。但是当我进入游戏场景时,游戏音乐从最初开始,现在从我们离开主菜单场景的地方开始。
我希望这在游戏的所有场景之间都是连续的。请给我一些建议。
编辑:
这是我播放和暂停背景音乐的方式。
public void PlayLevelMusic (int musicId)
{
if (!isSoundEnable)
return;
bgMusicAS.clip = levelClips [musicId];
bgMusicAS.Play ();
}
public void StopLevelMusic ()
{
bgMusicAS.Pause ();
}
新场景启动时,我所有场景自动从第一个开始播放背景音乐。
作为解决方案,您可以使用 SceneManager.LoadSceneAsync() 并将您的音乐对象放在单独的场景中。
无论如何,DontDestroyOnLoad 将来可能会贬值(尽管不要引用我的话,我没有内部信息,这是猜测)
我在 Unity Question/Answer 部分通过 @Harinezumi 的帮助找到了解决这个问题的方法。
问题是 AudioSource.Play() 重置了 AudioClip 的进度。当您调用 PlayLevelMusic() 时,请检查所选剪辑是否与当前播放的剪辑不同,并且只有在不同时才更改并开始播放。像这样:
if (bgMusicAS.clip != levelClips[musicId]) {
bgMusicAS.clip = levelClips[musicId];
bgMusicAS.Play();
}