我在unity3d中遇到了一个奇怪的问题。 我想使用几个音频源来播放具有重叠效果的声音。因为我自己无法解释这个问题 - 我只尝试了一个AudioSource。 所以我有这个脚本:
public class audioOverlap:MonoBehaviour
{
private AudioSource sct;
public AudioClip clp;
void Start(){
sct=new AudioSource();
sct.clip=clp;//NullReferenceException!?
}
}
由于NullReferenceException-我试图找出原因。
void Start(){
sct=new AudioSource();
if(sct==null){Debug.Log("AudioSourceBug");/*gets executed-wtf???*/}
if(clp==null){Debug.Log("AudioClipBug");/*gets notexecuted-okay*/}
sct.clip=clp;//NullReferenceException!?
}
我知道NullReferenceException是什么 - 请不要在链接的问题不是一个有效的解决方案时将其标记为重复:
我是Unity的初学者,但不是C#。
答案 0 :(得分:3)
这是完全自然的C#,但它不会飞:
sct=new AudioSource();
Unity拥有一个基于工厂的组件驱动架构。 Unity不希望调用组件构造函数,而是要求AddComponent
将组件附加到特定的GameObject
:
sct = gameObject.AddComponent<AudioSource>();
有几个原因。首先,Unity需要每个Component
拥有一个GameObject
。其次,Unity的许多内置类实际上是代表由引擎底层本机代码层创建和管理的资源的shell。
答案 1 :(得分:0)
您是否尝试将audioSource添加到另一个对象(如子对象)? 也许问题是必须在一个对象上使用音频源。