如何让 Unity 3D 中的对象停留在场景中而不重新创建

How to have an object in Unity 3D that stays in scenes and does not recreate

我正在尝试寻找一种在 Unity 3D 中播放背景音乐的好方法。我希望音乐在场景负载中持续播放。 Don't Destroy on load 很好并且可以工作,但每次我加载同一个场景时,它都会生成另一个音乐游戏对象,因为场景本身就有游戏对象。我该如何解决我的问题?我是一个“初学者”(有点),所以我想要我能理解的代码。

我肯定会建议从 'EazySoundManagerDemo' 这样的资产开始。它需要一点重构和改进(即它使用 3 个音频数组和 3 组辅助功能,而不是一组带有 AudioPurpose 枚举以增加代码重用)。

然而,它确实解决了您遇到的基本问题,并且很好地介绍了使用音频管理器/层而不是直接从您的游戏对象播放音频。试一试,从中学习然后调整它或创建您自己的音频管理层。

祝你好运!

我建议创建一个 audioSource 对象,然后为此对象创建一个脚本,并在唤醒函数上执行此操作:

void Awake() {
    DontDestroyOnLoad(this.gameObject);
}

这将使背景音乐在场景之间不断播放。有关更多信息,您可以使用 Unity 关于 this function.

的文档

在统一论坛上的一个问题的帮助下,我想我已经解决了我的问题。问题的 link 在这里...

https://answers.unity.com/questions/982403/how-to-not-duplicate-game-objects-on-dontdestroyon.html

最佳答案是我正在使用的答案。

代码是这样的...

private static Player playerInstance;

void Awake(){
    DontDestroyOnLoad(this);

    if (playerInstance == null) {
        playerInstance = this;
    } else {
        Destroy(gameObject); // Used Destroy instead of DestroyObject
    }
}