前提・実現したいこと
unityでhttps://blog.cfm-art.net/archives/573このサイトを参考にしながら2Dブロック崩しを作っています。
BarにBallが当たったとき、その角度によって跳ね返り方を変えようとしているのですが、collision.contact[0].point.xによって当たった時のボールの座標が取得できません。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
IndexOutOfRangeException: Index was outside the bounds of the array. Bar.OnCollisionExit2D (UnityEngine.Collision2D collision) (at Assets/Scripts/Bar.cs:22)
該当のソースコード
C#
1ソースコード 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.EventSystems; 6 7public class Bar : MonoBehaviour 8{ 9 public void OnTouch(BaseEventData arg) 10 { 11 PointerEventData e = arg as PointerEventData; 12 13 14 var transform = GetComponent<RectTransform>(); 15 var position = transform.position; 16 position.x = e.position.x; 17 transform.position = position; 18 } 19 20 21 void OnCollisionExit2D(Collision2D collision) 22 { 23 var tameshi = collision.contacts[0]; 24 Debug.Log(tameshi); 25 var point = collision.contacts[0].point.x - transform.position.x; 26 Debug.Log("衝突座標:" + collision.contacts[0].point); 27 Debug.Log("自機との差:" + point); 28 29 var rate = point / (GetComponent<RectTransform>().rect.width * .5f); 30 var ball = collision.contacts[0].collider.GetComponent<Ball>(); 31 32 ball.Rotate(rate * 30); 33 } 34} 35
試したこと
debug.logやunityにアタッチ機能を使って変数がどのように処理されているかを確認しました。そしたらやはり、collision.contacts[0]が取得できてないみたいです。
contacts[0]を使うことでcollisionが複数同時に取得したとき、0番目に当たったものを取得するということは理解しています。
エラー文から考えてこの配列がおかしいということはわかるのですが、contactsを始めて使うので勘違いや間違いがありましたら教えてください。
補足情報(FW/ツールのバージョンなど)
Unity2019.4.3f1
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー