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