Unreal 4.24.3: как объявить UPROPERTY () внутри. cpp файла - PullRequest
0 голосов
/ 28 мая 2020

Что я хочу сделать:

Создать USceneComponent во время выполнения в классе Actor

    USceneComponent* UnitDesign = NewObject<USceneComponent>(this, FName(*ID));

Что работает:

Определение UnitDesign в заголовочном файле ( .h) работает без проблем ..

UPROPERTY(VisibleAnywhere)  //I can see UnitDesign in World Outliner
USceneComponent* UnitDesign = NewObject<USceneComponent>(this, FName(*ID));

Что у меня не работает:

Определение UnitDesign at CPP Файл (. cpp) внутри BeginPlay () из Класс актера:

UPROPERTY(VisibleAnywhere)  //I can NOT see UnitDesign in World Outliner
USceneComponent* UnitDesign = NewObject<USceneComponent>(this, FName(*ID));

Любые указатели приветствуются.

1 Ответ

3 голосов
/ 28 мая 2020

Если вы всегда хотите создать компонент сцены 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.

...