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; }
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); }