为了账号安全,请及时绑定邮箱和手机立即绑定

C# 世界地图生成器问题

C# 世界地图生成器问题

C#
小怪兽爱吃肉 2022-12-24 12:50:05
我正在开发一款包含 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 工作吗?
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

我强烈建议查看 Unity 的工作系统,但你的循环令人难以置信的混乱,不确定那里发生了什么......你似乎也太复杂了。所以这就是我将如何实例化一张 1000x1000 图块的地图,如果我必须实例化它们的话:


public int mapWidth = 30;

public int mapHeight = 30;


void fill()

{

    // Doing this once at the beginning, so it isn't super expensive...

    GameObject basePrefab = GameObject.Find("Dirt"); 

    // Creating 1 Vector3 that we can just update the values on

    Vector3 spawnPosition = Vector3.zero;


    for(int x = 0; x < mapWidth; ++x)

    {

        // Update the spawn x Position

        spawnPosition.x = x;

        for(int y = mapHeight; y > 0; y--)

        {

            // Update the spawn y position

            spawnPosition.y = y;

            Instantiate(basePrefab, spawnPosition, Quaternion.identity);

        }

    } 

}

如果你想阅读或查看类似系统的瓦片地图的对象池示例,这是我不久前写的一个答案应该给你它的精神:What is the fastest method to create and render large number of 2d Unity 中的精灵?


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信