Cooooding!!

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

3Dモデルに2DのColliderを付けてみる【Unity】

概要

地形は2Dでキャラクターは3Dモデルを使う2Dゲームを考えているのですが、2DのColliderと3DのColliderは衝突しないので3Dモデルに2DのColliderを付ける検証をしてみました。

検証

1.シンプルな形状

まずはCubeやCylinderなどのシンプルな形状のモデルにColliderを付けてみます。Cubeなら↓こんな感じです。RigidbodyやColliderが2Dのものになっています。

f:id:nyama41:20190610225201p:plain

地形はTilemapを使いました。

これは問題なく使えてそうです。

2.複雑なモデル(複数のCollider)

次にAsset Storeで配布されている複雑なモデルを使ってみます。配布されているモデルには3D用のColliderが付いているのでそれらは削除して2D用のColliderに付け替えます。Colliderは形状に応じて複数使っています。

f:id:nyama41:20190610231258p:plain

2DのColliderを付けるときにGameObjectがX軸、Y軸方向に回転しているとColliderも3次元的に回転してしまうので注意が必要です。

この例でも問題なく使えているように見えます。実はダメなモデルもあったのですがそれについては後述します。

3.動くモデル

アニメに合わせてColliderを動かしてみます。この例ではクジラのしっぽのBoneに体とは別のColliderを付けています。

アニメに合わせて動くようにBoneにColliderを付ける

アニメに合わせてColliderを動かすことも問題なさそうです。

4.うまくいかない例

でも、実は3Dモデルの中でいくつか当たり判定がうまく設定できないものがありました。

ちゃんとColliderが設定されているように見えるのに羽が地面を突き抜けている

これはカメラがPerspectiveになっているため、z軸方向に厚みがあるモデルだと画面の位置によってモデルの見え方が異なることが原因です。

3Dで見るとこうなっている

Sceneビューで見ると全て同じ姿勢に見えるが、Gameビューではそれぞれ微妙に異なって見える

カメラのProjectionをOrthographicにするとこの問題は発生しなくなりますが、それでは見栄えが悪くなり3Dモデルを使っている意味が薄れてしまいます。Cubeで見るとその見栄えの差がわかりやすいかと思います。

Perspective
Orthographic。3D感がかなり乏しい

Orthographicにするのではなくz軸方向に厚みのある部分には当たり判定を付けないとか、そういうモデルを使わないという回避策の方がいいかもしれません。

感想

いくつか問題はありますが3Dモデルに2DのColliderを付けてゲームをつくることもできないことはなさそうです。ただ、今回は簡単な検証をしただけなので他にも問題が出てくる可能性はあります。Orthographicで妥協できるなら比較的安全そうですが、Perspectiveは苦労するかもしれません。

(2019/06/21 21:39追記)
この記事とは逆に 2Dの地形に3DのColliderを付ける検証もしてみました。

環境

  • Unity 2018.4.0f1