Детали - это главные строительные блоки в Apparatus-е. Это высокоуровневые сущности (в отличие от трейтов), которые поддерживают некоторую дополнительную ECS+ функциональность, например, мульти-итерацию и наследование.
Детали наследуются от класса UObject и являются субъектом сборщика мусора и Unreal-овской модели памяти (в то время как трейты используют собственную организацию памяти).
Если надо изменить какие-то составляющие детали, то достаточно обратиться к ним напрямую через оператор обращения к полю →
или не-const метод самой детали. Нету нужды копировать данные детали, применять к ним изменения и устанавливать в сущностный объект.
В качестве оптимизации для некоторой внутренней логики детали не могут быть легко удалены с сущностных объектов. Они могут быть только выключенными, т.е. *disabled*. По сути это то же самое, что и удаление, потому что фильтры следят за состоянием enabled/disabled у детали в контексте отбора сущностей для оперирования.
Чтобы создать деталь, видимую в вашем C++ коде, вам следует сделать следующее:
MyDetail.h
:// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Detail.h" #include "MyDetail.generated.h" /** * */ UCLASS() class ME_API UMyDetail : public UDetail { GENERATED_BODY() };
MyDetail.cpp
:// Fill out your copyright notice in the Description page of Project Settings. #include "MyDetail.h"
float X = 0; float Y = 0;
UPROPERTY(BlueprintReadWrite, EditAnywhere) float X = 0; UPROPERTY(BlueprintReadWrite, EditAnywhere) float Y = 0;