Тип "механический"
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
:1234567891011121314151617// 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
:1234// Fill out your copyright notice in the Description page of Project Settings.
#include "MyMechanicalActor.h"
- Теперь вы можете перегрузить один (или несколько) Tick-методов и реализовать вашу механику, как обычно это делается в C++…
- … в заголовочном файле:1
void
Tick(
float
DeltaTime) override;
- … в .cpp-файле:1234
void
AMyMechanicalActor::Tick(
float
DeltaTime)
{
// Ваш код механики
}