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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

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

Q&A

1回答

2491閲覧

UnityでOnTriggerEnter2Dが呼ばれない原因を知る方法ありませんか?

yrema

総合スコア286

Unity

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

0グッド

0クリップ

投稿2018/04/24 21:53

編集2018/04/24 21:54

タイトルのとおりですが、空のシーンを作って簡単なスプライトで衝突判定させてみるとOnTriggerEnter2Dがちゃんと呼ばれるのに、現在開発中のゲームだと呼ばれなくて困っています。
なぜ呼ばれないのか原因を知る方法ないでしょうか?
ここに載せるには情報量が多すぎるので調べる方法が知りたいです。

▼確認事項
・プレイヤーオブジェクトにBox collider 2Dがアタッチされ、is Triggerがチェックされている。
・プレイヤーオブジェクトにRigidbody 2Dがアタッチされ、Body Type は Static、simulatedはチェックされている。
・プレイヤーオブジェクトのレイヤーはDefaultである。
・プレイヤーオブジェクトにアタッチされるているスクリプトにvoid OnTriggerEnter2D(Collider2D col) が定義されている。(ここのDebug文まで到達しない)
・壁オブジェクトにBox collider 2Dがアタッチされ、is Triggerがチェックされている。
・壁オブジェクトのレイヤーはDefaultである。
・Project Setting > Physics2D -> すべてのレイヤー(Default含む)がお互いに衝突判定できるチェックがついている。

▼環境
Unity2017 3.1f1

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

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

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

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

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

guest

回答1

0

壁オブジェクトにRigidbody2Dが付与されていないなら、
プレイヤーオブジェクトのRigidbody2DのBodyTypeをStaticにしているのが原因かと思います。

Rigidbody 2D - Unity マニュアル

Body Type: Static (静的)

静的な Rigidbody 2D どおしの衝突は、それらは動くようにデザインされていないためサポートされていません。

ゲームオブジェクトには、Rigidbody 2D コンポーネントを全く持たない Collider 2D コンポーネントを設定することです。そのような Collider 2D はすべて、内的には 1 つの隠れた 静的な Rigidbody 2D コンポーネントにアタッチされているとみなされます。

つまり、「プレイヤーも壁オブジェクトも静的Rigidbodyである→静的Rigidbody同士は衝突しない→ OnTriggerEnter2Dが呼ばれない」ということかと。


「呼ばれない原因を知る方法は?」という質問の直接的な回答としては
・マニュアルやリファレンスを熟読する:ツールの仕様を把握する
・検索する:バグや自分の使い方のミスを疑う
・パターンを変えつつ何度も試す:発生条件を絞り込む
となるかと思います。

投稿2018/04/25 01:16

編集2018/04/25 01:57
sakura_hana

総合スコア11427

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

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

yrema

2018/04/25 11:17 編集

困っていることについてはstaticが原因でした。ありがとうございます。「呼ばれない原因を知る方法は?」については、おっしゃってることはごもっともだと思いますが、具体的な方法を期待しています。例えば、OnTriggerEnter2Dの呼び出し元のソースをステップ実行することができれば、OnTriggerEnter2Dが呼ばれるかどうかの分岐条件が分かるはずです。しかしながら、これは残念なことにOnTriggerEnter2Dでステップアウトしても呼び出し元に飛べませんでした。そういった具体的な方法があれば、とても嬉しいです。
sakura_hana

2018/04/26 07:02

OnTriggerEnter2DはUnity内部から呼び出されています。 その部分のステップ実行は通常の手段では出来ないかと思います。 (Assetを使う、Unity内部のプログラムを紐解く等すれば可能かもしれませんが具体的な方法を私は知りません)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問