【发布时间】:2019-02-16 12:35:29
【问题描述】:
我正在尝试找到一种在 Unity 3D 中播放背景音乐的好方法。我希望音乐在场景加载中保持一致。 Don't Destroy on load 很好并且可以工作,但是每次我加载同一个场景时,它都会创建另一个音乐游戏对象,因为场景本身就有游戏对象。我该如何解决我的问题?我是一个“初学者”(有点),所以我想要我能理解的代码。
【问题讨论】:
标签: c# unity3d background playback
我正在尝试找到一种在 Unity 3D 中播放背景音乐的好方法。我希望音乐在场景加载中保持一致。 Don't Destroy on load 很好并且可以工作,但是每次我加载同一个场景时,它都会创建另一个音乐游戏对象,因为场景本身就有游戏对象。我该如何解决我的问题?我是一个“初学者”(有点),所以我想要我能理解的代码。
【问题讨论】:
标签: c# unity3d background playback
在统一论坛上的一个问题的帮助下,我想我已经解决了我的问题。问题的链接在这里...
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
}
}
【讨论】:
我建议创建一个 audioSource 对象,然后为该对象创建一个脚本并在唤醒函数上执行以下操作:
void Awake() {
DontDestroyOnLoad(this.gameObject);
}
这将使背景音乐在场景之间继续播放。有关更多信息,您可以使用 Unity 关于 this function 的文档。
【讨论】:
我建议从“EazySoundManagerDemo”之类的资产开始。它需要一点重构和改进(即它使用 3 组音频和 3 组辅助功能,而不是一组带有 AudioPurpose 枚举以增加代码重用)。
然而,它确实解决了您遇到的基本问题,并且是使用音频管理器/层而不是简单地直接从您的游戏对象播放音频的一个很好的介绍。试一试,从中学习,然后对其进行调整或创建您自己的音频管理层。
祝你好运!
【讨论】: