Разработка игровой логики

В Nau Engine существует несколько способов реализации игровой логики. В бета-версии вы можете использовать как скриптовые компоненты на C++, так и скрипты на Lua (с перспективой использования TypeScript). Данная статья посвящена созданию скриптовых компонентов на C++. Мы рассмотрим ключевые аспекты этого процесса: наследование от базового класса Component, реализацию интерфейса IComponentUpdate для обновления компонента каждый кадр и поддержку рефлексии для работы с компонентом в редакторе.

Если же вы предпочитаете использовать скрипты на Lua, обратитесь к документации по настройке и использованию ScriptManager. Обратите внимание, что в бета-версии функциональность некоторых возможностей может быть ограничена.

Создание скриптового компонента на C++

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

  • Скриптовый компонент, как и любой другой компонент в системе GOC, наследуется от базового класса Component.

  • Наверняка, вам потребуется, чтобы ваш компонент обновлялся каждый кадр вместе с остальными компонентами. Для этого необходимо, чтобы ваш класс реализовывал интерфейс IComponentUpdate.

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


Предположим, вы хотите создать скриптовый компонент MyComponent

  1. Cоздайте файлы MyComponent.h и MyComponent.cpp в папке source/game/main_module вашего проекта.

Создание файлов
  1. Ниже представлен шаблон кода класса 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};
    
  2. В файл MyComponent.cpp поместите следующий код:

    1#include "MyComponent.h"
    2
    3NAU_IMPLEMENT_DYNAMIC_OBJECT(MyComponent)
    4
    5void MyComponent::updateComponent(float dt)
    6{
    7}
    
  3. Необходимо также зарегистрировать класс MyComponent в движке. Для этого в файле source/game/main_module/module.cpp в тело метода initialize добавьте следующий код:

    nau::getServiceProvider().addClass<MyComponent>();
    
  4. Для отображения компонента в редакторе требуется сохранить изменения в проекте Visual Studio, а затем перезапустить редактор (открыть-закрыть). Результат компиляции проекта можно отследить в редакторе.

    Результат компиляции

Для углубленной работы с компонентами рекомендуется обратититься к руководству по API движка.

Отладка пользовательского кода

Для отладки C++ кода в бета-версии Nau Engine рекомендуется следующий подход:

  1. Запустите debug-версию редактора: debug-версия редактора содержит отладочную информацию, необходимую для работы отладчика. Подробные шаги по сборке редактора описаны в статье Установка Nau Engine

  2. Откройте ваш проект в debug-версии редактора: это позволит вам воспроизвести ситуацию, в которой возникает ошибка.

  3. Закройте редактор.

  4. Откройте файл решения (.sln) в Visual Studio: Для отладки кода вам потребуется открыть решение (solution) вашего проекта в Visual Studio. Файл решения обычно находится в папке build вашего проекта.

  5. Отлаживайте код: Используйте стандартные инструменты отладки Visual Studio (точки останова, пошаговое выполнение, просмотр переменных) для поиска и исправления ошибок в вашем коде.

Этот процесс может показаться несколько громоздким, но он позволяет использовать мощные инструменты отладки Visual Studio.


Менеджер скриптов

script_manager/script_manager_doc.html