虚幻5入门,MashRunner项目1
继续之前油管上Cobra Code的The Ultimate Unreal Engine 2D Game Development Course课程的学习,这是第二个项目MashRunner
一.创建项目
启动虚幻引擎,创建一个空白项目,命名为MashRunner。之后打开VS,在MashRunner.Build.cs中添加一下插件包
using UnrealBuildTool;
public class MashRunner : ModuleRules
{
public MashRunner(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Paper2D", "EnhancedInput" });
PrivateDependencyModuleNames.AddRange(new string[] { });
}
}
回到编辑器中,添加一个新的Basic关卡


在内容中创建一个文件夹Maps,然后在其中保存当前关卡,命名为MAP_Debug

在项目设置中,关闭运动模糊

抗锯齿选择FXAA

在内容浏览器中,创建一个文件夹PaperSprites,然后将下载下来的素材导入

对Background和Goal文件夹中的素材,选中右键,创建他们的精灵形式。而对于Runner文件夹中的精灵表,右键选择提取精灵,设置选取参数后提取精灵

删除多余的空白精灵

选择0号和1号精灵建立动作书,命名为FB_Runner_Idle,选择剩余的精灵建立动作书,命名为FB_Runner_Run

编辑FB_Runner_Idle,调整播放速率

二.绑定动作,控制角色
在内容浏览器中创建Input文件夹,在Input文件夹中创建Actions文件夹,在文件夹中建立输入操作,分别命名为IA_PowerLeft和IA_PowerRight

在Input文件夹中建立映射上下文,命名为IMC_Runner

编辑IMC_Runner,选择按键映射

新建一个基于PaperCharacter的C++类,命名为Runner

然后进入VS实现加入动作,在Runner.h中写
#pragma once
#include "CoreMinimal.h"
#include "PaperCharacter.h"
#include "Runner.generated.h"
class UInputMappingContext;
class UInputAction;
UCLASS()
class MASHRUNNER_API ARunner : public APaperCharacter
{
GENERATED_BODY()
public:
//输入上下文,以及动作
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TObjectPtr<UInputMappingContext> MappingContextRunner;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TObjectPtr<UInputAction> ActionPowerLeft;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TObjectPtr<UInputAction> ActionPowerRight;
private:
//左键和A键按下后发生的事件
void EventPowerLeft();
//右键和D键按下后发生的事件
void EventPowerRight();
virtual void BeginPlay() override;
};
在Runner.cpp中这样写
#include "Kismet/GameplayStatics.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "InputAction.h"
#include "InputMappingContext.h"
#include "Runner.h"
void ARunner::BeginPlay()
{
Super::BeginPlay();
//如同上一个例子,取得世界中第一个玩家的控制权,并将控制权转到Runner类上
APlayerController* PlayerController = UGameplayStatics::GetPlayerController(this->GetWorld(), 0);
//添加映射上下文
if (PlayerController)
{
PlayerController->Possess(this);
UEnhancedInputLocalPlayerSubsystem* LocalPlayerSubsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer());
if (LocalPlayerSubsystem)
{
LocalPlayerSubsystem->AddMappingContext(MappingContextRunner, 0);
}
}
//绑定动作
UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(this->InputComponent);
if (EnhancedInputComponent)
{
EnhancedInputComponent->BindAction(ActionPowerLeft, ETriggerEvent::Started, this, &ARunner::EventPowerLeft);
EnhancedInputComponent->BindAction(ActionPowerRight, ETriggerEvent::Started, this, &ARunner::EventPowerRight);
}
}
void ARunner::EventPowerLeft()
{
GEngine->AddOnScreenDebugMessage(-1, 2.0, FColor::Green, FString(TEXT("Left")));
}
void ARunner::EventPowerRight()
{
GEngine->AddOnScreenDebugMessage(-1, 2.0, FColor::Red, FString(TEXT("Right")));
}
回到虚幻编辑器,到素材文件夹中,通过属性矩阵批量编辑,调整所有精灵的尺寸,调整逐单元像素为0.25


在内容浏览器的根目录创建一个Blueprints的文件,再在其中创建一个基于Runner类的蓝图类,命名为BP_Runner,然后编辑BP_Runner

调整精灵位置,使其大部分位于碰撞框内

再建立相机和相机杆,调整相机杆的角度。这部分其实都能在C++里做,但我觉得不够直观,最好还是在蓝图里做

之后再建立一个基于GameMode的C++类,命名为GM_Runner

在GM_Runner.h中声明构造函数,然后在GM_Runner.cpp中实现,将默认pawn类设置为BP_Runner类
#include "Runner.h"
#include "GM_Runner.h"
AGM_Runner::AGM_Runner()
{
TCHAR* BP_RunnerPath = TEXT("/Game/Blueprints/BP_Runner.BP_Runner_C");
UClass* BP_RunnerClass = LoadClass<APawn>(nullptr, BP_RunnerPath);
this->DefaultPawnClass = BP_RunnerClass;
}
回到编辑器中,在项目设置选择初始关卡和游戏模式

拖动一个玩家出生点至游戏关卡中

运行游戏可以看到镜头对着小人,按键盘左右方向键和AD键,会出现打印信息。

浙公网安备 33010602011771号