DontDestroyOnLoad
是 Unity 引擎中的一个方法,用于确保指定的 GameObject(及其子对象)在场景切换时不会被销毁。这在处理音频播放器等需要在多个场景间持续存在的对象时非常有用。然而,当你需要在新的场景中更改这些对象的 AudioClip 时,可能会遇到一些挑战。
DontDestroyOnLoad
创建音频播放器的单例实例,确保全局唯一。当你尝试在新的场景中更改 DontDestroyOnLoad
ed 的 AudioClip 时,可能会发现更改没有生效,因为该对象已经在之前的场景中被初始化,并且其 AudioClip 属性没有被更新。
DontDestroyOnLoad
ed 对象。AudioSource audioSource = FindObjectsOfType<AudioSource>().FirstOrDefault(a => a.name == "YourAudioSourceName");
if (audioSource != null)
{
audioSource.clip = newClip;
audioSource.Play();
}
public class AudioManager : MonoBehaviour
{
public static AudioManager Instance { get; private set; }
private AudioSource audioSource;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
audioSource = GetComponent<AudioSource>();
}
public void ChangeClip(AudioClip newClip)
{
audioSource.clip = newClip;
audioSource.Play();
}
}
然后在新的场景中调用 AudioManager.Instance.ChangeClip(newClip);
来更改 AudioClip。
通过上述方法,你可以在新的场景中成功更改 DontDestroyOnLoad
ed 的 AudioClip。
领取专属 10元无门槛券
手把手带您无忧上云