背景デザイン画像1 背景デザイン画像2

Portfolio

OnTriggerの処理で詰みかけている話

MENU

 概要

現在アイテムを拾う処理でOnTriggerを使ってるのですが、どうやっても上手く動かないのでメモしとく回です。

OnTriggerは当たり判定を検知します。

参考サイト
【Unity】当たり判定を一通り!OnTrigger・OnCollisionをひとまとめ



するのですが、自分のOnTriggerはアイテムに乗っかっても何も反応してないです

原因を調査してみる(1)

以下のサイトを参考に全て調べてみます。
OnCollisionEnter、OnTriggerEnterが呼ばれない場合を検証



プログラムはこうなっていて、サバイバルゲーム(3D)を作成しているので

1. メソッド名が間違っている

2. 引数が間違っている

6. 2Dと3D間違っていないか

は問題なさそう




プレイヤーキャラクターの子要素に付けているアイテム検知エリアです。

以下の項目も問題なさそう

3. Rigidbodyがついていない

4. CollisionとTrigger間違っていないか

5. RigidbodyがKinematicになっていないか


全ての凡ミス項目に該当してないためこの段階で面倒な問題であるのが分かります...




<Physics Layer Collision Matrixのチェックが外れている>

明らかに外れてないのでこれも該当しません



両方のオブジェクトにcoliderが付いてないと反応しないという情報が多くのサイトにあったのでアイテム側のcoliderも確認

Boxcoliderが付いてるのでこれも問題ありませんでした。

原因を調査してみる(2)

もしかしてOntriggerじゃなくてアイテムプレハブに問題があるのかと思い以下を変更

変更前→Boxcoliderのサイズ[0.1, 0.1, 0.1]
変更後→Boxcoliderのサイズ[1.0, 1.0, 0.1]

小さすぎて当たってない説がよぎったため検知エリアを10倍にしました。




OnTriggerを検知したことがコンソールに表示されました。



しかし、表示されるタイミングが明らかにおかしい...

これだとゲームの起動と同時にアイテムに触れていることになります。

アイテム側の検知エリアを大きくした影響みたいですが、10倍でコレなら変更前のサイズでも近くに居れば十分当たる大きさということになります。

よくみるとOnTriggerExitも同時に起動しています。

ゲーム起動直後にアイテムに接触できる位置から接触できない位置に移動していることになってしまいます。

ますます訳わからん...

しばらくいじってみた

Boxcoliderのサイズを[0.5, 0.5, 0.1]にしてたらアイテムと全然関係ない位置でOnTriggerが発動しました。

どうやらアイテム検知エリアが本来のアイテムの位置と異なっているようです。

上図のようにアイテムプレハブの子要素に検知エリアを作成しているので原因が分からない...

以下のサイトのように、子オブジェクトは親オブジェクトに追従するためアイテム検知エリアが離れた位置にある状況が変です。
Unityのオブジェクトの親子関係について【初心者向け】


かなり重症っぽいのでしばらく原因を探ってみることにして、どうしても無理そうなら先にHP管理を作成することにします。

この問題についてまた何か分かったら追記します。