3Dモデルに2DのColliderを付けてみる【Unity】
概要
地形は2Dでキャラクターは3Dモデルを使う2Dゲームを考えているのですが、2DのColliderと3DのColliderは衝突しないので3Dモデルに2DのColliderを付ける検証をしてみました。
検証
1.シンプルな形状
まずはCubeやCylinderなどのシンプルな形状のモデルにColliderを付けてみます。Cubeなら↓こんな感じです。RigidbodyやColliderが2Dのものになっています。
地形はTilemapを使いました。
これは問題なく使えてそうです。
2.複雑なモデル(複数のCollider)
次にAsset Storeで配布されている複雑なモデルを使ってみます。配布されているモデルには3D用のColliderが付いているのでそれらは削除して2D用のColliderに付け替えます。Colliderは形状に応じて複数使っています。
2DのColliderを付けるときにGameObjectがX軸、Y軸方向に回転しているとColliderも3次元的に回転してしまうので注意が必要です。
この例でも問題なく使えているように見えます。実はダメなモデルもあったのですがそれについては後述します。
3.動くモデル
アニメに合わせてColliderを動かしてみます。この例ではクジラのしっぽのBoneに体とは別のColliderを付けています。
アニメに合わせてColliderを動かすことも問題なさそうです。
4.うまくいかない例
でも、実は3Dモデルの中でいくつか当たり判定がうまく設定できないものがありました。
これはカメラがPerspectiveになっているため、z軸方向に厚みがあるモデルだと画面の位置によってモデルの見え方が異なることが原因です。
カメラのProjectionをOrthographicにするとこの問題は発生しなくなりますが、それでは見栄えが悪くなり3Dモデルを使っている意味が薄れてしまいます。Cubeで見るとその見栄えの差がわかりやすいかと思います。
Orthographicにするのではなくz軸方向に厚みのある部分には当たり判定を付けないとか、そういうモデルを使わないという回避策の方がいいかもしれません。
感想
いくつか問題はありますが3Dモデルに2DのColliderを付けてゲームをつくることもできないことはなさそうです。ただ、今回は簡単な検証をしただけなので他にも問題が出てくる可能性はあります。Orthographicで妥協できるなら比較的安全そうですが、Perspectiveは苦労するかもしれません。
(2019/06/21 21:39追記)
この記事とは逆に 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キャラクター)
- Sport Car - 3D model - Asset Store (車)
- Humpback Whale - Asset Store (クジラ)
- Toon Devil Gorgos - Asset Store (悪魔)
- Too Cube Forest, the free 2D platformer game tile set. - Asset Store (Tilemap)
環境
- Unity 2018.4.0f1