101 lines
2.9 KiB
C#
101 lines
2.9 KiB
C#
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);
|
|
}
|
|
}
|