Разработка игровой логики¶
В Nau Engine существует несколько способов реализации игровой логики.
В бета-версии вы можете использовать как скриптовые компоненты на C++,
так и скрипты на Lua (с перспективой использования TypeScript).
Данная статья посвящена созданию скриптовых компонентов на C++.
Мы рассмотрим ключевые аспекты этого процесса: наследование от базового класса Component
,
реализацию интерфейса IComponentUpdate
для обновления компонента каждый кадр и поддержку
рефлексии для работы с компонентом в редакторе.
Если же вы предпочитаете использовать скрипты на Lua, обратитесь к документации по настройке и использованию ScriptManager. Обратите внимание, что в бета-версии функциональность некоторых возможностей может быть ограничена.
Создание скриптового компонента на C++¶
В бета версии пользователь может реализовать логику для своего игрового проекта с помощью скриптовых компонентов, написанных на языке С++. Подчеркнем факторы, на которые необходимо обратить внимание при создании собственного класса компонента.
Скриптовый компонент, как и любой другой компонент в системе GOC, наследуется от базового класса Component.
Наверняка, вам потребуется, чтобы ваш компонент обновлялся каждый кадр вместе с остальными компонентами. Для этого необходимо, чтобы ваш класс реализовывал интерфейс IComponentUpdate.
Для того, чтобы вы могли воспользоваться созданным вами компонентом в редакторе, необходимо, чтобы созданный компонент поддерживал рефлексию.
Предположим, вы хотите создать скриптовый компонент MyComponent
Cоздайте файлы
MyComponent.h
иMyComponent.cpp
в папкеsource/game/main_module
вашего проекта.
Ниже представлен шаблон кода класса
MyComponent
, объявленного в файлеMyComponent.h
согласно факторам, изложенным выше. Данный класс готов к использованию в качестве основы для ваших скриптовых компонентов.1#pragma once 2 3#include "nau/scene/components/component.h" 4#include "nau/scene/components/component_life_cycle.h" 5#include "nau/scene/scene_object.h" 6 7class MyComponent final : public nau::scene::Component, 8 public nau::scene::IComponentUpdate 9{ 10 NAU_OBJECT(MyComponent, nau::scene::Component, nau::scene::IComponentUpdate) 11 NAU_DECLARE_DYNAMIC_OBJECT 12 13 void updateComponent(float dt) override; 14};
В файл
MyComponent.cpp
поместите следующий код:1#include "MyComponent.h" 2 3NAU_IMPLEMENT_DYNAMIC_OBJECT(MyComponent) 4 5void MyComponent::updateComponent(float dt) 6{ 7}
Необходимо также зарегистрировать класс MyComponent в движке. Для этого в файле
source/game/main_module/module.cpp
в тело методаinitialize
добавьте следующий код:nau::getServiceProvider().addClass<MyComponent>();
Для отображения компонента в редакторе требуется сохранить изменения в проекте Visual Studio, а затем перезапустить редактор (открыть-закрыть). Результат компиляции проекта можно отследить в редакторе.
Для углубленной работы с компонентами рекомендуется обратититься к руководству по API движка.
Отладка пользовательского кода¶
Для отладки C++ кода в бета-версии Nau Engine рекомендуется следующий подход:
Запустите debug-версию редактора: debug-версия редактора содержит отладочную информацию, необходимую для работы отладчика. Подробные шаги по сборке редактора описаны в статье Установка Nau Engine
Откройте ваш проект в debug-версии редактора: это позволит вам воспроизвести ситуацию, в которой возникает ошибка.
Закройте редактор.
Откройте файл решения (.sln) в Visual Studio: Для отладки кода вам потребуется открыть решение (solution) вашего проекта в Visual Studio. Файл решения обычно находится в папке
build
вашего проекта.Отлаживайте код: Используйте стандартные инструменты отладки Visual Studio (точки останова, пошаговое выполнение, просмотр переменных) для поиска и исправления ошибок в вашем коде.
Этот процесс может показаться несколько громоздким, но он позволяет использовать мощные инструменты отладки Visual Studio.
Менеджер скриптов