arrays.Resize((int)Mesh.ArrayType.Max);
//버텍스를 가져와서 정의한다.
arrays[(int)Mesh.ArrayType.Vertex] = new Vertex2[] { ..., ..., ..., ...}
먼저 array의 0번 인덱스부터 차곡 차곡 넣는 것이 아니라, Mesh.ArrayType 을 통해 Vertex 또는 Index, TexUV 에 대한 메모리 배치 인덱스 위치를 가져와서 해당 인덱스에 vertex 2[] 쌍을 담아야 한다.
즉 Mesh.ArrayType.Vertex 는 내부적으로 사용하는 버텍스 쌍의 인덱스 위치인 것이고 해당 인덱스 위치에 버텍스 쌍을 저장해야 한다.
(int)Mesh.ArrayType.Vertex
(int)Mesh.ArrayType.Index
(int)Mesh.ArrayType.TexUV
3D 그래픽스를 공부했다면, Index와 TexUV가 무엇인지는 알 것이라 믿는다. 각각 인덱스에 [] 배열 값을 넣어주면 된다.
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);
이후 Triangles 모드로 arrays 를 mesh 에 삽입하고, MeshInstance2D 의 Mesh 에 mesh를 적용한다.
ArrayMesh mesh = new ArrayMesh();
//실제 메시 버텍스 정보가 담기는 Array를 생성한다.
Godot.Collections.Array arrays = new Godot.Collections.Array();
/*현재 array의 각 최대 값은 시스템상의 Array Type 최대로 지정한다. 즉 0번은 버텍스, 1번은 인덱스, 2번은 UV 등을 넣는 시스템 상의 인덱스이기에
이러한 작업을 수행한다.*/
arrays.Resize((int)Mesh.ArrayType.Max);
//버텍스를 가져와서 정의한다.
arrays[(int)Mesh.ArrayType.Vertex] = new Vertex2[]{ ... , ... , ... , ... }
//4개의 버텍스에 대해 인덱스를 정의하여 삼각형 2개로 사각형을 구현한다.
arrays[(int)Mesh.ArrayType.Index] = new int[]
{ 0, 1, 2, 0, 2, 3 };
//UV 를 기입한다.,
arrays[(int)Mesh.ArrayType.TexUV] = new Vertex2[]{ ... , ... , ... , ... }
//삼각형 모드로 메시를 구성한다.
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);
//메시를 반영한다.
instance.Mesh = mesh;