Как найти гексы соседние в unity?
Здравствуйте, гексы имеют 2 координаты q,r, нужны существующие соседи клетки.
Компьютеры и связь
Юридическая консультация
Семья и дом
Еда и кулинария
Города и страны, туризм
Здравствуйте, гексы имеют 2 координаты q,r, нужны существующие соседи клетки.
Координаты
Для axial системы q,r сосед определяется прибавлением одного из шести постоянных смещений. В Unity удобно хранить пару в Vector2Int, договорившись, что x означает q, а y означает r. Это координаты клетки в сетке, а не положение её Transform в мировых метрах.
Перебор
Следующий метод принимает координаты клетки и набор существующих клеток. Поместите его в свой класс сетки и подключите UnityEngine и System.Collections.Generic:
static IEnumerable<Vector2Int> Neighbors(
Vector2Int cell, HashSet<Vector2Int> board)
{
Vector2Int[] directions = {
new(1, 0), new(1, -1), new(0, -1),
new(-1, 0), new(-1, 1), new(0, 1)
};
foreach (Vector2Int direction in directions)
{
Vector2Int next = cell + direction;
if (board.Contains(next))
yield return next;
}
}
Проверка
Для клетки (2,3) кандидаты равны (3,3), (3,2), (2,2), (1,3), (1,4), (2,4). Если все эти координаты есть в board, метод вернёт шесть результатов. Удалите из учебного набора один кандидат и убедитесь, что возвращается пять. Саму центральную клетку метод к её соседям не добавляет.
Границы и система поля
Набор board одновременно определяет границы поля и любые отверстия в нём. Если вам нужны только проходимые соседи, после проверки существования примените отдельное правило препятствий. Не смешивайте отсутствие клетки и временно закрытый проход, если эти состояния различаются в игре.
Этот список направлений относится именно к axial координатам. Для массива со сдвигом чётных или нечётных строк сначала выполните соответствующее преобразование либо используйте таблицы соседей выбранной offset системы. Поворот картинки гекса на экране сам по себе не заменяет соглашение о координатах.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
Датахакер
Датахакер
Как найти гексы соседние в unity?
Проверка через набор сразу решила случай у края поля