UnityでのMesh生成について

近年、VRやARなどが注目されていますが、このようなアプリケーションを開発する際よく利用されるものとして「Unity」などが挙げられます。
今回は、この「Unity」を利用して動的にメッシュを生成する方法を記載したいと思います。
MeshFilterとMesh
UnityEngineで用意させているクラスMeshFilterとMesh
を利用することで動的にメッシュを生成できます。
以下の図は、スクリプト内でMeshFilterとMeshを利用し、
四面体を動的に作成したものです。

コード内でのMesh作成手順
- MeshFilter とMeshRenderer を付与したGameObjectを作成
- MeshFilter、Meshオブジェクトを作成
- Meshオブジェクトに頂点座標、法線ベクトル、三角形の配列を代入
- MeshFilter.meshにMeshオブジェクトを代入
上記の手順をソースコードにしたものがソースコード2になります。
数行のコードでMesh生成が行えます。
ソースコード1: Start関数内
void Start () {
List<Vector3> vtcs = new List<Vector3>{
new Vector3(0.0f, 1.0f, 0.0f),
new Vector3(-1.0f, 0.0f, -1.0f),
new Vector3(0.0f, 0.0f, 1.0f),
new Vector3(1.0f, 0.0f, -1.0f)
};
List<int> pindex = new List<int>(){
0,1,2,
0,2,3,
0,3,1,
1,3,2
};
CreateMesh("tetrahedron",vtcs, vtcs, pindex);
}
ソースコード2: Mesh作成
public void CreateMesh(string _objName,List<Vector3> _vtcs, List<Vector3> _nors, List<int> _pindex)
{
GameObject meshObj = new GameObject(_objName, new[] { typeof(MeshFilter), typeof(MeshRenderer) });
MeshFilter mf = meshObj.GetComponent<MeshFilter>(); meshObj.GetComponent<MeshRenderer>().material.color = Color.red;
Mesh mesh = new Mesh();
mesh.vertices = _vtcs.ToArray();
mesh.triangles = _pindex.ToArray();
mesh.normals = _nors.ToArray();
mf.mesh = mesh;
}
