我正在尝试使用异构磁贴实现平铺游戏;不同大小的瓷砖。 所有瓷砖尺寸均为圆形(至米),使其更容易。 我正在寻找一种算法,以伪随机顺序拟合瓦片,要求必须平铺所有东西。
以下是我写的几行,但是根本不需要。不知何故,瓷砖之间的间距不受尊重。
首先,我生成一个在旅途中创建的perlin噪声图。我使用字典作为我的tilemap。
图块的对象米变量是方形图块的宽度和深度(以米为单位)。 tiles数组中的第一个tile是一个空tile,用于指定跳过。
编辑:我现在看到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);
}
}
}
}
}
答案 0 :(得分:0)
上面的代码有问题,缺少继续。此外,我需要块来使异构磁贴工作。
答案 1 :(得分:0)
缩放问题取决于您导入资产的方式。如果以编程方式创建切片,则它们应为1:1比例;但是,如果您从Max或Maya等DCC工具导入它们,则需要检查模型导入设置中的“glbal scale”设置 - 根据源应用程序和设置,全局比例可能会设置为放大或将进口单位从1:100缩小到100:1。
异构切片非常棘手,因为您必须沿着部分边缘管理边缘匹配。您确定需要异构尺寸吗?