ハマったOnTriggerの処理が解決した話-経験ゼロのド素人が触るUnity日記

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

前回のOnTriggerが上手く作動しない件で少し分かったことがありました。

分かったこと

左側の緑色の枠がOnTrigger検知エリアです。

この中にアイテム検知エリアが入るとOnTrigger処理に遷移します。

アイテム検知エリアはプレイヤーキャラクター(Unitychan!)の子要素です。

Unity:OnTrigger検知エリアを可視化
OnTrigger検知エリアを可視化

そして前回、OnTrigger検知エリアをもの凄く大きくしても検知されない謎現象にハマって今回まで持ち越しになりました。

この問題について少し分かったことがあるので色々試します。

Unity:OnTrigger検知エリアを最大値に設定
これでも全く検知されない

分かったこと

プレイヤーキャラクターの子要素に付いているアイテム検知エリアが、何故かこのような状態になっていました。

Unity:何故か落下し続ける検知エリア
何故か落下し続ける検知エリア

親オブジェクトのUnityChan!から離れて落下し続けています…

前回わからなかった以下の項目はコレが原因でした。

  • アイテムに近づいてもOnTriggerが反応しない
  • 1歩も動いてないのにOnTriggerExitが作動する

とりあえず子オブジェクトのアイテム検知エリアを親オブジェクトに追従させる必要があります。

調査

子オブジェクトが落下し続ける現象について調べてたら以下の記述を発見。

Unityでオブジェクトが下に向かって動いてしまう
「Unity5 3D/2Dゲーム開発作りながら覚えるスマートフォンゲーム制作」という本を買いそれに従ってUnityで簡単なゲームを作成しているのですが公式サイトから配布されているオブジ

UseGravity という項目にチェックを入れてる場合は子オブジェクトでも落下し続けるみたいです。

子オブジェクトが追従しない原因についても以下の記事を発見。

子オブジェクトにRigidbodyがアタッチされていると何しても追従しないみたいです。

何それ全く分からなかった…

調整

UnityChan!の子オブジェクトに付いてるRigidbodyを削除。

Unity:仕方なくRigidbodyを削除
仕方なくRigidbodyを削除

しかし、この状態だとUnityChan!にもアイテムにもRigidbodyが付いてないです。

前回の記事のとおり、両方にRigidbodyが無い場合はOnTriggerが反応しません。

上記の事情でアイテム側の子要素にはRigidbodyを付ける必要があります。

なので、アイテムプレハブ側のコンポーネントをいじって問題に対処することにします。

Unity:アイテム側の子オブジェクトにRigidbodyを付与
アイテム側の子オブジェクトにRigidbodyを付与

両方のオブジェクトにRigidbodyが付いてない場合はOnTriggerが反応しない

  • アイテム側の子オブジェクトにRigidbodyを追加

子オブジェクトにRigidbodyがアタッチされていると親オブジェクトに追従しない

  • 親オブジェクト(アイテム)は移動しないので追従させる必要がない

UseGravity にチェックを入れてる場合は落下し続ける

  • UseGravityのチェックを外す

動作確認

アイテムに近づいたときにOnTriggerEnterを検知。

Unity:アイテムに近づいたときにOnTriggerEnterを検知

アイテムから離れたときにOnTriggerExitを検知。

Unity:アイテムから離れたときにOnTriggerExitを検知

かなりハマったけど動作させることができました!

アイテムに「近づいたとき」「離れたとき」を検知できるようになったので、次回はアイテムを拾う処理の続きを実装します。

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