Unity3d AudioSource not creatable

1.1k views Asked by At

I have a strange problem in unity3d. I want to use several audio sources for playing a sound with a overlapping effect. Because I can't explain the problem myself- I tried the same with only one AudioSource. So I have this script:

 public class audioOverlap:MonoBehaviour
 {
    private AudioSource sct;
    public AudioClip clp;
    void Start(){
       sct=new AudioSource(); 
       sct.clip=clp;//NullReferenceException!?
    } 
 }

Because of the NullReferenceException- I tried figuring out why.

    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!?
    } 

I know what a NullReferenceException is-please don't mark it as duplicate when the linked question isn't a working solution:

I'm a beginner with Unity, but not with C#.

2

There are 2 answers

2
rutter On BEST ANSWER

This is perfectly natural C#, but it won't fly:

sct=new AudioSource();

Unity has a component-driven, factory-based architecture. Instead of calling a component constructor, Unity wants you to call AddComponent to attach the component to a specific GameObject:

sct = gameObject.AddComponent<AudioSource>();

There are a few reasons for that. First off, Unity needs every Component to be owned by a GameObject. Second, many of Unity's built-in classes are actually shells representing resources that are created and managed by the engine's underlying native code layer.

0
Babak Gohardani On

have you tried adding the audioSource to another object (like a child object)? maybe the problem is having to audio sources on one object.