Тип "механический"
ECS явным образом отделяет данные и логику, оперирующую этими данными. Эта логика, в свою очередь, обычно выполняется покадрово (то есть повторяется). Apparatus имплементирует эту функциональность через концепт, называемый Mechanical (механический тип). Механические объекты - как многогранный организм, включают несколько механик (Mechanics), которые выполняются внутри них.
Организация в C++
Если вы намерены идти C++ путём, создание собственного механического типа проходит примерно так.
- Откройте главное UE File-меню и выберете опцию «New C++ Class…»:

- В открывшемся окне поставьте галочку в чекбоксе «Show All Classes»:

- Теперь вы можете выбрать любой доступный базовый класс, включая классы плагина. Выберете «Mechanical Actor» в качестве базового:

- Нажмите «Next», и вы должны увидеть диалоговое окно выбора имени. Назовите создаваемый класс, как надо, и продолжите, кликнув зелёную кнопку «Create Class» внизу:

- Новый класс создастся как комбинация хеадера (.h) и файла-ресурса (.cpp). Всё находится в (под)папке Source вашего проекта. Вы должны увидеть файлы в выбранной IDE:

- Заметим, что вам, возможно, надо будет перекомпилировать проект и/или перезапустить редактор после этого. Не пугайтесь некоторых возможных ошибок, ещё раз соберите IDE-проект, скомпилируйте и запустите вновь.

- Наполнение соответствующих файлов должно выглядеть так:
MyMechanicalActor.h:// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "MechanicalActor.h" #include "MyMechanicalActor.generated.h" /** * */ UCLASS() class MY_API AMyMechanicalActor : public AMechanicalActor { GENERATED_BODY() };MyMechanicalActor.cpp:// Fill out your copyright notice in the Description page of Project Settings. #include "MyMechanicalActor.h"
- Теперь вы можете перегрузить один (или несколько) Tick-методов и реализовать вашу механику, как обычно это делается в C++…
- … в заголовочном файле:
void Tick(float DeltaTime) override;
- … в .cpp-файле:
void AMyMechanicalActor::Tick(float DeltaTime) { // Ваш код механики }