예제 #1
0
파일: MapView.cs 프로젝트: imkoi/voxcake
    private void Awake()
    {
        _cameraTransform = _camera.transform;

        _voxelGeometryController    = new VoxelGeometryController(8, GetMaxVerticesCount());
        _voxelBuilderController     = new VoxelBuilderController();
        _voxelPhysicsController     = new VoxelPhysicsController();
        _fallingConstructionFactory = new FallingConstructionFactory(_fallingChunksTransform, 32);

        _camera.Hitted += OnHitted;

        var magicaVoxelReader = new MagicaReader();
        var path       = GetPathInStreamingAssets(_volumePath);
        var magicaFile = magicaVoxelReader.LoadFile(path);

        _voxelModel = magicaFile.ToModel(_volumeSize);

        var chunkSize   = _chunkSize;
        var chunksCount = _chunkDrawSize.x * _chunkDrawSize.y * _chunkDrawSize.z;

        Debug.Log($"chunksCount = {chunksCount}");

        for (var i = 0; i < chunksCount; i++)
        {
            var chunkPositionNormalized = VoxelUtility.GetVoxelPosition(i, _chunkDrawSize);
            var chunkIndex      = VoxelChunkUtility.GetIndex(chunkPositionNormalized);
            var chunkPosition   = chunkPositionNormalized * chunkSize;
            var chunkGameObject = new GameObject();
            var chunkView       = chunkGameObject.AddComponent <VolumeChunk>();

            chunkGameObject.name = $"VolumeChunk[{i}]";

            chunkView.SetPosition(new Vector3(chunkPosition.x, chunkPosition.y, chunkPosition.z));
            chunkView.SetParent(_volumeChunksTransform);
            chunkView.SetMaterial(_chunkMaterial);
            chunkView.SetLayer(VolumeChunk.VolumeLayer);

            _chunks[chunkIndex] = chunkView;

            var geometryRequest = GetGeometryRequestById(chunkIndex);
            _chunkRequestQueue.Push(geometryRequest);
        }

        _chunkRenderer = new VoxelChunkRenderer(_cameraTransform, _chunks, _volumeSize, _chunkSize, _chunkDrawSize);
        _chunkRenderer.ChunkUpdated += OnChunkUpdated;
    }
예제 #2
0
        public static VoxelGeometryVolumeRequest CreateVolumeRequest(int chunkIndex,
                                                                     Vector3Int chunkSize, VoxelModel model, Vector3Int chunkDimensions)
        {
            var position = VoxelUtility.GetVoxelPosition(chunkIndex, chunkDimensions);

            var request = new VoxelGeometryVolumeRequest
            {
                chunkPosition         = new Vector3Int(position.x, position.y, position.z),
                chunkSize             = chunkSize,
                scale                 = 1f,
                pivot                 = new Vector3(0.0f, 0.0f, 0.0f),
                model                 = model,
                faceColorMultipliers  = FaceColorMultipliers,
                edgeColorMultiplier   = new Vector3(0.07f, 0.08f, 0.12f),
                cornerColorMultiplier = new Vector3(-0.14f, -0.25f, -0.4f)
            };

            return(request);
        }