Exemplo n.º 1
0
    void GenerateSurfaceChunk(Vector3 chunkPos)
    {
        Transform newChunk = Instantiate(chunkPrefab, chunkPos, Quaternion.identity, gameObject.transform);

        newChunk.name = "Chunk " + chunkPos.ToString();
        OldChunk currentChunk = newChunk.GetComponent <OldChunk>();

        float[,,] blockList = new float[chunkSize, chunkSize, chunkSize];
        for (int i = (int)chunkPos.x; i < (int)(chunkPos.x) + chunkSize; i++)
        {
            for (int j = (int)chunkPos.y; j < (int)(chunkPos.y) + chunkSize; j++)
            {
                for (int k = (int)chunkPos.z; k < (int)(chunkPos.z) + chunkSize; k++)
                {
                    float height = 0;
                    for (int l = 1; l <= 32; l *= 2)
                    {
                        height += Mathf.PerlinNoise(seed + ((float)i / (frequency / l)), seed + ((float)k / (frequency / l))) * (amplitude / l);
                    }
                    if (Math.Ceiling(height) == j)
                    {
                        blockList[i - (int)chunkPos.x, j - (int)chunkPos.y, k - (int)chunkPos.z] = 1;
                    }
                    else
                    {
                        blockList[i - (int)chunkPos.x, j - (int)chunkPos.y, k - (int)chunkPos.z] = 0;
                    }
                }
            }
        }
        currentChunk.SetFields(chunkPos, chunkSize, blockList);
        currentChunk.MakeMesh();
        generatedChunks.Add(chunkPos);
    }
Exemplo n.º 2
0
    void GenerateChunk(Vector3 chunkPos)
    {
        Transform newChunk = Instantiate(chunkPrefab, chunkPos, Quaternion.identity, gameObject.transform);

        newChunk.name = "Chunk " + chunkPos.ToString();
        OldChunk currentChunk = newChunk.GetComponent <OldChunk>();

        float[,,] blockList = new float[chunkSize, chunkSize, chunkSize];
        for (int i = (int)chunkPos.x; i < (int)(chunkPos.x) + chunkSize; i++)
        {
            for (int j = (int)chunkPos.y; j < (int)(chunkPos.y) + chunkSize; j++)
            {
                for (int k = (int)chunkPos.z; k < (int)(chunkPos.z) + chunkSize; k++)
                {
                    blockList[i - (int)chunkPos.x, j - (int)chunkPos.y, k - (int)chunkPos.z] = perlin3D(i, j, k, 8, 2, frequency, seed);
                }
            }
        }
        blockList = LimitHeight(blockList);
        currentChunk.SetFields(chunkPos, chunkSize, blockList);
        currentChunk.MakeMesh();
        generatedChunks.Add(chunkPos);
    }