In unity kan je 3D mesh/geometry genereren via code. Soms kan het handig zijn om dit te doen als je bijvoorbeeld procedural systemen/levels wil genereren of als je volledige controle over de punten(vertices) van een 3D model moet hebben.

Voorbeeld van mesh manipulation via code.
Hiervoor moeten we weten wat 3D Geometry is. 3D modellen bestaan uit verschillende losse onderdelen:

Tri

Quad

N-Gon

<aside> <img src="attachment:011c98bd-8b48-40c4-b001-555c6282c2b6:Shapes.png" alt="attachment:011c98bd-8b48-40c4-b001-555c6282c2b6:Shapes.png" width="40px" />
Bron/link https://resources.turbosquid.com/training/modeling/tris-quads-n-gons/
</aside>
Binnen Unity kan je via code 3D modellen programmeren, hiervoor maak je gebruik van verschillende Arrays[] om de data van de geometry op te slaan. Ook moet het GameObject dat je 3D model gaat zijn een MeshFilter en een MeshRenderer hebben. Dit zijn de componenten of het GameObject dat ervoor zorgt dat het zichtbaar wordt.
Hier een voorbeeld die een quad maakt. let hierbij op dat een Quad uit 2 Tri’s bestaat en daarom heeft de array van de Triangles een lengte van [6] waarbij het aantal vertices maar [4] is. De vertices worden dus voor verschillende Tri’s vaker gebruikt.
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class MeshGenerator : MonoBehaviour
{
Mesh mesh;
MeshFilter meshFilter;
Vector3[] vertices = new Vector3[4];
int[] triangles = new int[6];
void Start()
{
//assign fields
meshFilter = GetComponent<MeshFilter>();
//create new mesh object
mesh = new Mesh();
mesh.name = "CustomMesh";
//assign mesh to meshfilter
meshFilter.mesh = mesh;
GenerateMeshData();
}
void GenerateMeshData()
{
//create a square(quad)
vertices[0] = new Vector3(0, 0, 0);
vertices[1] = new Vector3(0, 1, 0);
vertices[2] = new Vector3(1, 1, 0);
vertices[3] = new Vector3(1, 0, 0);
triangles[0] = 0;
triangles[1] = 1;
triangles[2] = 2;
triangles[3] = 0;
triangles[4] = 2;
triangles[5] = 3;
UVs[0] = new Vector2(0, 0);
UVs[1] = new Vector2(0, 1);
UVs[2] = new Vector2(1, 1);
UVs[3] = new Vector2(1, 0);
mesh.vertices = vertices;
mesh.uv = UVs;
mesh.triangles = triangles;
}
}