質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

1396閲覧

unity 衝突判定

etcetera

総合スコア24

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/06/10 11:57

Box Collider2DとCircle Colider2Dをつけたゲームオブジェクトに対して衝突判定を行い、OnCollisionEnter2Dを用いて処理を行いたいのですが、衝突したのがBox Collider2D か Circle Colider2D かを判別して処理を分けるということは可能でしょうか?可能であれば実装方法の解説をお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

etcetera

2021/06/12 06:37

皆さん解答ありがとうございました!
guest

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

hogefugapiyo

総合スコア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

THETA97556919

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問