コンテンツへスキップ

メッシュコライダ

タイルマップにはUniTileを使っているんですが、標準ではBoxColliderしかないので、傾斜のタイルなどを作りたい場合、MeshColliderを用意してやる必要があります。

Unity上のスクリプトでMeshを作ってもいいんですが、うちの場合はmaxで作ったほうが楽なので、今回はその方向でやってみました。

注意点は二つ。まず座標系が右手系であるmaxから左手系であるUnity向けに変換すること、もうひとつはサイズを合わせること。

FBXimporterをかました状態だと、そのへん良い感じにやってくれるんですが、今回は生のままでいい塩梅のmeshが欲しいので、予めそういうふうにデータを作ってやります。

とりあえず、こういう左に上がる傾斜のmeshを作ってみましょう。1マスのサイズは16×16、奥行きは64です。奥行きはUniTileのデフォに合わせただけです。

こういう形のmeshをmaxで作ってやります。こんな感じ。

ポイントは、Unityに合わせてxy平面で作ることと、x軸で反転させること。Zupのmaxではチト見づらいですが、まあたいした問題じゃないでしょう。大きさはmax上のスケールで16x16x64になるようにしておきます。

忘れずにスケール等はリセット。XFormのリセットは今ではどうかしりませんが、昔は法線が反転するなどの怪しい挙動が多かったので個人的に使ってません。空のポリゴンを作ってアタッチするスクリプトを使ってます。

で、これをFBXでエクスポート。YupかZupを選ぶところってどっち選んでも出力結果が同じ気がするんですがどうなんですかね。

次にUnityで読み込んで、meshを切り出してやればOKです。こんな感じのスクリプトを用意してみました。

パスなどは適当に書き換えてください。その他細かい設定はソース見てくださいw meshの拡張子をassetにするってのが今回最大の謎でしたw インポーター用のスクリプトはパスの名前で切り分けるのが妥当なんですかね。他の方法が思いつきませんでしたが。テクスチャなんかも必要に応じて処理しておくだけで結構手間が省けますな。

ちなみにRecalculateNormals()してしまうと頂点数が3倍になるのでやらないほうがいいんじゃないですかね。法線要らないはずだし。ようわかりませんが。詳しい人プリーズ。

あとは出来上がったmeshを使うだけです。

2DToolkitにはMeshColliderを作るエディタがついてるので、今風のフリーサイズな手書き背景などを利用したい場合はあちらを使うほうが簡単だと思います。でもあれのタイルマップはまだおまけ程度な感じだし、アニメも弱いので、今回もうちはex2D+UniTileかな。タイルベースの2Dゲーつくるならこの組み合わせはとても快適ですよ。