*
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user