我正在尝试建立一个非常简单的类似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还是要使用其他运动组件?
谢谢。