private void SetupParticles() { particleSystem.Clear(true); particleSystem.gravityModifier = 0; Vector3 offset = voxelData.pivot; if (center) { offset.x = (float)voxelData.width / 2f; offset.y = (float)voxelData.height / 2f; offset.z = (float)voxelData.depth / 2f; } List <ParticleSystem.Particle> voxs = new List <ParticleSystem.Particle>(); for (int x = 0; x < voxelData.width; x++) { for (int y = 0; y < voxelData.height; y++) { for (int z = 0; z < voxelData.depth; z++) { if (voxelData.FilledVoxel(x, y, z)) { if (removeHidden && !voxelData.IsVisible(x, y, z)) { continue; } Vector3 pos = new Vector3(x, y, z); pos -= offset - new Vector3(.5f, .5f, .5f); pos *= scale; //pos += this.transform.root.position; ParticleSystem.Particle p = new ParticleSystem.Particle { startLifetime = float.PositiveInfinity, remainingLifetime = float.PositiveInfinity, startSize = scale, startColor = voxelData.VoxelColor(x, y, z), position = pos, velocity = Vector3.zero }; voxs.Add(p); } } } } voxelParticles = voxs.ToArray(); UpdateVoxels(); }
private void MakeMap(int ox, int oy, int oz) { for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { for (int z = 0; z < d; z++) { if (!data.FilledVoxel(x + ox, y + oy, z + oz)) { map[x, y, z] = data.IsVisible(x, y, z); } } } } }
private void RemoveHidden(VoxelData data) { for (int x = 0; x < data.width; x++) { for (int y = 0; y < data.height; y++) { for (int z = 0; z < data.depth; z++) { if (!data.IsVisible(x, y, z)) { data.SetVoxel(x, y, z, 0); } } } } }
public PreviewVoxelMesh(VoxelData data) { List <Vector3> verts = new List <Vector3>(); List <int> idxs = new List <int>(); List <Color32> colors = new List <Color32>(); for (int x = 0; x < data.width; x++) { for (int y = 0; y < data.height; y++) { for (int z = 0; z < data.depth; z++) { if (data.IsVisible(x, y, z)) { int i = verts.Count; Color32 col = data.VoxelColor(x, y, z); float c = ((float)((data.GetVoxel(x, y, z) - 1))) / 256; Vector2 uv = new Vector2(c, 0); //Top... verts.Add(new Vector3(x, y + 1, z)); verts.Add(new Vector3(x, y + 1, z + 1)); verts.Add(new Vector3(x + 1, y + 1, z + 1)); verts.Add(new Vector3(x + 1, y + 1, z)); colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col); idxs.Add(i + 0); idxs.Add(i + 1); idxs.Add(i + 2); idxs.Add(i + 0); idxs.Add(i + 2); idxs.Add(i + 3); i += 4; //Bottom... verts.Add(new Vector3(x, y, z)); verts.Add(new Vector3(x, y, z + 1)); verts.Add(new Vector3(x + 1, y, z + 1)); verts.Add(new Vector3(x + 1, y, z)); colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col); idxs.Add(i + 0); idxs.Add(i + 2); idxs.Add(i + 1); idxs.Add(i + 0); idxs.Add(i + 3); idxs.Add(i + 2); i += 4; //Front... verts.Add(new Vector3(x, y, z)); verts.Add(new Vector3(x, y + 1, z)); verts.Add(new Vector3(x + 1, y + 1, z)); verts.Add(new Vector3(x + 1, y, z)); colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col); idxs.Add(i + 0); idxs.Add(i + 1); idxs.Add(i + 2); idxs.Add(i + 0); idxs.Add(i + 2); idxs.Add(i + 3); i += 4; //Back... verts.Add(new Vector3(x, y, z + 1)); verts.Add(new Vector3(x, y + 1, z + 1)); verts.Add(new Vector3(x + 1, y + 1, z + 1)); verts.Add(new Vector3(x + 1, y, z + 1)); colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col); idxs.Add(i + 0); idxs.Add(i + 2); idxs.Add(i + 1); idxs.Add(i + 0); idxs.Add(i + 3); idxs.Add(i + 2); i += 4; //Left... verts.Add(new Vector3(x, y, z)); verts.Add(new Vector3(x, y + 1, z)); verts.Add(new Vector3(x, y + 1, z + 1)); verts.Add(new Vector3(x, y, z + 1)); colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col); idxs.Add(i + 0); idxs.Add(i + 3); idxs.Add(i + 2); idxs.Add(i + 0); idxs.Add(i + 2); idxs.Add(i + 1); i += 4; //Right... verts.Add(new Vector3(x + 1, y, z)); verts.Add(new Vector3(x + 1, y + 1, z)); verts.Add(new Vector3(x + 1, y + 1, z + 1)); verts.Add(new Vector3(x + 1, y, z + 1)); colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col); idxs.Add(i + 0); idxs.Add(i + 1); idxs.Add(i + 2); idxs.Add(i + 0); idxs.Add(i + 2); idxs.Add(i + 3); i += 4; } } } } //Debug.Log(verts.Count); //Debug.Log(uvs.Count); //Debug.Log(idxs.Count); mesh = new Mesh(); mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; mesh.subMeshCount = 1; mesh.vertices = verts.ToArray(); mesh.SetIndices(idxs.ToArray(), MeshTopology.Triangles, 0); mesh.SetColors(colors); mesh.RecalculateNormals(); }