Exemplo n.º 1
0
        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;
        }