void GenerateVoxels(float voxelSize) { Voxels = new List <VoxelRenderer.Voxel>(); Vector3Int voxelVolumeDimensions = (MaxRange - MinRange); int maxNumberOfVoxels = voxelVolumeDimensions.x * voxelVolumeDimensions.y * voxelVolumeDimensions.z; for (int i = 0; i < maxNumberOfVoxels; i++) { VoxelRenderer.Voxel voxel = new VoxelRenderer.Voxel() { Center = new Vector3(Random.Range(MinRange.x, MaxRange.x), Random.Range(MinRange.y, MaxRange.y) + voxelSize, Random.Range(MinRange.z, MaxRange.z)) * 2 * voxelSize, Size = voxelSize, Color = new Vector3(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f)), UV = Vector2.zero }; // Skip if trying to place a voxel at an occupied position. if (Voxels.FindIndex(v => v.Center == voxel.Center) != -1) { continue; } Voxels.Add(voxel); } Material = new VoxelRenderer.VoxelMaterial() { Color = Color.white, Texture = null }; VoxelsVolumeMin = MinRange; VoxelsVolumeMax = MaxRange; }
private void Awake() { if (m_MeshRenderer == null) { m_MeshRenderer = GetComponent <MeshRenderer>(); } if (m_MeshFilter == null) { m_MeshFilter = GetComponent <MeshFilter>(); } Voxels = new List <VoxelRenderer.Voxel>(); Material meshMaterial = m_MeshRenderer.sharedMaterial; Material = new VoxelRenderer.VoxelMaterial() { Color = meshMaterial.HasProperty("_BaseColor") ? meshMaterial.GetColor("_BaseColor") : FallbackColor, Texture = meshMaterial.HasProperty("_BaseMap") ? meshMaterial.GetTexture("_BaseMap") as Texture2D : null }; VoxelsVolumeMin = m_MeshRenderer.bounds.min; VoxelsVolumeMax = m_MeshRenderer.bounds.max; }