Files
2025-05-13 05:25:23 +03:00

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);
}
}