color×2

自分なりに学んだ事を記すところ

子オブジェクトをOnTriggerEnterで判定したいなら注意

これは知ってないと分からん…って事があったのでメモ。

TASK DESTRUCTIONの制作を進めてる時です。
ライフの実装が出来上がったのでちゃんと動くかテストしてました。

プレイヤーの当たり判定の様子を見ていると、処理が行われない時が。

 

その原因はすぐに分かりました。これ、子オブジェクトが原因だ。

プレイヤーは、本体(親オブジェクト、赤色)とプラスの当たり判定(子オブジェクト、ピンク色)の2つのオブジェクトで構成されています。
どっちもIsTriggerにチェックが入っていて、当たり判定はOnTriggerEnterでやっています。

親オブジェクトのエリアに攻撃が当たった時は正常に動きますが、
子オブジェクトのエリアに当たった時は動かない。

親オブジェクトと同じ当たり判定の処理書かないとあかんのか!?と思っていましたが、それはしなくても解決できました。

このサイトのおかげです↓

» unity : ontriggerenterの親子関係 Blog BBTUNE

引用すると、

親:collider + rigidbody + script
子:collider + rigidbody + script

で第三物体に接触した時 onTriggerEnterが呼ばれます。
親は、親の接触だけ呼ばれます。
子は、子の接触だけ呼ばれます。

子オブジェクトにscriptはつけていませんでしたが、まさにこの状態でした。
だから子オブジェクトに当たった時はしーんとしてたのね…

親:collider + rigidbody + script
子:collider + script

で第三物体に接触した時 onTriggerEnterが呼ばれます。
親は、親と子両方の接触で呼ばれます。
子は、子の接触の時呼ばれます。

そう、これをしたかったんです。rigidbodyを外すだけで解決しちゃった。

これでプレイヤーのどこに攻撃が当たってもライフが減るようになりました!