Skip to content

Instantly share code, notes, and snippets.

@burrussmp
Created April 26, 2020 21:39
Show Gist options
  • Select an option

  • Save burrussmp/0b4ae0d2624366ea4299a7d310d8b9f4 to your computer and use it in GitHub Desktop.

Select an option

Save burrussmp/0b4ae0d2624366ea4299a7d310d8b9f4 to your computer and use it in GitHub Desktop.
Create a mesh in Unity
IEnumerator CreateMesh(){
while(inFirst)
yield return new WaitForSeconds(0.1f);
int meshID = 97;
int cur = 0;
var resources = Resources.FindObjectsOfTypeAll(typeof(Material));
foreach(var face in mList){
int num_of_vertices = Convert.ToInt32(face[face.Count-1]);
// should we make it hollow?
if (mMap["special"] == 'H' && cur < 4){
cur +=2 ;
continue;
}
Vector2[] vertices2D = new Vector2[num_of_vertices];
int j = 0;
Debug.Log(cur);
for (int i = 0; i < face.Count-1; i=i+3){
if (cur < 4){
vertices2D[j] = new Vector2(face[i],face[i+1]);
} else {
vertices2D[j] = new Vector2(face[i],face[i+2]);
}
Debug.Log(vertices2D[j]);
j = j +1;
}
Triangulator tr = new Triangulator(vertices2D);
int[] indices = tr.Triangulate();
Vector3[] vertices = new Vector3[vertices2D.Length];
j =0;
for (int i = 0; i < face.Count-1; i=i+3){
if (cur < 4){
vertices[j] = new Vector3(vertices2D[j].x, vertices2D[j].y,face[i+2]);
} else {
vertices[j] = new Vector3(vertices2D[j].x, face[i+1],vertices2D[j].y);
}
Debug.Log(vertices[j]);
j = j + 1;
}
Mesh msh = new Mesh();
msh.vertices = vertices;
msh.triangles = indices;
msh.RecalculateNormals();
msh.RecalculateBounds();
// Set up game object with mesh;
gameObject = GameObject.Find("newObject");
GameObject child = new GameObject(Char.ToString(Convert.ToChar(meshID)));
MeshRenderer render = child.AddComponent<MeshRenderer>();
if (cur<4){ // get the color of the front
render.material = parseCharacterTexture(mMap["texturefront"]);
render.material.color = parseCharacterColor(mMap["colorfront"]);
} else {
render.material = parseCharacterTexture(mMap["textureside"]);
render.material.color = parseCharacterColor(mMap["colorside"]);
}
child.transform.parent = gameObject.transform;
MeshFilter filter = child.AddComponent<MeshFilter>();
filter.mesh = msh;
cur = cur + 1;
meshID = meshID + 1;
msh = new Mesh();
msh.vertices = vertices;
msh.triangles = indices;
msh.RecalculateNormals();
msh.RecalculateBounds();
child = new GameObject(Char.ToString(Convert.ToChar(meshID)));
render = child.AddComponent<MeshRenderer>();
if (cur<4){ // get the color of the front
render.material = parseCharacterTexture(mMap["texturefront"]);
render.material.color = parseCharacterColor(mMap["colorfront"]);
} else {
render.material = parseCharacterTexture(mMap["textureside"]);
render.material.color = parseCharacterColor(mMap["colorside"]);
}
child.transform.parent = gameObject.transform;
filter = child.AddComponent<MeshFilter>();
filter.mesh = msh;
cur = cur + 1;
if (filter != null)
{
Mesh mesh = filter.mesh;
Vector3[] normals = mesh.normals;
for (int i=0;i<normals.Length;i++)
normals[i] = -normals[i];
mesh.normals = normals;
for (int m=0;m<mesh.subMeshCount;m++)
{
int[] triangles = mesh.GetTriangles(m);
for (int i=0;i<triangles.Length;i+=3)
{
int temp = triangles[i + 0];
triangles[i + 0] = triangles[i + 1];
triangles[i + 1] = temp;
}
mesh.SetTriangles(triangles, m);
}
}
meshID = meshID + 1;
}
inSecond = false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment