OnTriggerの処理で詰みかけている話-ド素人が触るUnity日記

Unity:サムネイル画像6 ゲーム制作

前回でアイテム生成の処理が完成したので、次はアイテムを拾う処理でOnTriggerを使ってるのですが、どうやっても上手く動かないのでメモしとく回です。

OnTriggerは当たり判定を検知しますが、自分のOnTriggerはアイテムに乗っかっても動かざること山のごとしです…

参考サイト

Unity:OnTrigger未発動シーン1
OnTrigger未発動シーン

原因を調査してみる-その1

以下のサイトに書いてあることを全て調べてみます。
https://dkrevel.com/oncollisionenter-not-working/

まずはコードです。

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

1. 変数名が間違っている

2. 引数が間違っている

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

は問題なさそう。

Unity:OnTriggerの実装コード
OnTriggerの実装コード

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

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

3. Rigidbodyがついていない

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

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

全ての凡ミス項目に該当してないので、この段階で面倒なバグだと予想がついてしまう…

ちなみに、「Physics Layer Collision Matrixのチェックが外れている」というチェック要件も明らかに外れてないので該当せず…

Unity:Physics Layer Collision Matrixのチェック状態
オールON

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

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

Unity:アイテム側のcolider状態
Boxcoliderは付与されている

原因を調査してみる-その2

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

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

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

Unity;アイテムプレハブの検知エリアを10倍に拡張.
アイテムプレハブの検知エリアを10倍に拡張

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

Unity:OnTriggerを検知時のコンソール出力画面
OnTriggerを検知

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

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

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

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

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

ますます訳わからん…

しばらくいじってみた

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

どうやらアイテム検知エリアが本来のアイテムの位置と異なっているようです。
しかし、上図のようにアイテムプレハブの子要素に検知エリアを作成しているので原因が分からない…

以下のサイトのように、子オブジェクトは親オブジェクトに追従するためアイテム検知エリアが離れた位置にある状況が変です。

Unityのオブジェクトの親子関係について【初心者向け】

かなり重症っぽいのでしばらく原因を探ってみることにして、また何か分かり次第追記します。

タイトルとURLをコピーしました