UnityでのMesh生成について

MeshFilterとMesh

近年、VRやARなどが注目されていますが、このようなアプリケーションを開発する際よく利用されるものとして「Unity」などが挙げられます。

今回は、この「Unity」を利用して動的にメッシュを生成する方法を記載したいと思います。

 

MeshFilterとMesh

UnityEngineで用意させているクラスMeshFilterとMesh

を利用することで動的にメッシュを生成できます。

以下の図は、スクリプト内でMeshFilterとMeshを利用し、

四面体を動的に作成したものです。

MeshFilterとMesh

 

コード内でのMesh作成手順

  1. MeshFilter とMeshRenderer を付与したGameObjectを作成
  2. MeshFilter、Meshオブジェクトを作成
  3. Meshオブジェクトに頂点座標、法線ベクトル、三角形の配列を代入
  4. 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;
 }

 

オリエンタルインフォーメイションサービス(OIS)

\ 最新情報をチェック /