void MakeSphere(Vector3Int start, Vector3Int end) { Vector3Int size = end - start + Vector3Int.one; Vector3Int normalInt = new Vector3Int( Mathf.Abs(Mathf.RoundToInt(normal.x)), Mathf.Abs(Mathf.RoundToInt(normal.y)), Mathf.Abs(Mathf.RoundToInt(normal.z))); VoxelMesh.Direction dir = VoxelMesh.Direction.MAX; List <Vector3Int> points = null; if (normalInt.x != 0) { dir = VoxelMesh.Direction.Right; points = GetSphere(size.z, size.y, size.x); } else if (normalInt.y != 0) { dir = VoxelMesh.Direction.Up; points = GetSphere(size.x, size.z, size.y); } else if (normalInt.z != 0) { dir = VoxelMesh.Direction.Front; points = GetSphere(size.x, size.y, size.z); } foreach (var item in points) { VoxelData voxel = null; if (dir == VoxelMesh.Direction.Right) { voxel = voxelMesh.GetVoxel(start.x + item.z, start.y + item.y, start.z + item.x); } else if (dir == VoxelMesh.Direction.Up) { voxel = voxelMesh.GetVoxel(start.x + item.x, start.y + item.z, start.z + item.y); } else if (dir == VoxelMesh.Direction.Front) { voxel = voxelMesh.GetVoxel(start.x + item.x, start.y + item.y, start.z + item.z); } if (voxel != null) { voxel.Copy(voxelMesh.voxelTemplate); voxelMesh.SetVoxelVisible(voxel.Position, mode != ToolMode.Sub); } } }
void AddPlanesHelper() { VoxelMesh voxelMesh = (VoxelMesh)target; if (voxelMesh == null) { Debug.LogError("VoxelMesh target is null"); return; } ClearPlaneHealper(); for (VoxelMesh.Direction dir = 0; dir < VoxelMesh.Direction.MAX; dir++) { GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Quad); Vector3 normal = VoxelMesh.GetVectorFromDirection(dir); plane.transform.rotation = Quaternion.LookRotation(normal); Vector3 center = (voxelMesh.meshSize); center.Set(center.x / 2f, center.y / 2f, center.z / 2f); plane.transform.position = center; switch (dir) { case VoxelMesh.Direction.Up: plane.transform.position = plane.transform.position + Vector3.up * (voxelMesh.meshSize.y / 2f); plane.transform.localScale = new Vector3(voxelMesh.meshSize.x, voxelMesh.meshSize.z, 1); break; case VoxelMesh.Direction.Down: plane.transform.position = plane.transform.position + Vector3.down * (voxelMesh.meshSize.y / 2f); plane.transform.localScale = new Vector3(voxelMesh.meshSize.x, voxelMesh.meshSize.z, 1); break; case VoxelMesh.Direction.Left: plane.transform.position = plane.transform.position + Vector3.left * (voxelMesh.meshSize.x / 2f); plane.transform.localScale = new Vector3(voxelMesh.meshSize.z, voxelMesh.meshSize.y, 1); break; case VoxelMesh.Direction.Right: plane.transform.position = plane.transform.position + Vector3.right * (voxelMesh.meshSize.x / 2f); plane.transform.localScale = new Vector3(voxelMesh.meshSize.z, voxelMesh.meshSize.y, 1); break; case VoxelMesh.Direction.Front: plane.transform.position = plane.transform.position + Vector3.forward * (voxelMesh.meshSize.z / 2f); plane.transform.localScale = new Vector3(voxelMesh.meshSize.x, voxelMesh.meshSize.y, 1); break; case VoxelMesh.Direction.Back: plane.transform.position = plane.transform.position + Vector3.back * (voxelMesh.meshSize.z / 2f); plane.transform.localScale = new Vector3(voxelMesh.meshSize.x, voxelMesh.meshSize.y, 1); break; default: Debug.Log("Error Direction"); break; } planesHelper.Add(plane); } }