====== Тип "механический" ======
ECS явным образом отделяет данные и логику, оперирующую этими данными. Эта логика, в свою очередь, обычно выполняется покадрово (то есть повторяется). Apparatus имплементирует эту функциональность через концепт, называемый //Mechanical// (механический тип). Механические объекты - как многогранный организм, включают несколько механик (Mechanics), которые выполняются внутри них.
===== Организация в C++ =====
Если вы намерены идти C++ путём, создание собственного механического типа проходит примерно так.
- Откройте главное UE File-меню и выберете опцию "New C++ Class...": {{ :en:toolworks:docs:apparatus:ue-file-create-cpp-class.png?nolink |}}
- В открывшемся окне поставьте галочку в чекбоксе "Show All Classes": {{ :en:toolworks:docs:apparatus:ue-add-show-all-cpp-classes.png?nolink |}}
- Теперь вы можете выбрать любой доступный базовый класс, включая классы плагина. Выберете "Mechanical Actor" в качестве базового: {{ :en:toolworks:docs:apparatus:ue-create-cpp-mechanical-actor.png?nolink |}}
- Нажмите "Next", и вы должны увидеть диалоговое окно выбора имени. Назовите создаваемый класс, как надо, и продолжите, кликнув зелёную кнопку "Create Class" внизу: {{ :en:toolworks:docs:apparatus:ue-name-cpp-mechanical-actor.png?nolink&600 |}}
- Новый класс создастся как комбинация хеадера (.h) и файла-ресурса (.cpp). Всё находится в (под)папке Source вашего проекта. Вы должны увидеть файлы в выбранной IDE:{{ :en:toolworks:docs:apparatus:vscode-new-mechanical-actor-class-sources.png?nolink |}}
- Заметим, что вам, возможно, надо будет перекомпилировать проект и/или перезапустить редактор после этого. Не пугайтесь некоторых возможных ошибок, ещё раз соберите IDE-проект, скомпилируйте и запустите вновь.{{ :en:toolworks:docs:apparatus:vscode-generate-project-files.png?nolink |}}
- Наполнение соответствующих файлов должно выглядеть так:
* ''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)
{
// Ваш код механики
}
- Можете создать [[ru:toolworks:docs:apparatus:filter|Фильтр]], чтобы собрать [[ru:toolworks:docs:apparatus:enchaining|цепь]] Чанков/Ремней и [[ru:toolworks:docs:apparatus:iterating|итерироваться]] по ним.