C# 世界地图生成器问题

我正在开发一款包含 1000 x 1000 正方形平铺地图的游戏,但我遇到了问题。


我尝试制作两个不同的脚本来解决这个问题。第一个是对我需要的草率方法。我的第二个脚本是一种更有效的方法来满足我的需要。


脚本 1:


 void fill()

    {

        for (float i = 0; i != 1000; i++)

        {

            Instantiate(GameObject.Find("Dirt"), new Vector2(xPos++, yPos), Quaternion.identity);

            xrepeat++;

            if (xrepeat == 1000)

            {

                xPos = 0;

                yPos = yPos - 1;

                yrepeat++;

                if(yrepeat != 1000)

                {

                    i = 0;

                    xPos = 0;

                }

                if(xPos < 0) //Prevents an overflow.

                {

                    break;

                }

            }

        }

脚本 2:


    void buildx()

    {

        for (int i = 1000; i != 0; i--)

        {

            Instantiate(GameObject.Find("Dirt"), new Vector2(xPos++, yPos), Quaternion.identity);

            if (xPos == 1000)

            {

                buildy();

            }

        }

    }

    void buildy()

    {

        if (yPos == -1000)

        {

            Destroy(this); // Job is done, time to pack up

        }

        else

        {

            for (int i = 1000; i != 0; i--)

            {

                Instantiate(GameObject.Find("Dirt"), new Vector2(xPos, yPos--), Quaternion.identity);

                buildx();

            }

        }

    }

第一个脚本将我的泥土块复制了 1000 次,然后将 y 轴减去 1 并重复直到达到配额。那种工作但它在工作结束时放弃了。第二个脚本在 x 轴和 y 轴之间来回来回检查 1000 配额,但由于某种原因它冻结了。


我几乎放弃了脚本 1 而选择了脚本 2,因为我认为脚本 2 效率更高。


有什么办法可以让脚本 2 工作吗?


小怪兽爱吃肉
浏览 108回答 1
1回答

大话西游666

我强烈建议查看 Unity 的工作系统,但你的循环令人难以置信的混乱,不确定那里发生了什么......你似乎也太复杂了。所以这就是我将如何实例化一张 1000x1000 图块的地图,如果我必须实例化它们的话:public int mapWidth = 30;public int mapHeight = 30;void fill(){&nbsp; &nbsp; // Doing this once at the beginning, so it isn't super expensive...&nbsp; &nbsp; GameObject basePrefab = GameObject.Find("Dirt");&nbsp;&nbsp; &nbsp; // Creating 1 Vector3 that we can just update the values on&nbsp; &nbsp; Vector3 spawnPosition = Vector3.zero;&nbsp; &nbsp; for(int x = 0; x < mapWidth; ++x)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // Update the spawn x Position&nbsp; &nbsp; &nbsp; &nbsp; spawnPosition.x = x;&nbsp; &nbsp; &nbsp; &nbsp; for(int y = mapHeight; y > 0; y--)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Update the spawn y position&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spawnPosition.y = y;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Instantiate(basePrefab, spawnPosition, Quaternion.identity);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp;}如果你想阅读或查看类似系统的瓦片地图的对象池示例,这是我不久前写的一个答案应该给你它的精神:What is the fastest method to create and render large number of 2d Unity 中的精灵?
打开App,查看更多内容
随时随地看视频慕课网APP