Если вы всегда хотите создать компонент сцены UnitDesign, вы можете использовать CreateDefaultSubobject
(только c 'tor):
/* .h */
UCLASS()
class AYourActor : public AActor
{
GENERATED_BODY()
public:
AYourActor(FObjectInitializer const& ObjectInitializer);
UPROPERTY(VisibleAnywhere)
USceneComponent* UnitDesign;
};
/* .cpp */
AYourActor::AYourActor(FObjectInitializer const& ObjectInitializer) :
UnitDesign(nullptr) /* this is only needed if UnitDesign is not initialized below */
{
UnitDesign = CreateDefaultSubobject<USceneComponent>(TEXT("Unit Design"));
}
Если это необязательный элемент, то это немного сложнее, вы может создать компонент позже, чем c, но вам нужно быть немного более осознанным, когда заставить его хорошо работать с VisibleAnywhere
. Код для этого будет просто
UnitDesign = NewObject<USceneComponent>(this, FName(*ID));
UnitDesign->RegisterComponent();
Скрытый способ обновить sh панель свойств - это вызвать:
GEditor->SelectActor(this, true, true);
GEditor->SelectNone(true, true);
«Правильный» способ - позвонить SDetailsView::ForceRefresh
от IDetailCustomization
. Честное предупреждение, это огромная задница.
Боковое примечание, что UPROPERTY()
можно использовать только в файле .h
, поскольку он должен быть видимым для инструмента заголовка Unreal.