コード例 #1
0
    void CreateChunk(Vector3 offset)
    {
        TerrainChunk chunk = Instantiate(chunkPrefab, offset, Quaternion.identity).GetComponent <TerrainChunk>();

        chunk.shape = shape;
        chunk.GenTerrain();
        chunks.Add(chunk.CalculateChunkPos(), chunk);
    }
コード例 #2
0
    // 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();
        }
    }