C# Unity从不同脚本访问PlayOneShot时抛出对象引用错误
我想播放一组音频剪辑中的音频剪辑,我尝试使用AudioSource.PlayOneShot使其工作,但无论出于何种原因,当我尝试从其他脚本访问PlayOneShot时,我在PlayOneShot所在的行中出现了“object reference not set to a instance of a object”错误。 因此,我创建了一个空的游戏对象,并将一个音频源组件连接到它和AudioControler脚本。脚本如下所示:C# Unity从不同脚本访问PlayOneShot时抛出对象引用错误,c#,unity3d,C#,Unity3d,我想播放一组音频剪辑中的音频剪辑,我尝试使用AudioSource.PlayOneShot使其工作,但无论出于何种原因,当我尝试从其他脚本访问PlayOneShot时,我在PlayOneShot所在的行中出现了“object reference not set to a instance of a object”错误。 因此,我创建了一个空的游戏对象,并将一个音频源组件连接到它和AudioControler脚本。脚本如下所示: public AudioClip[] clips; AudioSou
public AudioClip[] clips;
AudioSource audioSource;
private void Start(){
audioSource = GetComponent<AudioSource>();
}
public void PlaySound(){
audioSource.PlayOneShot(clips[0], 1);
}
公共音频剪辑[]剪辑;
声源;声源;
私有void Start(){
audioSource=GetComponent();
}
公共空间播放声音(){
音频源.PlayOneShot(剪辑[0],1);
}
然后我将一些音频片段附加到编辑器中的“clips”数组中,然后从另一个脚本调用PlaySound()方法,它给出了错误。你知道我做错了什么吗?问题是-从另一个脚本访问MonoBehavior脚本,我用
new
实例化它,这真是个糟糕的主意!不要试图用new
实例化从monobhavior
继承的脚本!!!这有助于我理解:
我用来解决这个问题的解决方案-我创建了一个Singleton类,并通过它访问了我想要的方法。这看起来是解决这个问题的最简单的办法。看看:
其他有用的主题:
我希望没有人会有这个问题,但如果你有,我希望我的错误至少能帮助你。public void PlaySound(){如果(音频源!=null)
音频源.PlayOneShot(剪辑[0],1);
}
我们可以在编辑器中看到您将剪辑附加到的位置吗?@Jake是的,我更新了问题。您是否尝试使用断点查看值?
array[0]
或AudioSource
是否为空?有一个很好的答案可以解释为什么new
不好。你可以在编辑器中创建你的对象,并在需要调用它的对象上拖动对它的引用,或者你可以研究制作一个audiomanager或@Jake,我感谢你的帮助!非常感谢。我现在将深入讨论这个问题。