本文具体操作的录屏视频:https://www.bilibili.com/video/BV1Ri4y1s7uN
1.创建项目
1.1打开EPIC Games,启动Unreal Engine 4.25.1。
1.2选择New Project Categories下面的Games,点击next。
1.3选择Blank,点击next。
1.4选择C++和with starter content,其它默认,工程命名MyProject,点击Create Project。
2.新建C++脚本,创建用于控制的物体和观察的摄像机
2.1新建C++,选择父类Pawn,点击next。
2.2命名MyPawn,点击Create Class。
2.3在MyPawn.h的脚本中,添加如下代码:
UPROPERTY(EditAnywhere)
USceneComponent* OurVisibleComponent;
2.4在MyPawn.cpp脚本的AMyPawn::AMyPawn中添加如下代码:
// 将该pawn设为由最小编号玩家控制
AutoPossessPlayer = EAutoReceiveInput::Player0;
// 创建可附加内容的虚拟根组件。
RootComponent = CreateDefaultSubobject(TEXT(“RootComponent”));
// 创建相机和可见对象
UCameraComponent* OurCamera = CreateDefaultSubobject(TEXT(“OurCamera”));
OurVisibleComponent = CreateDefaultSubobject(TEXT(“OurVisibleComponent”));
// 将相机和可见对象附加到根组件。偏移并旋转相机。
OurCamera->SetupAttachment(RootComponent);
OurCamera->SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f));
OurCamera->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f));
OurVisibleComponent->SetupAttachment(RootComponent);
2.5并添加头文件
#include “Camera/CameraComponent.h”
2.6保存,并Build Solution。
2.7回到Unreal界面,将MyPawn脚本拖入,即可看到新建摄像机观察到的现象。
2.8选中刚拖入的物体,在details下选择OurVisibleComponent(Inherited),再在Static Mesh选择一个物体,例如Shape_Cone,即为我们后续能控制的物体。
3.设置输入对应的按键
3.1在Unreal界面点击edit->project settings->Engine->Input。
3.2在右侧Bindings下的Axis Mapping,添加MoveX对应按键W(Scale = 1)和S(Scale = -1),添加MoveY对应按键A(Scale = -1)和D(Scale = 1)。自动保存,直接关闭窗口即可。
4.输入控制物体移动代码
4.1在MyPawn.h申明函数和变量
//输入函数
void Move_XAxis(float AxisValue);
void Move_YAxis(float AxisValue);
//输入变量
FVector CurrentVelocity;
4.2在MyPawn.cpp定义函数
void AMyPawn::Move_XAxis(float AxisValue)
{
// 以100单位/秒的速度向前或向后移动
CurrentVelocity.X = FMath::Clamp(AxisValue, -1.0f, 1.0f) * 100.0f;
}
void AMyPawn::Move_YAxis(float AxisValue)
{
// 以100单位/秒的速度向右或向左移动
CurrentVelocity.Y = FMath::Clamp(AxisValue, -1.0f, 1.0f) * 100.0f;
}
4.3在AMyPawn::SetupPlayerInputComponent 中将按键和对应函数绑定
// 对两个移动轴“MoveX”和“MoveY”的值逐帧反应。
InputComponent->BindAxis(“MoveX”, this, &AMyPawn::Move_XAxis);
InputComponent->BindAxis(“MoveY”, this, &AMyPawn::Move_YAxis);
4.4在AMyPawn::Tick中添加
// 根据“MoveX”和“MoveY”轴处理移动
{
if (!CurrentVelocity.IsZero())
{
FVector NewLocation = GetActorLocation() + (CurrentVelocity * DeltaTime);
SetActorLocation(NewLocation);
}
}
4.5保存,Build Solution。回到Unreal界面点击Play,在用鼠标点一下窗口,就可以用WSAD控制物体移动了。
参考资料:
https://docs.unrealengine.com/zh-CN/Programming/Tutorials/PlayerInput/index.html
需要自己加一个头文件