Как добавить актера и переместить его в Unreal Editor?

#unreal-engine4

#unreal-engineer4

Вопрос:

Я новичок в разработке игр. Пройдите обучающий курс, чтобы начать (https://docs.unrealengine.com/latest/INT/Programming/QuickStart/7/index.html ) Я создал класс AMyActorTest extended AActor:

 #include "TestUProject.h"
#include "MyActorTest.h"


AMyActorTest::AMyActorTest(const class FPostConstructInitializePropertiesamp; PCIP)
    : Super(PCIP)
{
    MyNumber = 12;
}

void AMyActorTest::BeginPlay()
{
    Super::BeginPlay();

    if (GEngine)
    {
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, TEXT("Hello World!"));
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, FString::FromInt(MyNumber));
    }

}
  

У меня проблема в том, что я не могу переместить в редакторе в AActor после размещения его в окне просмотра. Я читал, что мне не хватало RootComponent для моего актера, но я не понимаю, как его добавить (возможно, я не до конца понимаю актеров). Могу ли я помочь вам с моим исходным кодом для решения моей проблемы? Этот код выполняется с точки зрения обучения.
Моя цель — добавить актера и иметь возможность перемещать и поворачивать его.

Ответ №1:

Пожалуйста, добавьте этот код

 RootComponent = PCIP.CreateDefaultSubobject<USceneComponent>(this, TEXT("Root"));
  

в ваш конструктор. Вот и все. Если вы хотите добавить другие компоненты, вы можете использовать аналогичный код (в этом примере создается UInstancedStaticMeshComponent :

 UInstancedStaticMeshComponent* instancedComp = PCIP.CreateDefaultSubobject<UInstancedStaticMeshComponent>(RootComponent, TEXT("SubMeshInstanced"));
instancedComp->AttachTo(RootComponent);  // this is important!

// this part is specific to this component 
// (although all are common to other types of your Root subitems)

instancedComp->SetStaticMesh(mesh);       

instancedComp->SetMaterial(0, material);
instancedComp->bOwnerNoSee = false;
instancedComp->bCastDynamicShadow = false;
instancedComp->CastShadow = false;
instancedComp->SetHiddenInGame(false);
instancedComp->SetMobility(EComponentMobility::Static);