Код класса
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;
public class Box
{
private Mesh _boxMesh;
private Vector3[] _vertexes;
private Vector2[] _uvCoords;
private int[] _tris;
private Vector3 _segsCount;
private Vector3 _size;
private int _polyCount;
private int _triCount;
private int _edgeCount;
private int _vertexCount;
public Mesh BoxMesh
{
get {return _boxMesh;}
}
public Vector3[] Vertexes
{
get {return _vertexes;}
}
public int PolygonsCount
{
get {return _polyCount;}
}
public int TrianglesCount
{
get {return _triCount;}
}
public int EdgesCount
{
get {return _edgeCount;}
}
public int VertexesCount
{
get {return _vertexCount;}
}
public Box()
{
_segsCount = new Vector3(1, 1, 1);
_size = new Vector3(2, 2, 2);
_vertexes = new Vector3[VertexCount()];
_tris = new int[_triCount * 3];
Debug.Log("_vertexes lenght : " + _vertexes.Length.ToString());
CreateVertexes();
}
public Box(Vector3 faceCount, Vector3 size)
{
_segsCount = faceCount;
_size = size;
_vertexes = new Vector3[VertexCount()];
_tris = new int[_triCount * 3];
Debug.Log("_vertexes lenght : " + _vertexes.Length.ToString());
CreateVertexes();
}
private void CreateVertexes()
{
int vertexIndex = 0;
Vector3 startPoint = new Vector3(_size.x / 2,
_size.y / 2,
_size.z / 2);
Vector3 valueDivision = new Vector3(_size.x / _segsCount.x,
_size.y / _segsCount.y,
_size.z / _segsCount.z);
for(int z = 0; z <= _segsCount.z; z++)
{
for(int y = 0; y <= _segsCount.y; y++)
{
for(int x = 0; x <= _segsCount.x; x++)
{
if((x != 0 && y != 0 && z != 0) && ( x != _segsCount.x + 1 && y != _segsCount.y + 1 && z != _segsCount.z + 1))
{
_vertexes[vertexIndex] = new Vector3(startPoint.x - valueDivision.x * x,
startPoint.y - valueDivision.y * y,
startPoint.z - valueDivision.z * z);
vertexIndex++;
}
}
}
}
}
private int PolyCount()
{
int xySide = (int) (_segsCount.x * _segsCount.y);
int xzSide = (int) (_segsCount.x * _segsCount.z);
int yzSide = (int) (_segsCount.y * _segsCount.z);
int totalPoly = (xySide + xzSide + yzSide) * 2;
_polyCount = totalPoly;
return totalPoly;
}
private int TriCount()
{
int totalTri = PolyCount() * 2;
_triCount = totalTri;
return totalTri;
}
private int EdgeCount()
{
int totalEdge = TriCount();
_edgeCount = totalEdge;
return totalEdge;
}
private int VertexCount()
{
int totalVertex = (EdgeCount() - 12) / 2 + 8;
_vertexCount = totalVertex;
return totalVertex;
}
}
using UnityEngine;
public class Box
{
private Mesh _boxMesh;
private Vector3[] _vertexes;
private Vector2[] _uvCoords;
private int[] _tris;
private Vector3 _segsCount;
private Vector3 _size;
private int _polyCount;
private int _triCount;
private int _edgeCount;
private int _vertexCount;
public Mesh BoxMesh
{
get {return _boxMesh;}
}
public Vector3[] Vertexes
{
get {return _vertexes;}
}
public int PolygonsCount
{
get {return _polyCount;}
}
public int TrianglesCount
{
get {return _triCount;}
}
public int EdgesCount
{
get {return _edgeCount;}
}
public int VertexesCount
{
get {return _vertexCount;}
}
public Box()
{
_segsCount = new Vector3(1, 1, 1);
_size = new Vector3(2, 2, 2);
_vertexes = new Vector3[VertexCount()];
_tris = new int[_triCount * 3];
Debug.Log("_vertexes lenght : " + _vertexes.Length.ToString());
CreateVertexes();
}
public Box(Vector3 faceCount, Vector3 size)
{
_segsCount = faceCount;
_size = size;
_vertexes = new Vector3[VertexCount()];
_tris = new int[_triCount * 3];
Debug.Log("_vertexes lenght : " + _vertexes.Length.ToString());
CreateVertexes();
}
private void CreateVertexes()
{
int vertexIndex = 0;
Vector3 startPoint = new Vector3(_size.x / 2,
_size.y / 2,
_size.z / 2);
Vector3 valueDivision = new Vector3(_size.x / _segsCount.x,
_size.y / _segsCount.y,
_size.z / _segsCount.z);
for(int z = 0; z <= _segsCount.z; z++)
{
for(int y = 0; y <= _segsCount.y; y++)
{
for(int x = 0; x <= _segsCount.x; x++)
{
if((x != 0 && y != 0 && z != 0) && ( x != _segsCount.x + 1 && y != _segsCount.y + 1 && z != _segsCount.z + 1))
{
_vertexes[vertexIndex] = new Vector3(startPoint.x - valueDivision.x * x,
startPoint.y - valueDivision.y * y,
startPoint.z - valueDivision.z * z);
vertexIndex++;
}
}
}
}
}
private int PolyCount()
{
int xySide = (int) (_segsCount.x * _segsCount.y);
int xzSide = (int) (_segsCount.x * _segsCount.z);
int yzSide = (int) (_segsCount.y * _segsCount.z);
int totalPoly = (xySide + xzSide + yzSide) * 2;
_polyCount = totalPoly;
return totalPoly;
}
private int TriCount()
{
int totalTri = PolyCount() * 2;
_triCount = totalTri;
return totalTri;
}
private int EdgeCount()
{
int totalEdge = TriCount();
_edgeCount = totalEdge;
return totalEdge;
}
private int VertexCount()
{
int totalVertex = (EdgeCount() - 12) / 2 + 8;
_vertexCount = totalVertex;
return totalVertex;
}
}