Exemple #1
0
        public void Voxelize(int density)
        {
            _explosionPool = GameObject.FindGameObjectWithTag("ExplosionPool").GetComponent <ObjectPool>();
            _collider      = GetComponent <Collider>();
            var bounds = _collider.bounds;

            _voxelizer = new Voxeliser(bounds, density, density, density);
            _voxelizer.Voxelize(transform);
            var gridCubeSize = new Vector3(
                bounds.size.x / density,
                bounds.size.y / density,
                bounds.size.z / density);
            var worldCentre   = bounds.min + gridCubeSize / 2;
            var voxelRoot     = new GameObject("Voxel Root");
            var size          = _collider.bounds.size;
            var rootTransform = voxelRoot.transform;

            for (int x = 0; x < density; x++)
            {
                for (int y = 0; y < density; y++)
                {
                    for (int z = 0; z < density; z++)
                    {
                        if (_voxelizer.VoxelMap[x][y][z])
                        {
                            var go = _explosionPool.Get(typeof(ExplosionCube)) as ExplosionCube;
                            go.FadeOut();
                            var rb = go.GetComponent <Rigidbody>();
                            rb.AddForce(ExplosionDirection() * Random.Range(400, 800) * size.magnitude);
                            go.transform.position = new Vector3(
                                x * gridCubeSize.x,
                                y * gridCubeSize.y,
                                z * gridCubeSize.z) + worldCentre;
                            go.transform.rotation   = Quaternion.identity;
                            go.transform.localScale = gridCubeSize;
                            go.transform.SetParent(rootTransform, true);
                        }
                    }
                }
            }
            Destroy(gameObject);
        }
	private void Run()
	{
		_voxeliser = new Voxeliser(_bounds, _xDensity, _yDensity, _zDensity);
		_voxeliser.Voxelize(root);
	}
 private void Run()
 {
     _voxeliser = new Voxeliser(_bounds, _xDensity, _yDensity, _zDensity);
     _voxeliser.Voxelize(root);
 }