【Unity】メッシュカッターについて その4
は?(威圧)
なんだよ、前回で終わりじゃねーのかよ。
と悪態をつきたい所だが、まだ終わりじゃない。
前回までは流れを理解するためのkindar_codeに過ぎない。
しっかり実践寄りに調整し直してみよう。
ゴールはcubeを切るところまでだ。
いきなりだけど、まるっとproject化してgithubに公開しておいた。
ゲームにも応用が出来そうなRigidbody入りだ。
github.com
あんまり変わらない?
概ねの流れはここまでで把握できている。
後は複数のものに対応出来るように変えた。
meshのポリゴン数が増えるので、ちゃんと三角形ずつ計算
するようにしたり
for (var i = 0; i < meshTriangles.Length; i += 3) { var idx0 = meshTriangles[i]; var idx1 = meshTriangles[i + 1]; var idx2 = meshTriangles[i + 2];
渡されたmeshからちゃんと頂点位置を計算するようにしたり
// 頂点位置をscaleやpositionに合わせてしっかり計算しないとおかしくなる // あれ、もうmatrixで計算したほうがいい? var v1 = Vector3.Scale(meshVertices[idx0], meshScale) + meshPos; var v2 = Vector3.Scale(meshVertices[idx1], meshScale) + meshPos; var v3 = Vector3.Scale(meshVertices[idx2], meshScale) + meshPos; verts.Add(v1); verts.Add(v2); verts.Add(v3); // そのポリゴンの法線を計算しておく var normal = Vector3.Cross(meshVertices[idx2] - meshVertices[idx0], meshVertices[idx1] - meshVertices[idx0]);
後はゲームっぽさを出して複数のinputに対応出来るようにしたり
rigidbodyつけたり
と調整しただけ。
この後
ここまでの流れが把握できていれば、もうなんでも出来る。
SkinedMeshに対応してあげればunityちゃんだって切れるし、
切り口が気になるなら、そこを塞ぐmeshを作るプログラムを組むのもいい。
(交点を全部保持しておいて、そこを繋ぐようなmesh作るだけでいい?)
submeshがあるオブジェクトも同じように計算していくだけだ。
また、uvやMaterialsが入っていないのでそれを追加してもいい。
やってみて
MeshCutterなんて検索すればいくらでもあるし、
それを使えば機能は満たす事が出来るだろう。
だけど、理解しているか否かでは雲泥の差がある。
「ライブラリが対応していないので出来ません。」
が通用する世界では無いのだろうと思っている。
Unityはやっぱり楽しい。
仕事で使ってみたいですね。