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

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

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

  • Скриптовый компонент, как и любой другой компонент в системе 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 движка.