【Unity】プレイヤーのRigidbodyとColliderをアタッチする位置について
どうも、だらはです。
今回はRigidbodyとColliderをアタッチする位置について考えていきます。
私なりの結論
先ずは結論を記載します。
プレイヤーの階層設定は以下のようになりました。
階層 | 役割 | アタッチするコンポーネント | 備考 |
---|---|---|---|
1(親) | まとめ用 | ・移動用コントローラ | – |
2(子) | モデル | ・Rigidbody ・Animator ・CapsuleCollider |
・モデルにRigidbodyをアタッチしないと、AddForceとかできない。 ・モデルにコライダをアタッチしないと、コライダが追従しない場合がある。 |
3(孫) | FPSカメラ | ・Camera | – |
◆参考画像(OK設定)
試行錯誤で何度も設定を変えていたのですが、一旦これで安定しました。
まとめ用のGameObjectが居るとアイテム欄を実装する際などに役立つためまとめ用を作りましたが、
将来的には敵オブジェクトとのスクリプト共通化のため、まとめ用を削除するかもしれません。
(むしろ、今からでもまとめ用消した方が良いかも)
NG設定
以下はNG設定です。
以前はこのように設定していたのですが、途中で問題が生じました。
階層 | 役割 | アタッチするコンポーネント | 備考 |
---|---|---|---|
1(親) | まとめ用 | ・移動用コントローラ ・Rigidbody |
・親にRigidbodyをアタッチすると、子の衝突を検知可能。 |
2(子) | モデル | ・Animator ・CapsuleCollider |
・モデルにコライダをアタッチしないと、コライダが追従しない場合がある。 |
2(子) | FPSカメラ | ・Camera | – |
◆参考画像(NG設定)
被ダメージを考慮するため、移動用コントローラでAddForceを使おうとしたのですが、正しく動いてくれません。
どうやら、モデルにRigidBodyをアタッチしないと、AddForceが狙ったとおりに動作しないようでした。
親にRigidbodyをアタッチすると、子の全ての衝突を検知可能(OnCollisionEnterなど)なので、惑わされてしまいました。。
なお、当たり判定全般の関数については以下にまとめてありますので、参考にして頂けたらと思います。
◆衝突判定について
最後に
いかがでしたでしょうか。
当たり判定が上手く認識しない場合、RigitBodyやColliderをアタッチする位置を見直してみると良いかもしれません。
以上、だらはでした!
追求(2022.3.27)
やっぱり、まとめ用を削除することにしました!
まとめ用でやってたことをモデルでやるイメージです。
理由は、敵キャラと設定を共通化するためです。
敵キャラと階層設定やスクリプトを共通化させました。
ディスカッション
コメント一覧
まだ、コメントがありません