2017-02-19 21 views
0

私は1つの音に問題があります。これは私のコードです:NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません - UNITY SOUNDS

[RequireComponent(typeof(AudioSource))] 

パブリッククラスSoundManager:MonoBehaviour { のpublic static SoundManagerインスタンス。

private AudioSource source; 
public Dictionary<SOUND_TYPE,AudioClip> sounds; 
public enum SOUND_TYPE 
{ 
    DEATCH, 
    CATCHED 
} 

// Use this for initialization 
void Start() 
{ 
    source = GetComponent<AudioSource>(); 

    loadSounds(); 
} 

// Update is called once per frame 
void Update() 
{ 
} 

public void playSound(SOUND_TYPE type) 
{ 
    source.clip = sounds[type]; 
    source.Play(); 
} 

public void loadSounds() 
{ 
    //loading sounds 
    sounds.Add(SOUND_TYPE.DEATCH, Resources.Load<AudioClip>("Sounds/AccelerationLow")); 
} 

}

と私はsource.Add()と行でエラーが発生しています。

Error: NullReferenceException: Object reference not set to an instance of an object

私は何が起こっているのか、どのように修復できるのか分かりません。

答えて

1

あなたはsoundsのコンストラクタを忘れてしまった:

public Dictionary<SOUND_TYPE,AudioClip> sounds = new Dictionary<SOUND_TYPE,AudioClip>(); 
0

それはpublic Dictionary<SOUND_TYPE,AudioClip> soundsが初期化されていないか、またはヌルの値が初期化されたことを意味します。この辞書を初期化するには、コンストラクタを作成するか、この辞書をstartメソッドで初期化します。sindsソースが初期化されます。空の辞書の使用を初期化するために

Dictionary<SOUND_TYPE,AudioClip> sounds = new Dictionary<SOUND_TYPE,AudioClip>();

void Start() 
{ 
    source = GetComponent<AudioSource>(); 
    sounds = new Dictionary<SOUND_TYPE,AudioClip>();` 
    loadSounds(); 
} 

public void loadSounds() 
{ 
    Start() 
    //loading sounds 
    sounds.Add(SOUND_TYPE.DEATCH, Resources.Load<AudioClip>("Sounds/AccelerationLow")); 

} 
関連する問題