public static void CreateSculpture(IEnumerable <Vector3> Vertices, Vector3 pos, Vector3 nor, Vector3 rot, Vector3 scale, Material rockmat) { GameObject rock = new GameObject(); Undo.RegisterCreatedObjectUndo(rock, "Create"); rock.name = RockStudio.StructureElementName; rock.transform.position = pos; rock.transform.eulerAngles = rot; rock.transform.localScale = scale; rock.transform.LookAt(pos - nor); rock.transform.parent = GameObject.Find("_Structure_").transform; Selection.activeGameObject = rock; MeshFilter meshFilter = (MeshFilter)rock.AddComponent(typeof(MeshFilter)); //Add a mesh filter. MeshRenderer renderer = rock.AddComponent(typeof(MeshRenderer)) as MeshRenderer; //Add a mesh renderer. renderer.material = rockmat; meshFilter.sharedMesh = MeshCreator.CreateMesh(Vertices); //Create a mesh. if (RockStudio.TypeOfShading == RockStudio.ShadingType.Flat) { MakeLowPoly.LowPoly(rock.transform, RockStudio.toolBar, RockStudio.StructureElementName, RockStudio.GenerateUV); } else { if (RockStudio.GenerateUV) { UVMapper.CreateUVMap(rock.GetComponent <MeshFilter>().sharedMesh, rock.transform); } } }
public static void LowPoly(Transform transform, int toolBar, string name, bool GenerateUV) { if (transform == null) { Debug.Log("No appropriate object selected."); return; } MeshFilter meshfilter = transform.GetComponent <MeshFilter>(); if (meshfilter == null || meshfilter.sharedMesh == null) { Debug.Log("No mesh found on the selected object"); return; } GameObject gameobject = transform.gameObject; gameobject.name = name; meshfilter = gameobject.GetComponent <MeshFilter>(); Mesh mesh = meshfilter.sharedMesh; Vector3[] oldVerts = mesh.vertices; int[] triangles = mesh.triangles; Vector3[] vertices = new Vector3[triangles.Length]; for (int i = 0; i < triangles.Length; i++) { vertices[i] = oldVerts[triangles[i]]; triangles[i] = i; } mesh.vertices = vertices; mesh.triangles = triangles; mesh.RecalculateBounds(); mesh.RecalculateNormals(); if (GenerateUV) { UVMapper.CreateUVMap(mesh, gameobject.transform); } }
public void CreateRock(IEnumerable <Vector3> Vertices, Vector3 pos) { rock = new GameObject(TemporaryRockName); rock.transform.position = pos; //Selection.activeGameObject = rock; MeshFilter meshFilter = (MeshFilter)rock.AddComponent(typeof(MeshFilter)); //Add a mesh filter. MeshRenderer renderer = rock.AddComponent(typeof(MeshRenderer)) as MeshRenderer; //Add a mesh renderer. if (MaterialType == TypeOfMaterial.SingleMaterial) { renderer.material = RockMaterial; //Assign single material. } else { renderer.material = Materials[Random.Range(0, Materials.Length)]; //Assigne random material from a collection of materials. } meshFilter.sharedMesh = CreateMesh(Vertices); //Create a mesh. if (TypeOfShading == ShadingType.Flat) { MakeLowPoly(rock.transform, TemporaryRockName, GenerateUV); } else { if (GenerateUV) { UVMapper.CreateUVMap(rock.GetComponent <MeshFilter>().sharedMesh, rock.transform); } } if (OrientationOfRock == RockOrientation.X) { rock.transform.localEulerAngles = new Vector3(0, 90, 0); } if (OrientationOfRock == RockOrientation.Y) { if (TypeOfRock == RockType.Orthorombic) { rock.transform.localEulerAngles = new Vector3(0, 90, 0); } if (TypeOfRock == RockType.TriclinicAndObelisk || TypeOfRock == RockType.Pyramidal) { rock.transform.localEulerAngles = new Vector3(-90, 0, 0); } else { rock.transform.localEulerAngles = new Vector3(90, 0, 0); } } if (OrientationOfRock == RockOrientation.Z) { if (TypeOfRock == RockType.Orthorombic) { rock.transform.localEulerAngles = new Vector3(0, 90, 0); } else { rock.transform.localEulerAngles = new Vector3(0, 0, 0); } } }