一、相机跟随
SurCharacter.h
class USpringArmComponent;
class UCameraComponent;
class SURKEAUE_API ASurCharacter : public ACharacter
{
protected:
UPROPERTY(VisibleAnywhere)
USpringArmComponent* SpringArmComp;
UPROPERTY(VisibleAnywhere)
UCameraComponent* CameraComp;
}
SurCharacter.cpp
#include GameFramework/SpringArmComponent.h
#include Camera/CameraComponent.h
ASurCharacter::ASurCharacter()
{
SpringArmComp = CreateDefaultSubobject<USpringArmComponent>("SpringArmComp");
CameraComp = CreateDefaultSubobject<UCameraComponent>("CameraComp");
SpringArmComp->SetupAttachment(RootComponent);
CameraComp->SetupAttachment(SpringArmComp);
}
- 为了编译更快,在.h中声明弹簧臂和相机的class,在.cpp引用相应头文件
- 弹簧臂组件在
GameFramework/SpringArmComponent.h
头文件中;
相机组件在Camera/CameraComponent.h
头文件中
二、人物移动与转向
- 人物移动的相关代码需要编写在自动生成的
SetupPlayerInputComponent
函数中,这个函数中已经传入了PlayerInputComponent
组件 - 人物移动对应轴
Axis
绑定,并指定每次能移动的值(移动速度) - .cpp中编写的所有函数都需要在.h文件中声明
SurCharacter.cpp
void ASurCharacter::MoveForward(float value)
{
AddMovementInput(GetActorForwardVector(), value);
}
void ASurCharacter::MoveRight(float value)
{
AddMovementInput(GetActorRightVector(), value);
}
void ASurCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
PlayerInputComponent->BindAxis("MoveForward", this, &ASurCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &ASurCharacter::MoveRight);
PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
}
- 由移动组件来调用绑定具体的移动方法
- 在UE中设置具体输入,值为1.0向前,值为-1.0向后。
- 后面会修改为UE5的增强输入
- UE中的围绕Z轴旋转称之为YAW,围绕Y轴旋转称之为Pitch,围绕X轴旋转称之为Roll
- 留一个没有理解的问题: 控制器采用的是每一帧都在自增,默认是120帧,如果向前移动默认每帧都加1,到120帧的时候就加速到了120之后在乘以映射的键盘数值就形成了移动的距离。(这段没有看懂)
- 利用UE提供的
AddControllerYawInput()
函数可以得到Yaw方向的旋转。AddControllerPitchInput()
函数可以得到Pitch方向的旋转。
10.设置输入后,还需要在弹簧臂的“摄像机设置”属性中勾选“使用Pawn控制旋转”。