using System.Collections; using System.Collections.Generic; using UnityEngine; public class BoxGenerator : MeshProcessor { public Vector3 Size = Vector3.one; public int SliceX; public int SliceY; public int SliceZ; public override void Execute(ProceduralMeshData m) { ProceduralMeshData[] sides = new ProceduralMeshData[6]; PlaneGenerator p = new PlaneGenerator(); p.Width = 1; p.Height = 1; //x+ sides[0] = new ProceduralMeshData(); p.WidthSlices = SliceZ; p.HeightSlices = SliceY; p.Execute(sides[0]); //x- sides[1] = new ProceduralMeshData(); p.Execute(sides[1]); //y+ sides[2] = new ProceduralMeshData(); p.WidthSlices = SliceX; p.HeightSlices = SliceZ; p.Execute(sides[2]); //y- sides[3] = new ProceduralMeshData(); p.Execute(sides[3]); //z+ sides[4] = new ProceduralMeshData(); p.WidthSlices = SliceX; p.HeightSlices = SliceY; p.Execute(sides[4]); //z- sides[5] = new ProceduralMeshData(); p.Execute(sides[5]); //x+ TransformVertexNode transform = new TransformVertexNode(); transform.Offset = Vector3.right*0.5f; transform.Rotation = Quaternion.AngleAxis(-90, Vector3.up) * Quaternion.AngleAxis(-90, Vector3.right); transform.Execute(sides[0]); //x- transform.Offset = Vector3.right * -0.5f; transform.Rotation = Quaternion.AngleAxis(90, Vector3.up) * Quaternion.AngleAxis(-90, Vector3.right); transform.Execute(sides[1]); //y+ transform.Offset = Vector3.up * 0.5f; transform.Rotation = Quaternion.identity; transform.Execute(sides[2]); //y- transform.Offset = Vector3.up * -0.5f; transform.Rotation = Quaternion.AngleAxis(180, Vector3.forward); transform.Execute(sides[3]); //z+ transform.Offset = Vector3.forward * 0.5f; transform.Rotation = Quaternion.AngleAxis(180, Vector3.up) * Quaternion.AngleAxis(-90, Vector3.right); transform.Execute(sides[4]); //z- transform.Offset = Vector3.forward * -0.5f; transform.Rotation = Quaternion.AngleAxis(-90, Vector3.right); transform.Execute(sides[5]); CombineMeshNode combiner = new CombineMeshNode(); combiner.Source.Add(sides[0]); combiner.Source.Add(sides[1]); combiner.Source.Add(sides[2]); combiner.Source.Add(sides[3]); combiner.Source.Add(sides[4]); combiner.Source.Add(sides[5]); combiner.Execute(m); CombineSubmeshesNode submeshCombiner = new CombineSubmeshesNode(); submeshCombiner.Execute(m); transform.Offset = Vector3.zero; transform.Rotation = Quaternion.identity; transform.Scale = Size; transform.Execute(m); } }