예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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);
                }
            }
        }