DontDestroyOnLoad only works for root GameObjects or components on root GameObjects. UnityEngine.StackTraceUtility:ExtractStackTrace () BGMManager:Start () (at Assets/jiaoben2/BGMManager.cs:19)
时间: 2024-02-13 16:03:00 浏览: 36
这个错误是因为DontDestroyOnLoad()函数只能用于根游戏对象或根游戏对象上的组件。如果你在非根游戏对象上使用了这个函数,Unity就会报这个错误。
要解决这个问题,可以将BGM管理器作为根游戏对象来处理。在场景中创建一个空对象,将BGMManager脚本和Audio Source组件添加到该对象上,并将其作为根对象的子对象。然后,在使用DontDestroyOnLoad()函数时,将该对象的父对象设置为null,这样它就会变成根游戏对象。
以下是一个示例代码,你可以将其添加到BGMManager脚本中:
```csharp
using UnityEngine;
public class BGMManager : MonoBehaviour
{
private AudioSource bgmAudioSource;
public AudioClip bgmClip;
void Start()
{
bgmAudioSource = gameObject.AddComponent<AudioSource>();
bgmAudioSource.clip = bgmClip;
bgmAudioSource.loop = true;
bgmAudioSource.Play();
// 将该对象的父对象设置为null,使它成为根游戏对象
transform.parent = null;
// 设置该对象为不销毁
DontDestroyOnLoad(gameObject);
}
}
```
这样,即使在切换场景时,BGMManager对象和它的Audio Source组件也会保留下来,BGM的播放也不会中止。