2. 配置输入以控制相机
我们需要确定相机控制所需进行的操作,然后进行相应设置。 对这个项目,让我们在鼠标右键按住不放的时候来缩短跟随距离并放大视野。 让我们同时使用鼠标来控制视角,并使用WASD键来控制 Pawn 的移动。 要完成此内容,我们应打开 Unreal Engine(虚幻引擎) 编辑器中的 Edit(编辑) 下拉菜单的 Project Settings(项目设置) 。
我们需要按照如下方式来定义一个 Action Mapping(动作映射) 和四个 Axis Mappings(坐标轴映射) :
动作映射 放大 鼠标右键 坐标轴映射 向前移动 W 1.0 S -1.0 向右移动 A -1.0 D 1.0 相机倾斜 MouseY 1.0 相机偏转 MouseX 1.0 如果您想要了解更多关于输入映射的原理,您可以查看玩家输入和Pawns 教程。
现在我们已经完成了对输入的定义,需要写一些代码来对其进行响应。 我们返回 Visual Studio 来进行下一步的工作。
PawnWithCamera.h
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "GameFramework/Pawn.h"
#include "PawnWithCamera.generated.h"
UCLASS()
class HOWTO_PLAYERCAMERA_API APawnWithCamera : public APawn
{
GENERATED_BODY()
public:
// 设置此pawn属性的默认值
APawnWithCamera();
// 当游戏开始或生成时调用
virtual void BeginPlay() override;
// 在每一帧调用
virtual void Tick( float DeltaSeconds ) override;
// 调用以绑定功能到输入
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;
protected:
UPROPERTY(EditAnywhere)
USpringArmComponent* OurCameraSpringArm;
UCameraComponent* OurCamera;
};
PawnWithCamera.cpp
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "HowTo_PlayerCamera.h"
#include "PawnWithCamera.h"
// 设置默认值
APawnWithCamera::APawnWithCamera()
{
// 将此pawn设置为在每一帧都调用Tick()。 如果您不需要这项功能,您可以关闭它以改善性能。
PrimaryActorTick.bCanEverTick = true;
//创建组件
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
OurCameraSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraSpringArm"));
OurCameraSpringArm->AttachTo(RootComponent);
OurCameraSpringArm->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 50.0f), FRotator(-60.0f, 0.0f, 0.0f));
OurCameraSpringArm->TargetArmLength = 400.f
OurCameraSpringArm->bEnableCameraLag = true;
OurCameraSprintArm->CameraLagSpeed = 3.0f
OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("GameCamera"));
OurCamera->AttachTo(OurCameraSpringArm, USpringArmComponent::SocketName);
//控制默认玩家
AutoPossessPlayer = EAutoReceiveInput::Player0;
}
// 当游戏开始或生成时调用
void APawnWithCamera::BeginPlay()
{
Super::BeginPlay();
}
// 在每一帧调用
void APawnWithCamera::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
}
// 调用以绑定功能到输入
void APawnWithCamera::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
Super::SetupPlayerInputComponent(InputComponent);
}