В репозитории представлена имплементация двухуровневой модели симуляции нпс. Основная идея модели:
- Нпс рядом с игроком симулируются каждый индивидуально с ипользованием деревьев поведений
- Нпс, которые отошли достаточно далеко от игрока, симулируются макроскопической гидродинамической моделью
Для этого на игровой сцене размечается навигационный граф, узлы которого обозначают ключевые точки, точки интереса или места перехода одного участка пути в другой, а ребра обозначают пути по которым нпс могут передвигаться.
В макромодели для обычных нпс симулируется только передвижение. Однако есть возможность производить упрощенную симуляцию для нпс в макромодели и отслеживать его перемещение по ней.
Проект является частью магистерской выпускной квалификационной работы по образовательной программе "Технологии разработки компьютерных игр"
На видео ниже показан пример работы модели. Область микроскопического моделирования в данном примере является вся видимая область за исключением левого края, помеченного желтым цветом. Нпс появляются из узлов (показаны как желтые кубы) и следуют к следующему узлу путевого графа. При выходе из области микроскопического моделирвоания нпс агрегируются в макроскопическую модель и продолжают симуляцию там.
На следующем примере показан небольшой замкнутый контур из узлов. В этом контуре находятся 3 важных нпс, симуляция которых в макроскопической модели должна продолжаться. Для демонстрации область микроскопического моделирования была задана квадратом с длиной стороны 5 метров. Для демонстрации макроскопической упрощенной симуляции была добавлена логика передачи информации:
- на старте игры один из важных нпс ялвяется обладателем информации
- раз в 5 секунд обладатель информации может сделать другого важного нпс тоже обладателем информации при условии что расстояние между ними меньше двух метров
- при становлении информатором надо нпс появлсяется цветной шар, обозначающий его статус информатора
Через непродолжительное вермя симуляции все важные нпс будут являтся информаторами. В результате можно увидеть что система способна запоминать и отслеживать важных нпс. Также система позволяет выполнять логику даже при условии что нпс симулируется макроскопическим образом.
Реализация выполнена в игровом движке Unreal Engine 4 версии 4.27.2. Для запуска необходимо запустить проект в Unreal Engine. Движок предоставит возможность сконвертировать проект под вашу версию. Проект необходимо скомпилировать, используя Visual Studio. В проекте есть тестовая игровая сцена, которая распологается по пути Content/ThirdPersonCpp/Maps/ThirdPrsonExampleMap. На этой тестовой сцене можно увидеть показанный выше пример с передачей информации между важными нпс.
Для использования модели необходимо выполнить создавать своих нпс, наследую их от класса Npc. Персонаж игрока также должен являться наследником класса ThirdPersonCharacter. Для работы модели необходимо на сцене разметить навигационный граф. Для этого необходимо расставить объекты класса Node на сцене. В каждом узле можно задать ребра, добавляя в массив Edges объекты и заполняя их параметры. Также важно чтобы на сцене располагался объект класса MacromodelC.
Также можно скачать проект с уже скомпилированными файлами с гугл диска
Автор: Ларионов Станислав
Текст работы представлен в на GitHub