Cooooding!!

Unity(C#)を使ったゲーム開発関連Tipsなど

2Dの地形に3DのColliderを付けてみる【Unity】

概要

少し前の記事で地形は2Dで3Dモデルに2DのColliderを付ける検証をしました。今回は逆に地形の方に3DのColliderを付ける検証をしてみました。3DモデルはRigidbodyのZ方向の移動とXY方向の回転を禁止(Freeze)してRigidbody2Dのような動きしかしないようにしています。また、こちらの問題が発生するためDefault Solver Iterationsを100に変更して検証しています。

今回はTilemapだけでなくSpriteShapeも使っています。

検証

Tilemap + シンプルな3Dオブジェクト

TilemapにはこのようにColliderを付けました。
Tilemapに3DのColliderを付けた
Colliderのz軸方向の厚みが0でも問題なく動くことが多いですが後述する理由により厚みを付けています。

Cylinderなどのオブジェクトは以下のようにFreezeにチェックを入れてRigidbody2Dのような動きをするようにしています。
Rigidbody2Dのような動きをするようにFreeze

これらのオブジェクトを地形に落下させてみるとこのようになります。

特に問題なく動作しています。

Tilemap + 複雑なモデル

次に複雑なモデルを使ってみます。
Rigidbody2Dのような動きをするようにFreeze


これも問題なさそうに見えますが…

3Dモデルに2D Colliderを付けたときと同じ問題

3Dモデルに2DのColliderを付けたときと同じでPerspectiveの問題が発生します。
Sceneビューでは問題なさそうに見えるけど、Gameビューでははみだしている
これもOrthographicにすればはみ出すことはなくなりますが3D感が薄れます。

Colliderのz座標に注意

2DのColliderを使ったときとは違ってz座標にも注意する必要があります。例えば、地形のColliderの厚みを0にすると以下のように一部のColliderが地形と当たらなくなることがあります。
地形のColliderの厚みを0にすると、剣のColliderがz=0ではないため地形と当たらない
これは地形のColliderに厚みを付ければいいだけなので付け忘れないように注意していれば大丈夫です。

SpriteShape

SpriteShapeでも同じように検証してみます。ColliderはBox Colliderを複数組み合わせました。
地形に沿ってBox Colliderを複数付ける


Sprite Shapeでも特に問題なさそうです。

Perspectiveの問題が目立ちにくい分 Sprite Shapeの方がいいかもしれません。
Perspectiveの問題が目立ちにくい

感想

2Dの地形に3DのColliderを付けても大きな問題はなさそうです。

3Dモデルは人型に限定しなければ様々なバリエーションがありアニメが付いていることも多いと考えると、3Dモデルに2DのColliderを付けるよりも2Dの地形に3DのColliderを付けた方が想定外のトラブルでハマる可能性が低くなりそうな気がしました。

環境

  • Unity 2018.4.0f1