おもちゃバコ

主に趣味について

Unity: Polygon Collider 2Dから平面のMeshを生成する

こんにちハサミギロチン
バルバトスMGを買ったので,ゴールデンウイークに組み立てるのが楽しみです.

今回はPolygon Collider 2Dから平面のMeshを作成した時の備忘録です.

Unity: Unity 2019.4.24f1


参考文献

今回は独自仕様なのでなし.

動機

スプライトの形に応じたMeshが使えたら便利かもっておもっただけ.
(本当は,2Dのコライダーを3Dゲームに使用する方法がわからなかっただけ)


Prefab

事前にSpriteとPolygon Collider 2Dを当てて,Polygon Collider 2DでSpriteの外枠をなぞったコライダーを生成する.
Prefab構成はこんな感じ.
f:id:lambda410:20210426222841p:plain
f:id:lambda410:20210426223046p:plain

生成アルゴリズム

1.Polygon Collider 2Dで作成したコライダー頂点を取得.
 -> このとき,外枠をなぞるように並んでいることを前提.
2.取得した頂点の重心を計算.
3.頂点を順番になぞり,三角形を構成.
 -> 隣り合う2点の頂点+重心で1つの面

f:id:lambda410:20210426223801p:plain
アルゴリズムのイメージ

スクリプト

多分スクリプトを見たほうが早い.


実行結果

単純な閉じた図形ならこんな感じでMeshを構成できる.
f:id:lambda410:20210426223933p:plain
f:id:lambda410:20210426224002p:plain
f:id:lambda410:20210426224033p:plain


応用

コライダーをスプライトの形に近似して多角形コライダーを作成する.

f:id:lambda410:20210427222011p:plain
実行前

f:id:lambda410:20210427222023p:plain
実行後


まとめ

Polygon Collider 2Dが順番通りの座標配置で良かった~.
これがバラバラだと座標に順番を割り当てる必要があるので面倒.
複雑な構成の場合は,Convex Hullのアルゴリズムをさらう必要があるね.

参考

凸包アルゴリズム
https://www.jaist.ac.jp/~uehara/course/2014/i481f/pdf/ppt-3.pdf