Ursula - это система для создания интерактивных 3D миров на движке Godot Engine с использованием C#. Проект сфокусирован на модульных интерактивных объектах, поведение которых определяется с помощью Иерархических Машин Состояний (HSM), заданных в формате GraphML.
- Движок: Godot Engine (C#).
- Система интерактивных объектов: Центральный компонент
InteractiveObject
с подключаемыми модулями. - Управление поведением: Использование HSM (совместимо с GraphML) для описания сложной логики объектов.
- Модульная архитектура: Разделение функциональности на модули (движение, звук, детекция, таймеры, счетчики, анимация).
- Связь HSM и объектов: Реализована через шину событий/команд (
LocalBus
) и специализированные модули-расширения (HSM*Module.cs
). - Динамическая загрузка: Поддержка загрузки 3D моделей (.obj, .glb) и аудио (.wav, .mp3, .ogg) во время выполнения.
- Каталог объектов: Система для управления библиотекой игровых ассетов и их метаданных (на основе JSON).
- Ассеты: Включает набор 3D-моделей (животные, здания, растения, реквизит), анимаций и материалов.
- Управление проектами: Функционал для создания, загрузки, сохранения и экспорта игровых проектов.
- Dependency Injection: Используется для управления зависимостями между компонентами системы.
- Godot Engine 4+
- C# (.NET)
- GraphML (для определения HSM)
- JSON (для каталога объектов и настроек)
Assets/
: 3D модели, анимации, материалы, звуки, готовые сцены (префабы).Modules/
: Ключевые подсистемы проекта (интерактивные объекты, HSM (Cyberiada), загрузчики ресурсов, каталог моделей).Scripts/
: C# скрипты, реализующие логику компонентов и систем.Prefabs/
: Готовые к использованию сцены объектов и UI.
- Интерактивные объекты (
InteractiveObject
) являются основными сущностями в сцене. - Логика их поведения загружается из файлов
.graphml
и интерпретируется как Иерархическая Машина Состояний (HSM) с помощьюCyberiadaLogic
иCyberiadaHSMConverter
. - Модули-расширения HSM (
HSM*Module.cs
) действуют как мост, транслируя команды и события HSM в вызовы методов конкретных компонентов объекта (например,InteractiveObjectMove
,InteractiveObjectAudio
) через шину событий/команд (LocalBus
). - Физическое движение реализуется
MoveScript
, использующимNavigationAgent3D
иCharacterBody3D
. - Анимации управляются
AnimationPlayer
через скрипты типаBaseAnimation
. - Каталог объектов и загрузчики ресурсов позволяют управлять ассетами и загружать их динамически.
- Система DI управляет созданием и связыванием зависимостей между модулями.
- Клонируйте репозиторий:
git clone https://github.com/kruzhok-team/Ursula.git
- Откройте проект в Godot Engine 4+.
- (Опционально) Выполните необходимые шаги для настройки.
MIT