C# Unity从不同脚本访问PlayOneShot时抛出对象引用错误

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

我想播放一组音频剪辑中的音频剪辑,我尝试使用AudioSource.PlayOneShot使其工作,但无论出于何种原因,当我尝试从其他脚本访问PlayOneShot时,我在PlayOneShot所在的行中出现了“object reference not set to a instance of a object”错误。 因此,我创建了一个空的游戏对象,并将一个音频源组件连接到它和AudioControler脚本。脚本如下所示:

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,我感谢你的帮助!非常感谢。我现在将深入讨论这个问题。