Динамический расчет сетки в Unity не правильно индексирует треугольники - PullRequest
0 голосов
/ 23 мая 2018

Я строю игру с Unity и хочу создать карту квадратных плиток, и я использую сетку для нее, но по какой-то причине моя сетка не отображается правильно.Последние полтора столбца невидимы.

Вот несколько картинок:

Затененный вид

Каркасный вид

А вот код:

void GenerateMesh()
{
    mesh = GetComponent<MeshFilter>().mesh;
    mesh.Clear();

    Vector3[] vertices = new Vector3[(Map.WIDTH + 1) * (Map.HEIGHT + 1)];
    int nextIndex = 0;
    for (int x = 0; x <= Map.WIDTH; x++)
    {
        for (int y = 0; y <= Map.HEIGHT; y++)
        {
            vertices[nextIndex] = new Vector3(x * Square.SIZE, 0, y * Square.SIZE);
            nextIndex++;
        }
    }

    int[] triangles = new int[6 * Map.WIDTH * Map.HEIGHT];
    nextIndex = 0;
    for (int x = 0; x < Map.WIDTH; x++)
    {
        for (int y = 0; y < Map.HEIGHT; y++)
        {
            triangles[nextIndex] = x * Map.HEIGHT + y;
            triangles[nextIndex + 1] = x * Map.HEIGHT + y + 1;
            triangles[nextIndex + 2] = (x + 1) * Map.HEIGHT + y + 1;

            nextIndex += 3;

            triangles[nextIndex] = x * Map.HEIGHT + y;
            triangles[nextIndex + 1] = (x + 1) * Map.HEIGHT + y + 1;
            triangles[nextIndex + 2] = (x + 1) * Map.HEIGHT + y;

            nextIndex += 3;
        }
    }

    mesh.vertices = vertices;
    mesh.triangles = triangles;

}

Map.WIDTH, Map.HEIGHT и Square.SIZE являются константами, и их значения равны 80, 45, 1.

Спасибо взаранее!

1 Ответ

0 голосов
/ 23 мая 2018

Ваш первый внутренний цикл для значений y использует <=

for (int y = 0; y <= Map.HEIGHT; y++)

Таким образом, ваш второй набор циклов должен использовать Map.Height + 1 для расчета индекса:

for (int x = 0; x < Map.WIDTH; x++)
{
    for (int y = 0; y < Map.HEIGHT; y++)
    {
        triangles[nextIndex] = x * (Map.HEIGHT + 1) + y;
        triangles[nextIndex + 1] = x * (Map.HEIGHT + 1) + y + 1;
        triangles[nextIndex + 2] = (x + 1) * (Map.HEIGHT + 1) + y + 1;

        nextIndex += 3;

        triangles[nextIndex] = x * (Map.HEIGHT + 1) + y;
        triangles[nextIndex + 1] = (x + 1) * (Map.HEIGHT + 1) + y + 1;
        triangles[nextIndex + 2] = (x + 1) * (Map.HEIGHT + 1) + y;

        nextIndex += 3;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...