C#统一生成器世界六角形

时间:2019-01-31 19:21:43

标签: unity3d random game-engine

我做了一些更改。 1°为暂时简化代码,我使用盒子。 2°我正在使用数学。PerlinNoise练习,但是有些网格远离其他网格。 3°我需要用木块砌很多,但它们是圆形的。 到目前为止,我已经能够在这里执行此操作,我将留下代码和图像来尝试描述我的问题。

Terrain bug

What I need to create

public void Start()
{
    myPos = this.transform.position;
    CreateMap(CreateMapMatrix(100, 40),100, 40);

}

public Vector3[,] CreateMapMatrix(int width, int height)
{
    matrixMap = new Vector3[width, height];

    for (int x = 0; x < width; x++)
    {
        for (int z = 0; z < height; z++)
        {

            float h = Mathf.PerlinNoise((seed + myPos.x + x) / width,
                (myPos.z + z) / height) * x;

            h = Mathf.Floor(h);

            matrixMap[x, z] = new Vector3(h, 0, z);
        }

    }

    return matrixMap;

}



    void CreateMap(Vector3[,] pos, int width, int height)
    {
        for (int x = 0; x < width; x++)
        {
            for (int z = 0; z < height; z++)
            {
                GameObject Obj = Instantiate(hexTransform[0]);
            Obj.transform.position = pos[x,z];

            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您应该尝试使用 Perlin Noise 来完成世界的生成。 Minecraft和Raft等游戏都利用了它。

https://docs.unity3d.com/ScriptReference/Mathf.PerlinNoise.html

https://forum.unity.com/threads/open-source-procedural-hexagon-terrain.233296/