void AddVoxelToMesh(Vector3Int posInt, VoxelMesh voxelMesh, MeshData meshData) { VoxelData voxel = voxelMesh.GetVoxel(posInt); if (voxel == null) { return; } Vector3 pos = new Vector3(posInt.x * settings.voxelSize.x, posInt.y * settings.voxelSize.y, posInt.z * settings.voxelSize.z); pos -= centerPos; if (!voxel.IsVisible) { return; } VoxelData voxelUp = voxelMesh.GetVoxel(posInt.x, posInt.y + 1, posInt.z); if (voxelUp == null || !voxelUp.IsVisible) { //UP meshData.AddVertex(new Vector3(pos.x, pos.y + settings.voxelSize.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y + settings.voxelSize.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y + settings.voxelSize.y, pos.z)); meshData.AddVertex(new Vector3(pos.x, pos.y + settings.voxelSize.y, pos.z)); meshData.AddQuadTriangles(); SetUVsVoxel(voxel, meshData.uv); } VoxelData voxelDown = voxelMesh.GetVoxel(posInt.x, posInt.y - 1, posInt.z); if (voxelDown == null || !voxelDown.IsVisible) { //Down meshData.AddVertex(new Vector3(pos.x, pos.y, pos.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y, pos.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x, pos.y, pos.z + settings.voxelSize.z)); meshData.AddQuadTriangles(); SetUVsVoxel(voxel, meshData.uv); } VoxelData voxelFront = voxelMesh.GetVoxel(posInt.x, posInt.y, posInt.z + 1); if (voxelFront == null || !voxelFront.IsVisible) { //Front meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y + settings.voxelSize.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x, pos.y + settings.voxelSize.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x, pos.y, pos.z + settings.voxelSize.z)); meshData.AddQuadTriangles(); SetUVsVoxel(voxel, meshData.uv); } VoxelData voxelBack = voxelMesh.GetVoxel(posInt.x, posInt.y, posInt.z - 1); if (voxelBack == null || !voxelBack.IsVisible) { //Back meshData.AddVertex(new Vector3(pos.x, pos.y, pos.z)); meshData.AddVertex(new Vector3(pos.x, pos.y + settings.voxelSize.y, pos.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y + settings.voxelSize.y, pos.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y, pos.z)); meshData.AddQuadTriangles(); SetUVsVoxel(voxel, meshData.uv); } VoxelData voxelRight = voxelMesh.GetVoxel(posInt.x + 1, posInt.y, posInt.z); if (voxelRight == null || !voxelRight.IsVisible) { //Right meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y, pos.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y + settings.voxelSize.y, pos.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y + settings.voxelSize.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x + settings.voxelSize.x, pos.y, pos.z + settings.voxelSize.z)); meshData.AddQuadTriangles(); SetUVsVoxel(voxel, meshData.uv); } VoxelData voxelLeft = voxelMesh.GetVoxel(posInt.x - 1, posInt.y, posInt.z); if (voxelLeft == null || !voxelLeft.IsVisible) { //Left meshData.AddVertex(new Vector3(pos.x, pos.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x, pos.y + settings.voxelSize.y, pos.z + settings.voxelSize.z)); meshData.AddVertex(new Vector3(pos.x, pos.y + settings.voxelSize.y, pos.z)); meshData.AddVertex(new Vector3(pos.x, pos.y, pos.z)); meshData.AddQuadTriangles(); SetUVsVoxel(voxel, meshData.uv); } }