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

Portfolio

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

MENU

 概要

OnTriggerが上手く作動しない件で少し分かったことがあったのでメモ

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

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

調査して分かったこと



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

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

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





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

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


分かったこと

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


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

前回わからなかった以下の項目はコレが原因でした。
  • アイテムに近づいてもOnTriggerが反応しない

  • 1歩も動いてないのにOnTriggerExitが作動する

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

 調整

子オブジェクトが落下し続ける現象について調べてたら以下の記述を発見
Unityでオブジェクトが下に向かって動いてしまう

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


子オブジェクトが追従しない原因についても以下の記事を発見
【Unity】子オブジェクトが親オブジェクトに追従しない時の解決方法

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


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



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

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

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


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




アイテムプレハブ側のコンポーネントをいじって以下の問題に対処


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

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


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

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


UseGravityという項目にチェックを入れてる場合は落下し続ける

UseGravityのチェックを外します。

動作確認


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



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


かなりハマってしまいましたが思ったとおりに動作させることができました。

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