前提・実現したいこと
平面の床を設置し、その上をUnityちゃんが動き、障害物を避けるゲームを製作しています。その際に、平面から落ちないように、空のオブジェクトで透明な壁を作り、衝突判定を行い、音を鳴らしたいと考えている
発生している問題・エラーメッセージ
ArgumentNullException: Value cannot be null. Parameter name: source UnityEngine.AudioSource.PlayOneShot (UnityEngine.AudioClip clip, System.Single volumeScale) (at <41c3f0db5b294ee7952c69a689436367>:0) UnityEngine.AudioSource.PlayOneShot (UnityEngine.AudioClip clip) (at <41c3f0db5b294ee7952c69a689436367>:0) Wall.OnCollisionEnter (UnityEngine.Collision collision) (at Assets/Wall.cs:24)
このエラーメッセージが表示され、ゲームがフリーズし、ゲームタブからシーンタブに移動してしまう
該当のソースコード
C#
1public class Wall : MonoBehaviour 2{ 3 public AudioClip sound2; 4 AudioSource audioSource; 5 void Start() 6 { 7 audioSource = GetComponent<AudioSource>(); 8 } 9 10 void Update() 11 { 12 13 } 14 15 void OnCollisionEnter(Collision collision) 16 { 17 if (collision.gameObject.tag == "Player") 18 { 19 //Destroy(gameObject, 0.5f); 20 audioSource.PlayOneShot(sound2); 21 Debug.Log("壁に接触"); 22 } 23 }
試したこと
RIgidbodyをコンポーネント追加してみたが、壁をすり抜けてしまう
音を鳴らすことをやめると、接触判定がうまくいく
補足情報(FW/ツールのバージョンなど)
Unity(2019.4.22f1)
visual stdio2015
回答1件
あなたの回答
tips
プレビュー