我使用Unity 5创建等距游戏。我已经生成了一个瓷砖网格,效果很好。但是,当我使用两个不同的瓷砖填充网格时(它们的图像大小略有不同),我会在瓷砖之间产生间隙。显而易见的解决方案是创建切片以使它们具有相同的图像大小,但这会阻止我在大于切片大小的切片(例如树)上创建任何内容。
以下是一些要展示的图片:
只有一种类型的图块:
使用两种类型的图块:
这是我用来创建地图的代码:
private void CreateMap() {
float tileWidth;
float tileHeight;
int orderInLayer = 0;
SpriteRenderer r = floorTiles [0].GetComponent<SpriteRenderer> ();
tileWidth = r.bounds.max.x - r.bounds.min.x;
tileHeight = r.bounds.max.y - r.bounds.min.y;
for (int i = 0; i < map.GetLength(0); i++) {
orderInLayer += 1;
for (int j = 0; j < map.GetLength (1); j++) {
Vector2 position = new Vector2 ((j * tileWidth / 2) + (i * tileWidth / 2) + (tileWidth / 2), (j * tileHeight / 2) - (i * tileHeight / 2) + (tileHeight/ 2));
r = map[i,j].GetComponent<SpriteRenderer>();
r.sortingOrder = orderInLayer;
Instantiate(map[i, j], position, Quaternion.identity);
}
}
}
任何帮助都会非常感激,我似乎无法解决它!
答案 0 :(得分:0)
每次创建一个瓷砖时,您似乎都是从头开始计算每个瓷砖的位置。如果您有2个不同大小的瓷砖,那么您的计算会有所不同,因此您的瓷砖中存在间隙。这是因为您只使用当前图块的宽度/高度,而没有考虑任何以前可能是更短/更长的高度/宽度的图块。
鉴于你有不同的高度和宽度,你需要一种方法来计算两者的正确位置,以防止X和Y方向的间隙。我在这里嘲笑了一些东西,但它没有经过考验。更多的概念(?)我想。
float tileHeight = 0;
float tileWidth = 0;
Vector2 position = new Vector2(0,0);
Dictionary<int, float> HeightMap = new Dictionary<int, float>();
for (int iRow = 0; iRow < map.GetLength(0); iRow++)
{
position.x = 0;
orderInLayer += 1;
for (int jColumn = 0; jColumn < map.GetLength (1); jColumn++)
{
position.y = HeightMap[jColumn];
r = map[iRow, jColumn].GetComponent<SpriteRenderer>();
tileWidth = r.bounds.max.x - r.bounds.min.x;
tileHeight = r.bounds.max.y - r.bounds.min.y;
r.sortingOrder = orderInLayer;
position.x += tileWidth / 2;
position.y += tileHeight / 2;
Instantiate(map[iRow, jColumn], position, Quaternion.identity);
HeightMap[jColumn] = position.y;
}
}
我保留了存储高度的最佳方法,或者在您认为合适的情况下实例化HeightMap字典的内容。