团结 如何只有一个源音频?



我有一个带有以下代码的源音频:


public class Sound : MonoBehaviour {
Static Sound instance;

void Awake() 
{
if (instance != null)
{
Destroy(gameObject);
}

else
{
instance = this;
DontDestroyOnLoad(gameObject);
}
}

因此,当我更改场景时,音频再次开始播放。如何将其限制为只有 1?

编辑:我该如何解决这个问题? 我收到此错误 1 - 类、结构或接口成员声明中意外的符号instance' in class, struct, or interface member declaration 2 - Unexpected symbol;'

选项 1:

当涉及到这样的事情时,单例模式可能是你的最佳选择。单例模式的目的是将类限制为仅自身的一个实例。要了解有关该模式的更多信息,请参阅其上的 Wiki。

看起来您已经在这样做(在第一次编辑之后(,但您要更改的是代码中Static的大写。Staticstatic是两回事。为了你,你正在寻找static.这应该可以解决您的问题/错误,并允许您正确使用单例模式。

选项 2:

此外,如果您想避免典型的单例模式,另一种选择是在所有游戏对象中搜索任何包含您Sound类/组件的游戏对象。然后,如果场景中已经打开,则让尝试实例化的游戏对象自行销毁。您可以使用以下代码执行此操作:

public class Sound : MonoBehaviour 
{
void Awake() 
{
int numSoundInstances = FindObjectsOfType<Sound>().Length;
if (numSoundInstances > 1)
{
Destroy(this.gameObject);
}

else
{
DontDestroyOnLoad(this.gameObject);
}
}
}

在我看来,这比使用单例模式的效率要低得多。这是因为使用 FindObjectsOfType 会强制代码检查当前在游戏中的每个游戏对象。根据游戏中游戏对象的数量,这可能会对系统造成很大的负担。

相关内容

最新更新