- Создается карта точек с помощью алгоритма Poisson Disk Sampling;
- Точки соединяются между собой с помощью алгоритма Delaunay triangulation;
- Из треугольников формируется граф;
- По графу ищем кратчайший путь от старта до финиша по алгоритму Дийктры;
- Исключаем n случайных точек найденного пути из графа (по желанию, включаем k случайных точек из списка выключенных)
- Повторяем п. 4-5 несколько раз;
- Рисуем новый граф только из найденных путей.
- Для каждого узла графа генерируется одна из локаций в случайном порядке (кроме старта и финиша). Но в моем случае обязательно должно быть 3 сундука и 3 эпичных врага, остальные локации - обычные враги;
- Граф отображается на сцене.
- Скачайте проект и добавьте его через Unity Hub;
- В Unity запустите сцену SampleScene - сгенерируется карта с параметрами по умолчанию;
- Параметры генерации можно править в объекте Core на сцене;
- Исправьте параметры и нажмите "generate new map".
- Radius - отвечает за размер карты;
- MinDistanse - минимальное расстояние между точками;
- PointsPerAttempt - в алгоритме Пуассона: сколько раз точка попытается найти свободное место для генерации. 30 - оптимальное число;
- TotalIterToFindPath - сколько раз нужно найти кратчаший путь. Чем больше значение, тем ветвистее карта.
- MaxPointDeactivationForIter - сколько точек исключать из графа на каждой итерации поиска пути; Чем больше значение, тем меньше пути соединяются между собой;
- MaxPointActivationForIter - сколько точек из списка исключенных снова включать в граф на каждой итерации поиска пути, Чем больше значение, тем больше соединений между путями;
Идея алгоритма генерации
Алгоритм триангуляции Делоне
Обожаю её