@kuroneko0802

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Unity オブジェクトの上部・側面で判定を別にしたい

オブジェクトの上部・側面で判定を別にしたい

調べても求める答えが見つからなかったので質問させていただきます。

現在、授業の一環として、タイルマップを用いて2D横スクロールアクションを制作しているのですが、そのゲームに
1.プレイヤーの左右方向に何かブロックが触れた時、プレイヤーの移動速度が0になる
2.プレイヤーの足元にブロックがある場合、ジャンプできる
という仕様があります。
そのため、1ブロックの側面部分は壁として判定、上部は床として判定したいと思っています。
この場合、以下のどの方法で実装するのが効率や安全性の面で良いのでしょうか?

思いついた実装手段

1.プレイヤーの子オブジェクトに床・右側の壁・左側の壁との衝突判定を取るColliderを計3つ付け、プレイヤー本体がその判定結果を受け取って処理を行う

2.タイルの子オブジェクトに上部、側面で別のTagが付いたColliderを付け、プレイヤーはTagに応じて処理を行う

3.プレイヤーから上部左右の3方向にRayを飛ばして、Rayの衝突判定を貰って処理を行う

4.プレイヤーとオブジェクトが衝突した位置をContactPoint2Dを用いて取得し、その座標に応じて処理を行う

他により良い手段があれば、教えていただきたいです。

0 likes

1Answer

後々の修正などを考えれば、1.方法が確実だと思います。
2.の方法では、例えばマインクラフトの2Dバージョンのような大規模なタイルを生成する場合、タイルの分だけ処理が増えるわけですから、それをさらに上部、側面で分けてしまうと、設置コストと計算コストが爆上がりしてしまう危険があります。
3. 4. も、後々ステージが増えた場合に管理がとんでもなく大変になる可能性があります。
1.では、プレイヤーのみの当たり判定を設定すれば済みますから、処理も軽く、また実装の手間も省けるでしょう。

0Like

Your answer might help someone💌