Box Collider2DとCircle Colider2Dをつけたゲームオブジェクトに対して衝突判定を行い、OnCollisionEnter2Dを用いて処理を行いたいのですが、衝突したのがBox Collider2D か Circle Colider2D かを判別して処理を分けるということは可能でしょうか?可能であれば実装方法の解説をお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
お二人の案の他にも、直球ではありますが型による判定でもいいんじゃないでしょうか。
lang
1private void OnCollisionEnter2D(Collision2D other) 2{ 3 var col = other.collider; 4 5 if (col is CircleCollider2D) 6 { 7 Debug.Log($"{nameof(CircleCollider2D)}です"); 8 } 9 else if (col is BoxCollider2D) 10 { 11 Debug.Log($"{nameof(BoxCollider2D)}です"); 12 } 13 else 14 { 15 Debug.Log($"{col.GetType().Name}です"); 16 } 17}
バリエーションとして、現行のUnityならパターンマッチングを用いたswitch分岐も可能だろうと思います。
lang
1private void OnCollisionEnter2D(Collision2D other) 2{ 3 var col = other.collider; 4 5 switch (col) 6 { 7 case CircleCollider2D circleCol: 8 Debug.Log($"{nameof(CircleCollider2D)}です"); 9 Debug.Log($"半径は{circleCol.radius}です"); 10 break; 11 case BoxCollider2D boxCol: 12 Debug.Log($"{nameof(BoxCollider2D)}です"); 13 Debug.Log($"サイズは{boxCol.size}です"); 14 break; 15 default: 16 Debug.Log($"{col.GetType().Name}です"); 17 break; 18 } 19}
投稿2021/06/11 10:21
総合スコア10811
0
当たるたびにGetcomponent走るのであんまりよくないですが
愚直にやるなら、TryGetComponent
で接触したオブジェクトにCircle Colider2D
がついているかどうかなどを確認するアプローチもあります。
※ Unityのバージョンが古い場合はGetComponent
で代用してください。
cs
1 2void Start(){ 3 var hoge = GetComponent<CircleColider2D>(); 4 if(hoge!=null){ Debug.Log("CircleColider2D ありました");} 5} 6
Component.TryGetComponent
https://docs.unity3d.com/ScriptReference/Component.TryGetComponent.html
投稿2021/06/11 05:57
総合スコア3302
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
オブジェクトにタグを持たせて、それで分岐させるというのはどうでしょう?
Box Collider2Dがついているオブジェクト → "Box"タグ
Circle Colider2Dがついているオブジェクト → ”Circle”タグ
C#
1//OnCollisionEnter2D内 2if(collision.gameobject.tag == "Box") 3 Debug.Log("Box Collider2Dです"); 4if(collision.gameobject.tag == "Circle") 5 Debug.Log("Circle Colider2Dです");
投稿2021/06/11 05:14
総合スコア5
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/12 06:37