如何在虚幻引擎4中正确使用运动组件?

时间:2019-05-17 19:24:00

标签: unreal-engine4

我正在尝试建立一个非常简单的类似RTS的相机,该相机可以在wasd或箭头键的压力下移动。但是我无法使其正常工作。

我有一个播放器控制器,可以像这样处理输入:

void AMyPlayerController::SetupInputComponent()
{
    Super::SetupInputComponent();

    InputComponent->BindAxis("CameraForward", this, &AMyPlayerController::CameraForward);
}

void AMyPlayerController::CameraForward(float Amount)
{
    MyRtsCameraReference->CameraForward(Amount);
}

在继承自APawn的摄影演员中,我这样初始化:

ARtsCamera::ARtsCamera()
{
    PrimaryActorTick.bCanEverTick = true;

    CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComponent"));
    SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));

    // I tried to use a static mesh in place of this but nothing changes.
    SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));

    MovementComponent = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("MovementComponent"));

    SpringArm->TargetArmLength = 500.f;

    SetRootComponent(SceneRoot);
    SpringArm->SetupAttachment(SceneRoot);
    CameraComponent->SetupAttachment(SpringArm);

    SpringArm->AddLocalRotation(FRotator(0.f, -50.f, 0.f));
}

我尝试这样处理运动:

void ARtsCamera::CameraForward(float Amount)
{
    if (Amount != 0)
    {
        // Here speed is a float used to control the actual speed of this movement.
        // If Amount is printed here, I get the correct value of 1/-1 at the pressure of w/s.
        MovementComponent->AddInputVector(GetActorForwardVector() * Amount * Speed);
    }
}

然后在我的设置中,创建一个蓝图,从中继承该蓝图,以向关卡设计阶段公开一些参数,例如Speed或弹簧臂长度等,但这不是我要使用的问题。 C ++类的行为是相同的。

以下内容按预期工作(除了当我旋转相机时矢量被弄乱的事实),但我想使用运动组件。

void ARtsCamera::CameraForward(float Amount)
{
    if (Amount != 0)
    {
        AddActorWorldOffset(GetActorForwardVector() * Amount * CameraMovingSpeed);
    }
}

移动性设置为可移动。到目前为止,一切似乎都很简单,没有编译错误,但是actor并没有移动。我想念什么?

您还将为此使用FloatingPawnMovement还是要使用其他运动组件?

谢谢。

0 个答案:

没有答案