从QuickDraw项目入门,制作一个简单的2D小游戏3
一.动作输入
如视频中操作,创建一个名为Input的文件夹,在里面创建一个Action文件夹,然后在Action文件夹中创建一个输入操作,命名为IA_Attack

回到Input文件夹,创建一个输入映射情景,命名为IMC_Duel

双击IMC_Duel,编辑映射,如下设置,然后保存

回到VS,打开QuickDraw.Build.cs,在其中添加对增强输入模块的支持,代码如下:
using UnrealBuildTool;
public class QuickDraw : ModuleRules
{
public QuickDraw(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Paper2D", "EnhancedInput"});
PrivateDependencyModuleNames.AddRange(new string[] { });
}
}
回到Samurai_Player.h中,改写代码
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Controller.h"
//获取玩家控制器的头文件
#include "Kismet/GameplayStatics.h"
//输入组件头文件
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "InputActionValue.h"
#include "InputMappingContext.h"
////////////////////////////////////////
#include "Samurai.h"
#include "Samurai_Player.generated.h"
/**
*
*/
UCLASS()
class QUICKDRAW_API ASamurai_Player : public ASamurai
{
GENERATED_BODY()
public:
ASamurai_Player();
virtual void BeginPlay();
void Attack();
//输入映射,在蓝图编辑器里选择
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
TObjectPtr<UInputMappingContext> InputMappingContext;
//要绑定的动作
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
TObjectPtr<UInputAction> AttackAction;
};
在Samurai_Player.cpp中如下实现
#include "Samurai_Player.h"
ASamurai_Player::ASamurai_Player()
{
}
void ASamurai_Player::BeginPlay()
{
Super::BeginPlay();
//获取该场景的第一个玩家控制
APlayerController* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);
if (PlayerController)
{
//拥有该角色的控制权
PlayerController->Possess(this);
//加入输入上下文
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
{
Subsystem->AddMappingContext(this->InputMappingContext, 0);
}
}
//绑定动作
if (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(InputComponent))
{
EnhancedInputComponent->BindAction(AttackAction, ETriggerEvent::Started, this, &ASamurai_Player::Attack);
}
}
void ASamurai_Player::Attack()
{
GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Green, FString::Printf(TEXT("Attack")));
}
编译后在实例中选择上下文映射和绑定的动作

然后运行游戏,按下空格会在左上角打印Attack,并且摄像机到精灵的内部去了
二.摄像机设置
感觉这个写成C++不大行,直接跟着视频做成了一个蓝图。添加一个基于Camera Actor的蓝图类,命名为BP_Camera

之后把它拖进场景中,调整到一个合适的位置

回到VS中,在Samurai_Player.cpp中的BeginPlay函数末尾,加如下语句
//获取场景中的第一个ACameraActor单位,然后用它来作为新的镜头位置
ACameraActor* Camera = Cast<ACameraActor>(UGameplayStatics::GetActorOfClass(this->GetWorld(), ACameraActor::StaticClass()));
PlayerController->SetViewTargetWithBlend(Camera);
在Samurai_Player.h中加入新的头文件
//相机头文件
#include "Camera/CameraActor.h"
来到编辑器中,调整相机的曝光选项

在项目设置里关闭自动曝光

关闭运动模糊

调整抗锯齿选项


浙公网安备 33010602011771号