====== Тип "механический" ====== 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|итерироваться]] по ним.