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を付けました。
Colliderのz軸方向の厚みが0でも問題なく動くことが多いですが後述する理由により厚みを付けています。
Cylinderなどのオブジェクトは以下のようにFreezeにチェックを入れてRigidbody2Dのような動きをするようにしています。
これらのオブジェクトを地形に落下させてみるとこのようになります。
特に問題なく動作しています。
Tilemap + 複雑なモデル
次に複雑なモデルを使ってみます。
これも問題なさそうに見えますが…
3Dモデルに2D Colliderを付けたときと同じ問題
3Dモデルに2DのColliderを付けたときと同じでPerspectiveの問題が発生します。
これもOrthographicにすればはみ出すことはなくなりますが3D感が薄れます。
Colliderのz座標に注意
2DのColliderを使ったときとは違ってz座標にも注意する必要があります。例えば、地形のColliderの厚みを0にすると以下のように一部のColliderが地形と当たらなくなることがあります。
これは地形のColliderに厚みを付ければいいだけなので付け忘れないように注意していれば大丈夫です。
SpriteShape
SpriteShapeでも同じように検証してみます。ColliderはBox Colliderを複数組み合わせました。
Sprite Shapeでも特に問題なさそうです。
Perspectiveの問題が目立ちにくい分 Sprite Shapeの方がいいかもしれません。
感想
2Dの地形に3DのColliderを付けても大きな問題はなさそうです。
3Dモデルは人型に限定しなければ様々なバリエーションがありアニメが付いていることも多いと考えると、3Dモデルに2DのColliderを付けるよりも2Dの地形に3DのColliderを付けた方が想定外のトラブルでハマる可能性が低くなりそうな気がしました。
検証に使ったAsset (記事を書いた時点では全て無料Asset)
- Small Red Dragon - Asset Store (ドラゴン)
- "Unity-Chan!" Model - Asset Store (Unityちゃん)
- Troll Giant - Asset Store (トロール)
- Fantasy Rhino - Asset Store (サイ)
- SD Martial Arts Girl Xia-Chan - Asset Store (SDキャラクター)
- Toon Devil Gorgos - Asset Store (悪魔)
- Too Cube Forest, the free 2D platformer game tile set. - Asset Store (Tilemap)
- 2D Game Kit - Asset Store (SpriteShape用テクスチャ)
環境
- Unity 2018.4.0f1