Детали - это главные строительные блоки в 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;