Он работает для большинства из них:
Проблема начинается, когда высота намного больше ширины (3x9, 3x11, 5x11 и т. д.).
Как вы можете видеть, первая строка неуместна, дальнейшее увеличение высоты будет повторять этот шаблон.
Вот код (Примечание: мои z и y для координат куба поменялись местами):
void SpawnHexGrid(int Width, int Height)
{
int yStart = -Height / 2;
int yEnd = yStart + Height;
for (int y = yStart; y < yEnd; y++)
{
int xStart = -(Width + y) / 2;
int xEnd = xStart + Width;
if (Width % 2 == 0)
{
if (y % 2 == 0)
{
xStart++;
}
}
else
{
if (y % 2 != 0)
{
xStart++;
}
}
Debug.Log("y: " + y + " , Start: " + xStart + " , End: " + xEnd);
for (int x = xStart; x < xEnd; x++)
{
SetHexagon(new Cube(x, y));
}
}
}
Редактировать:
После перехода на решение @Idle_Mind моя сетка выглядит так:
Редактировать снова:
Я нашел решение, после перехода на решение @Idle_Mind я исправил наклон, снова используя y:
int xStart = -Width / 2 - (y / 2);
но это вызвало ту же проблему, что и раньше, но на этот раз я понял, что это как-то связано со способом округления int, когда y отрицательно, xStart будет на 1 ниже, чем ожидалось, поэтому я просто добавляю 1 всякий раз, когда y отрицательно:
int add = 0;
if (y < 0)
{
add = 1;
}
int xStart = -Width / 2 - ((y - add) / 2);
Теперь это работает как шарм, спасибо всем.