UE5.1.1 C++ 从0开始 (1.人物移动)

这篇具有很好参考价值的文章主要介绍了UE5.1.1 C++ 从0开始 (1.人物移动)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开个天坑,UE5.1.1的移动代码做了一个大更新,对于我这种万年蓝图然后正在转C++的人来说可以说是个挑战也可以说是个更方便我去工作的一个点。同时斯坦福大学的那个教程的开头几个章节就不适用了,对于学习UE5.1.1的同学来说。所以我这里会尽量每天跟着斯坦福的教程走同时把学习到的东西(包括但不限于课堂的作业和ue的新特性如何使用的问题)写到博客上。

废话少说,先上对于我来说较为重磅的一个点:增强上下文输入

我在B站上面看到没人写,也没有人讲这个东西,所以干脆自己从官方的第三人称游戏入手,先看看官方的代码是怎么写的以及是怎么设置的。

官方的代码我这里就不重复输入了,我的博客里面有用中文注释写过一个我对于官方代码的理解,链接在这里

UE5.1.1版本第三人称模板Character C++文件分析

我分析完代码之后,想着自己上手先照着代码抄一遍加深理解,于是开了个空的项目从头开始实现这些功能。但是遇到了一个大问题,那就是一个报错。

UE5.1.1 C++ 从0开始 (1.人物移动)

解决方案:

错误原因一:

报错原因是组件的BlueprintReadOnly属性只能在private状态内声明,不然就会出错。

UE5.1.1 C++ 从0开始 (1.人物移动)

错误原因二:

我们的空项目内的Build.cs文件内是不会有EnhancedInput这个插件包的声明的,我们需要在AddRange函数后面加上这个包的包名。

UE5.1.1 C++ 从0开始 (1.人物移动)

以上两个问题是我在自己尝试重现功能的时候遇到的问题。

下面是我的创建的character类的.h文件以及.cpp文件

SCharacter.h文件

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
//需要在Build.cs文件中添加EnhancedInput路径,UE才能识别到InputActionValue.h头文件
#include "InputActionValue.h"
#include "SCharacter.generated.h"




UCLASS(config = Game)
class ACTIONROGUELIKE_API ASCharacter : public ACharacter
{
	GENERATED_BODY()

	UPROPERTY(VisibleAnywhere)
	class USpringArmComponent* SpringArmComp;

	UPROPERTY(VisibleAnywhere)
	class UCameraComponent* CameraComp;

	UPROPERTY(EditAnywhere, Category = Input)
	class UInputMappingContext* DefaultMappingContext;

	UPROPERTY(EditAnywhere,  Category = Input)
	class UInputAction* MoveAction;

	UPROPERTY(EditAnywhere,  Category = Input)
	class UInputAction* JumpAction;

public:
	// Sets default values for this character's properties
	ASCharacter();

protected:

		// Called when the game starts or when spawned
	virtual void BeginPlay() override;

protected:
	void Move(const FInputActionValue& Value);

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

};

SCharacter.cpp文章来源地址https://www.toymoban.com/news/detail-433505.html

// Fill out your copyright notice in the Description page of Project Settings.


#include "SCharacter.h"
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/Controller.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
//#include "../../../../../UE_5.1/Engine/Plugins/EnhancedInput/Source/EnhancedInput/Public/EnhancedInputSubsystems.h"
//#include "../../../../../UE_5.1/Engine/Plugins/EnhancedInput/Source/EnhancedInput/Public/EnhancedInputComponent.h"


// Sets default values
ASCharacter::ASCharacter()
{
 	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
	SpringArmComp->SetupAttachment(RootComponent);

	CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
	CameraComp->SetupAttachment(SpringArmComp);

}

// Called when the game starts or when spawned
void ASCharacter::BeginPlay()
{
	Super::BeginPlay();
	if (APlayerController* PlayerController = Cast<APlayerController>(Controller))
	{
		if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
		{
			Subsystem->AddMappingContext(DefaultMappingContext, 0);
		}
	}

	
}

void ASCharacter::Move(const FInputActionValue& Value)
{
	FVector2D MovementVector = Value.Get<FVector2D>();

	if (Controller!=nullptr)
	{
		const FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);

		const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
		const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

		AddMovementInput(ForwardDirection, MovementVector.Y);
		AddMovementInput(RightDirection, MovementVector.X);
	}
}

// Called every frame
void ASCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

// Called to bind functionality to input
void ASCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
	{
		EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &ASCharacter::Move);
	}

}


到了这里,关于UE5.1.1 C++ 从0开始 (1.人物移动)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE5.1.1C++从0开始(4.虚幻的接口以及交互功能)

    这一个章节对于第一次接触虚幻的人来说可以说是最绕的一个点,因为老师突然给你塞了很多的概念,对于这一块的学习,我个人的推荐是:先把蓝图搞明白了,再对应到C++的代码中,不然一定会被整的晕头转向。还是,有不懂的点就来问我。 主要有几个大点: 接口 自定义

    2024年02月04日
    浏览(30)
  • UE5.1.1创建C++工程失败解决办法

    闲来无事,更新了一下UE5.1.1,妈蛋创建C++项目居然失败, 错误截图如下: 妈蛋,后面一堆乱码,鬼知道是啥错误! 咋解决?步步高打火机,直接复制第一段的Running后面的代码到cmd中执行。 这下看的懂了, ‘dotnet’ 不是内部或外部命令,也不是可运行的程序 一般出现xxx不

    2024年02月01日
    浏览(38)
  • UE5 日记(人物连招:蒙太奇动画通知(含视频链接))

    教程 https://www.youtube.com/watch?v=sWpENaVGj2Mlist=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXiindex=10pp=iAQB 已搭载战斗系统模块,可以收到输入指令 第一次攻击: 第一次攻击,设置Attacking为真。当连招断开时,设置Attacking未假。 若Attacking为真时,按下攻击键,想要连击,设置save attack为真;若Attacking为

    2024年02月06日
    浏览(34)
  • UE5学习笔记(1)——从源码开始编译安装UE5

    0.1 在windows的话,建议装一个Git bash,同时还要有自己的github账号,注册github账号这里就不再赘述了,安装git bash后,设置自己的github账号。或者在windows装一个WSL。 0.2 把自己的github账号关联Epic官方,必须关联之后才能下载Unreal的源码。关联方式见官方教程 0.3 安装VS 2022,这里

    2024年02月08日
    浏览(31)
  • 【虚幻引擎】UE4/UE5鼠标点击事件实现物体移动

     在UE4/UE5中,引擎有它自己的一套框架体系,虚幻就是基于这一个框架体系来实现的。其中就有PlayerController(玩家控制器),玩家控制器中就有对鼠标的一系列设置,包括显示鼠标,允许点击事件等。  1.创建PlayerController,命名为MyPlayerController 2.打开MyPlayerController,勾选参数

    2024年02月10日
    浏览(55)
  • UE4: Niagara系统实现雨天效果,并跟随人物移动

    1.创建一个Niagara系统 选择Fountain选项,点一下加号,再点完成: 命名一下打开: 先从粒子生成的方向入手,在Niagara的界面中删掉“Add Velocity in Cone”,并添加“Add Velocity”,这样预览效果中的粒子就从椎体向上喷发,变成向下发射。 删掉之后: 然后将sphere location也删除,因

    2024年02月07日
    浏览(43)
  • UE5的项目建立及UE5(虚幻引擎5)个人视角移动按键操作及运行项目/day.2

    进入UE5的界面就是这样: 由于我们是刚下载的,“最近打开的项目”是没有项目打开的所以我们需要新建一个新的项目。 注意,项目位置最好是英文的,否则可能会出错。(可能不会,毕竟很多人都说有可能有BUG,小心为好)。 初学者的话选择蓝图编程(毕竟蓝图编程比较

    2024年02月15日
    浏览(36)
  • UE5 物体高速移动产生拖影(运动残影)

    给一个物体加上一个location的变化,当这个值达到一定大小时,运动会产生残影 速度较小时则不会,或者说不那么明显 这个是因为UE5的抗锯齿采样方法方法改成了 TSR- Temporal Super Resolution 该方法主要是将低分辨率游戏画面扩展至高分辨率,类似英伟达的DLSS,减轻显卡压力从而

    2024年02月11日
    浏览(69)
  • [UE5]物体沿指定路径(样条线)循环往复的移动

    UE5.0.3 B站:https://www.bilibili.com/video/BV17K411B7DL/ YouTube: B站:https://www.bilibili.com/video/BV1PV4y1F7F2/ YouTube: GitHub:https://github.com/wjswxc/SplineDemo 中文: 英文: Shape_NarrowCapsule 添加样条组件 编辑样条线 在蓝图中添加如下代码 中文: 英文:

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包