void CreateChunk(Vector3 offset) { TerrainChunk chunk = Instantiate(chunkPrefab, offset, Quaternion.identity).GetComponent <TerrainChunk>(); chunk.shape = shape; chunk.GenTerrain(); chunks.Add(chunk.CalculateChunkPos(), chunk); }
// Update is called once per frame void Update() { player.readChunkData(); player.readPastChunk(); List <Vector3> removePlease = new List <Vector3>(); if (player.changedChunks()) { foreach (TerrainChunk chunk in chunks.Values) { Vector3 displacement = chunk.CalculateChunkPos() - player.getChunkPosition(); if (Mathf.Abs(displacement.x) >= 3) { removePlease.Add(chunk.CalculateChunkPos()); chunk.gameObject.transform.Translate(new Vector3(-5 * 39 * Mathf.Sign(displacement.x), 0, 0)); needUpdate.Enqueue(chunk); chunk.gameObject.SetActive(false); } else if (Mathf.Abs(displacement.y) >= 3) { removePlease.Add(chunk.CalculateChunkPos()); chunk.gameObject.transform.Translate(new Vector3(0, -5 * 39 * Mathf.Sign(displacement.y), 0)); needUpdate.Enqueue(chunk); chunk.gameObject.SetActive(false); } else if (Mathf.Abs(displacement.z) >= 3) { removePlease.Add(chunk.CalculateChunkPos()); chunk.gameObject.transform.Translate(new Vector3(0, 0, -5 * 39 * Mathf.Sign(displacement.z))); needUpdate.Enqueue(chunk); chunk.gameObject.SetActive(false); } } } foreach (Vector3 remove in removePlease) { chunks.Remove(remove); } if (needUpdate.Count > 0) { TerrainChunk chunk = needUpdate.Dequeue(); chunks.Add(chunk.CalculateChunkPos(), chunk); chunk.Reload(); } }