2017-08-23 12 views
0

プレーヤーがコインに衝突したときにサウンドを再生したいが、サウンドは再生されない。私は何の誤りもありません。私はAudio SourceとUnityのスクリプトにサウンドを添付しました。audio.PlayOneShotがUnityで動作しない

audio = GetComponent<AudioSource>();AudioSourceこのスクリプト(TriggerCoinが)に取り付けられ、このスクリプトまたはゲームオブジェクトに接続されていることを示しています。

using UnityEngine; 

[RequireComponent(typeof(AudioSource))] 
public class TriggerCoin : MonoBehaviour 
{ 

    //TODO 
    //Counter of collected coins 

    public AudioClip coinSound; 
    new AudioSource audio; 

    void Start() 
    { 
     audio = GetComponent<AudioSource>(); 
    } 


    void Update() 
    { 

    } 

    void OnTriggerEnter2D(Collider2D other) 
    { 
     GameObject gObj = other.gameObject; 

     if (gObj.CompareTag("Player")) 
      { 
       Debug.Log("You picked up coin!"); 
       audio.PlayOneShot(coinSound, 0.8f); 
       Destroy(gameObject);  
      } 
    } 
} 
+0

これは、クリップの再生が変更される前にゲームオブジェクトが破壊されている可能性があると考えられます。破壊を遅らせてください。 'Destroy(gameObject、1f); ' – ryeMoss

+0

それは、ありがとう! – abs

答えて

1

は、以下の問題が参照します。

その後は、オーディオを再生する:audio.PlayOneShot(coinSound, 0.8f);

、すぐにゲームオブジェクトを破棄:Destroy(gameObject);を。

破壊されたGameObjbectもAudioSourceを保持していますので、AudioSourceが死んでしまいます。

ソリューション:

を破壊しない、空のゲームオブジェクトにAudioSourceを取り付けます。 "AudioHolder"とし、オーディオを再生してみましょう。

GameObject obj = GameObject.Find("AudioHolder"); 

AudioSource aud = obj.GetComponent<AudioSource>(); 

aud.PlayOneShot(coinSound, 0.8f); 

注:

new AudioSource audio;を削除し、他の何かにオーディオの名前を変更します。これを行うことは良い考えです。

関連する問題