Прототип процедурной генерации карты состоящая из различных комнат. Проект создан как технический прототип для исследования и демонстрации процедурной генерации.
Ключевые компоненты:
- MapGenerator - выполняет BFS и выбирает какую из комнат ставить следующую
- StructureGenerator - располагается на каждом префабе комнаты и отвечает за генерацию мебели и стен
Видео: https://youtu.be/VP_QVPgjiOU
Онлайн WebGL билд: https://lomantrue.github.io/ProcedureGenerationUnity
- Процедурная генерация при запуске игры
- Генерация на основе seed (одинаковая при одинаковом seed)
- Параметризуемая логика генерации
- Контроль размера карты
- Контроль наполнения комнат
- Полная параметризация настроек через Inspector
- Проверка пересечении комнат и соединений между комнатами
- Спавн объектов в комнатах
- Работа с алгоритмами графа (BFS)
- Процедурное мышление
- Генерация на основе seed
- Валидация результатов генерации
Генерация карты построена на обходе всех открытых проемов у комнат, которые находятся на карте (обход BFS).
Изначально имеется пул префабов разных комнат. По seed генерируются какая именно комната будет следующей в карте, в ней по seed открываются и закрываются проходы, а также расставляется мебель.
При подборе комнаты происходит проверка на пересечение, тем самым карта всегда остается валидной.
По итогу имеем такие этапы:
- Инициализация seed
- Обход BFS по открытым проемам с проверкой размера карты
- Генерация следующей комнаты
- Валидация комнаты (проверка пересечений)
- Применение генерации интерьера и структуры комнаты
- Когда размер карты равен параметру: Проверка открытых проходов
- Если открыт в пустоту - закрываем
- Если соединен с другим проходом (образовался цикл) - оставляем
- Исправить структуру скриптов для соблюдения принципов SOLID
- Вынести проверку пересечений в отдельный сервис
- Уменьшить ответственность StructureGenerator
- Настроить корректное realtime освещение
- Разделить скрипты на более мелкие однозадачные функции
- Повысить читаемость и поддержку StructureGenerator