c# - 不同尺寸的等距图 block 无法正确呈现

标签 c# unity3d isometric

我正在使用 Unity 5 创建等距游戏。我生成了一个瓷砖网格,效果很好。但是,当我使用两个不同的图 block 填充网格时(它们的图像尺寸略有不同),图 block 之间会出现间隙。显而易见的解决方案是创建图 block ,使它们的图像大小都相同,但这会阻止我在图 block 上创建任何大于图 block 大小的东西(例如树)。

这里有一些图片来演示:

只有一种瓷砖:enter image description here

有两种瓷砖:enter image description here

这是我用来创建 map 的代码:

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);              

        }
    }

}

任何帮助将不胜感激,我似乎无法修复它!

最佳答案

您似乎在每次创建瓷砖时都从头开始计算每个瓷砖的位置。如果您有 2 个不同大小的瓷砖,那么您的计算结果会有所不同,因此您的瓷砖中会有间隙。这是因为您只使用了当前图 block 的宽度/高度,而没有考虑到任何先前可能具有更短/更长高度/宽度的图 block 。

鉴于您有不同的高度和宽度,您需要一种方法来计算两者的正确位置,以防止在 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 字典内容的最佳方式留给您认为合适的方式。

关于c# - 不同尺寸的等距图 block 无法正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31147355/

相关文章:

c# - C#/WPF 中的选项卡式界面

c# - 如何使用php将UWP中的图像保存到MYsql中

javascript - 等距图 block 图中的 Z 轴

java - 等距图 block 选择

c# - 实现更好的策略模式

javascript - 将值传递给 jQuery 成功函数中的 Bootstrap 模式

c# - 在 Unity 中创建程序网格生成器时出现尺寸问题

c# - 如何将 Unity 支持添加到 NuGet 包?

c# - 按钮 onClick 不会与对象发生碰撞

opengl - 使用 Opengl 进行等距投影