Skip to content

LomanTrue/ProcedureGenerationUnity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProcedureGenerationUnity

Прототип процедурной генерации карты состоящая из различных комнат. Проект создан как технический прототип для исследования и демонстрации процедурной генерации.

Код и архитектура

Ключевые компоненты:

  • MapGenerator - выполняет BFS и выбирает какую из комнат ставить следующую
  • StructureGenerator - располагается на каждом префабе комнаты и отвечает за генерацию мебели и стен

Демонстрация

Видео: https://youtu.be/VP_QVPgjiOU

Онлайн WebGL билд: https://lomantrue.github.io/ProcedureGenerationUnity

Фичи

  • Процедурная генерация при запуске игры
  • Генерация на основе seed (одинаковая при одинаковом seed)
  • Параметризуемая логика генерации
  • Контроль размера карты
  • Контроль наполнения комнат
  • Полная параметризация настроек через Inspector
  • Проверка пересечении комнат и соединений между комнатами
  • Спавн объектов в комнатах

Что показывает

  • Работа с алгоритмами графа (BFS)
  • Процедурное мышление
  • Генерация на основе seed
  • Валидация результатов генерации

Логика

Генерация карты построена на обходе всех открытых проемов у комнат, которые находятся на карте (обход BFS).

Изначально имеется пул префабов разных комнат. По seed генерируются какая именно комната будет следующей в карте, в ней по seed открываются и закрываются проходы, а также расставляется мебель.

При подборе комнаты происходит проверка на пересечение, тем самым карта всегда остается валидной.

По итогу имеем такие этапы:

  1. Инициализация seed
  2. Обход BFS по открытым проемам с проверкой размера карты
  • Генерация следующей комнаты
  • Валидация комнаты (проверка пересечений)
  • Применение генерации интерьера и структуры комнаты
  1. Когда размер карты равен параметру: Проверка открытых проходов
  • Если открыт в пустоту - закрываем
  • Если соединен с другим проходом (образовался цикл) - оставляем

Что можно исправить

  • Исправить структуру скриптов для соблюдения принципов SOLID
    • Вынести проверку пересечений в отдельный сервис
    • Уменьшить ответственность StructureGenerator
  • Настроить корректное realtime освещение
  • Разделить скрипты на более мелкие однозадачные функции
  • Повысить читаемость и поддержку StructureGenerator

About

Procedural map generation prototype: interconnected rooms via BFS traversal, seed-based generation, parameterized logic. Unity, C#.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages