0

我正在尝试使用异构瓷砖实现平铺游戏;不同大小的瓷砖。所有的瓷砖尺寸都是四舍五入的(到一米),以使其更容易。我正在寻找一种以伪随机顺序拟合瓷砖的算法,要求当然所有东西都必须平铺。

下面是我写的几行,但它不能按需要工作。不知何故,瓷砖之间的间距没有得到尊重。

首先,我生成了一个在旅途中创建的 perlin 噪声图。我为我的瓷砖地图使用字典。

瓷砖的对象米变量是方形瓷砖的宽度和深度,以米为单位。瓦片数组中的第一个瓦片是一个空瓦片,用于指定跳过。

编辑:我现在看到 Unity 中存在缩放问题,当我将比例 1 应用于游戏中的平面时,它会导致大小为 10。有人可以对此提供解释吗?

 for(int i=-viewSpreadMeters;i<=viewSpreadMeters;i++)
        {
            for(int j=-viewSpreadMeters;j<=viewSpreadMeters;j++)
            {   
                int x = currentTerrainID[0] + i;
                int y = currentTerrainID[1] + j;

                if (!tileMap.ContainsKey(x, y)) {
                    int id = noiseMap[x, y];
                    int iteratedTiles = 0;
                Restart:
                    for (int k = 1; k < tiles[id].meters; k++) {
                        for (int l = 1; l < tiles[id].meters; l++) {
                            int x2 = x + k;
                            int y2 = y + l;
                            if (tileMap.ContainsKey(x2, y2)) {
                                int prevMeters;
                                do {
                                    iteratedTiles++;
                                    print ("Iterated tiles" + iteratedTiles);
                                    if (iteratedTiles >= tiles.Length - 1) {
                                        id = 0;
                                        goto EndLoop;
                                    }
                                    prevMeters = tiles[id].meters;
                                    id++;
                                    id %= tiles.Length;
                                    if (id == 0) id++;
                                } while(tiles[id].meters >= prevMeters);                            
                                goto Restart;
                            }
                        }
                    }
                EndLoop:
                    tileMap.Add(x, y, id);
                    for (int k = 1; k < tiles[id].meters; k++) {
                        for (int l = 1; l < tiles[id].meters; l++) {
                            int x2 = x + k;
                            int y2 = y + l;
                            tileMap.Add(x2, y2, 0);
                        }
                    }
                }
            }
        }
4

2 回答 2

0

缩放问题取决于您如何导入资产。如果以编程方式创建图块,则它们的比例应为 1:1;但是,如果您从 Max 或 Maya 等 DCC 工具导入它们,则需要检查模型导入设置中的“全局比例”设置 - 根据源应用程序和那里的设置,全局比例可能会设置为放大或将进口单位从 1:100 缩小到 100:1。

异构图块很棘手,因为您必须管理沿部分边缘的边缘匹配。你确定你需要不同的尺寸吗?

于 2013-03-31T20:15:24.040 回答
0

上面的代码有一个错误,缺少继续。此外,我需要块来使异构瓷砖工作。

于 2013-03-31T19:42:57.387 回答