C# Unity如何只有一个源音频?
我有一个带有以下代码的源音频:C# Unity如何只有一个源音频?,c#,unity3d,C#,Unity3d,我有一个带有以下代码的源音频: public class Sound : MonoBehaviour { Static Sound instance; void Awake() { if (instance != null) { Destroy(gameObject); } else { instance =
public class Sound : MonoBehaviour {
Static Sound instance;
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
}
else
{
instance = this;
DontDestroyOnLoad(gameObject);
}
}
因此,当我改变场景时,音频再次开始播放。如何将其限制为只有1个
编辑:我如何解决这个问题?我得到这个错误
1-类、结构或接口成员声明中的意外符号
实例2-意外符号;'在类、结构或接口成员声明中选项1:
在这种情况下,单例模式可能是您的最佳选择。Singleton模式的目的是将一个类限制为其自身的一个实例。要了解有关该模式的更多信息,请参阅其上的
看起来您已经在这样做了(在第一次编辑之后),但是您要更改的是代码中Static
的大小写<代码>静态
和静态
是两件不同的事情。为了您的利益,您正在寻找静态
。这将修复您的问题/错误,并允许您正确使用单例模式
选项2:
另外,如果你想避免典型的单件游戏模式,另一个选择是在所有游戏对象中搜索你的Sound
Class/Component。然后,如果场景中已经出现了,让试图实例化的游戏对象销毁自己。可以使用以下代码执行此操作:
public class Sound : MonoBehaviour
{
void Awake()
{
int numSoundInstances = FindObjectsOfType<Sound>().Length;
if (numSoundInstances > 1)
{
Destroy(this.gameObject);
}
else
{
DontDestroyOnLoad(this.gameObject);
}
}
}
公共类声音:单一行为
{
无效唤醒()
{
int numSoundInstances=FindObjectsOfType().Length;
如果(numSoundInstances>1)
{
摧毁(这个游戏对象);
}
其他的
{
DontDestroyOnLoad(this.gameObject);
}
}
}
在我看来,这比使用单例模式的效率要低。这是因为使用FindObjectsOfType会强制代码检查当前游戏中的每个游戏对象。根据游戏中游戏对象的数量,这可能会对系统造成很大的负担。如何只制作一次?使用单件模式。拥有一个静态实例,如果已经设置,则销毁新实例。。参见例如,ist是用一个小的s
…Speedy@derHugo编写的。我还没来得及把答案贴出来就把那该死的评论拿出来了哈哈。因为你和我在同一时间得到了完全相同的答案。我希望有一种方法可以将代表与you@whathm哈哈,事实上第一次是在一个小时前:P别担心。。这个社区不是关于代表,而是帮助他人学习的人;)