首页 > 其他分享 >UE4设置人物移动和人物视角

UE4设置人物移动和人物视角

时间:2023-06-01 14:35:04浏览次数:41  
标签:视角 float 人物 val void APlayingCharacter UE4 AddMovementInput InputComponent

本节我们先讲解 UE4 人物移动的设置,然后再讲解 UE4 人物视角的设置。

UE4 设置人物移动

1) 打开 UE4 编辑器,点击“编辑”然后点击“项目设置”:


2) 选择“输入”:


3) 点击“AxisMappins” 的 添加按键输入,我们创建 6 个按键输入:


4) 更改按键和按键的名字,这里一个按键对应一个名字。你可以通过添加多个名字不同但是按键相同的方法去绑定不同的事件。


5) 设置完成后,我们打开 VS 编辑器,在“PlayingCharacter.h”文件下声明 4 个函数:


这四个函数就是我们要实现移动功能的函数,我们来到 .cpp 文件去实现这四个函数
纯文本复制
  1. void APlayingCharacter::MoveForward(float val)
  2. {
  3. AddMovementInput(GetActorForwardVector(), val);
  4. }
  5.  
  6. void APlayingCharacter::MoveBack(float val)
  7. {
  8. AddMovementInput(-GetActorForwardVector(), val);
  9. }
  10.  
  11. void APlayingCharacter::MoveRight(float val)
  12. {
  13. AddMovementInput(GetActorRightVector(), val);
  14. }
  15.  
  16. void APlayingCharacter::MoveLeft(float val)
  17. {
  18. AddMovementInput(-GetActorRightVector(), val);
  19. }
void APlayingCharacter::MoveForward(float val)
{
    AddMovementInput(GetActorForwardVector(), val);
}

void APlayingCharacter::MoveBack(float val)
{
    AddMovementInput(-GetActorForwardVector(), val);
}

void APlayingCharacter::MoveRight(float val)
{
    AddMovementInput(GetActorRightVector(), val);
}

void APlayingCharacter::MoveLeft(float val)
{
    AddMovementInput(-GetActorRightVector(), val);
}
AddMovementInput() 这个函数会根据第一个参数的值去移动角色,第二个参数是个浮点数,如果这个数是 1 的话,那么它会按照第一个参数的方向去添加,如果第二个参数是 -1 的话,那么会往第一个参数的反方向去添加。

那么这个 val 变量的值怎么来的呢,它在我们设置按键输入的时候就已经设定好了,默认值是 1。


  • GetActorForwardVector() 是在世界空间中从此 A 角色获取前向的向量,它获取的是 X 轴的向量。
  • GetActorRightVector()   同上,它获取的是 Y 轴的向量。

写好这 4 个函数之后,我们还要进行按键绑定,把我们的函数和我们的按键绑定在一起。

在“SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)”函数里,我们添加 4 个按键绑定。


InputComponent 是一个组件,它用来绑定按键输入。

第一个参数要和我们当初设置按键绑定的名字要一样,第二个参数是一个指针类型,我们直接给 this,第三个参数就是我们要绑定的函数。

UE4 设置人物角色

我们同样在  SetupPlayerInputComponenet 函数中写入我们控制视角的代码。


AddControllerYawInput() 和 AddControllerPitchInput() 是 UE4 已经为我们封装好的移动视角的函数。

FRotator

  • Yaw 表示 摇头 就是绕 Z 移动;
  • Pich 表示 点头 就是绕 Y 移动;
  • Roll 你可以想象成左右晃脑,绕 X轴运动。

这三个变量组成了 UE4 里面所有物体的旋转方向,它是一个结构体叫 FRotator。

写完上面的代码后,点击编译,回到 UE4 点击 Play,我们会发现人物可以前后左右移动和左右上下看。

完整代码:
纯文本复制
  1. APlayingCharacter.h
  2. // Fill out your copyright notice in the Description page of Project Settings.
  3. #pragma once
  4. #include "CoreMinimal.h"
  5. #include "GameFramework/Character.h"
  6. #include "PlayingCharacter.generated.h"
  7. UCLASS()
  8. classGAMEPROJECT_API APlayingCharacter : public ACharacter
  9. {
  10. GENERATED_BODY()
  11. public:
  12. // Sets default values for this character's properties
  13. APlayingCharacter();
  14. protected:
  15. // Called when the game starts or when spawned
  16. virtual void BeginPlay() override;
  17. public:
  18. // Called every frame
  19. virtual void Tick(float DeltaTime) override;
  20. // Called to bind functionality to input
  21. virtual void SetupPlayerInputComponent(classUInputComponent* PlayerInputComponent) override;
  22.  
  23. void MoveForward(float val);//人物往前移动
  24. void MoveBack(float val); //人物向后
  25. void MoveRight(float val); //人物向右
  26. void MoveLeft(float val); //人物向左
  27. };
  28.  
  29. APlayingCharacter.Cpp
  30. // Fill out your copyright notice in the Description page of Project Settings.
  31.  
  32. #include "PlayingCharacter.h"
  33.  
  34. // Sets default values
  35. APlayingCharacter::APlayingCharacter()
  36. {
  37. // Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
  38. PrimaryActorTick.bCanEverTick = true;
  39.  
  40. }
  41. // Called when the game starts or when spawned
  42. void APlayingCharacter::BeginPlay()
  43. {
  44. Super::BeginPlay();
  45. }
  46. // Called every frame
  47. void APlayingCharacter::Tick(float DeltaTime)
  48. {
  49. Super::Tick(DeltaTime);
  50.  
  51. }
  52. // Called to bind functionality to input
  53. void APlayingCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
  54. {
  55. Super::SetupPlayerInputComponent(PlayerInputComponent);
  56. InputComponent->BindAxis("MoveForward", this, &APlayingCharacter::MoveForward);
  57. InputComponent->BindAxis("MoveBack", this, &APlayingCharacter::MoveBack);
  58. InputComponent->BindAxis("MoveRight", this, &APlayingCharacter::MoveRight);
  59. InputComponent->BindAxis("MoveLeft", this, &APlayingCharacter::MoveLeft);
  60. InputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
  61. InputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
  62. }
  63.  
  64.  
  65. void APlayingCharacter::MoveForward(float val)
  66. {
  67. AddMovementInput(GetActorForwardVector(), val);
  68. }
  69.  
  70. void APlayingCharacter::MoveBack(float val)
  71. {
  72. AddMovementInput(-GetActorForwardVector(), val);
  73. }
  74.  
  75. void APlayingCharacter::MoveRight(float val)
  76. {
  77. AddMovementInput(GetActorRightVector(), val);
  78. }
  79.  
  80. void APlayingCharacter::MoveLeft(float val)
  81. {
  82. AddMovementInput(-GetActorRightVector(), val);
  83. }
APlayingCharacter.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "PlayingCharacter.generated.h"
UCLASS()
class GAMEPROJECT_API APlayingCharacter : public ACharacter
{
    GENERATED_BODY()
public:
    // Sets default values for this character's properties
    APlayingCharacter();
protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;
public:   
    // Called every frame
    virtual void Tick(float DeltaTime) override;
    // Called to bind functionality to input
    virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

    void MoveForward(float val);//人物往前移动
    void MoveBack(float val);    //人物向后
    void MoveRight(float val);    //人物向右
    void MoveLeft(float val);    //人物向左
};

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

#include "PlayingCharacter.h"

// Sets default values
APlayingCharacter::APlayingCharacter()
{
     // 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;

}
// Called when the game starts or when spawned
void APlayingCharacter::BeginPlay()
{
    Super::BeginPlay();
   
}
// Called every frame
void APlayingCharacter::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

}
// Called to bind functionality to input
void APlayingCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
    Super::SetupPlayerInputComponent(PlayerInputComponent);
    InputComponent->BindAxis("MoveForward", this, &APlayingCharacter::MoveForward);
    InputComponent->BindAxis("MoveBack", this, &APlayingCharacter::MoveBack);
    InputComponent->BindAxis("MoveRight", this, &APlayingCharacter::MoveRight);
    InputComponent->BindAxis("MoveLeft", this, &APlayingCharacter::MoveLeft);
    InputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
    InputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
}


void APlayingCharacter::MoveForward(float val)
{
    AddMovementInput(GetActorForwardVector(), val);
}

void APlayingCharacter::MoveBack(float val)
{
    AddMovementInput(-GetActorForwardVector(), val);
}

void APlayingCharacter::MoveRight(float val)
{
    AddMovementInput(GetActorRightVector(), val);
}

void APlayingCharacter::MoveLeft(float val)
{
    AddMovementInput(-GetActorRightVector(), val);
}

标签:视角,float,人物,val,void,APlayingCharacter,UE4,AddMovementInput,InputComponent
From: https://www.cnblogs.com/tomato-haha/p/17448877.html

相关文章

  • UE4新建项目
    打开UE4启动器,选择4.21.2版本的虚幻引擎,点击“启动”按钮。 点击之后会出现如下图所示的界面,可以对新建项目进行设置。 “项目”这一栏存放着你新建后的项目。我们点击“新建项目”,点击“C++”,选择“基础代码”,选择“没有初学者内容”,然后写上项目名字,注意不......
  • UE4使用什么编译器?
    UE4的底层虽然是用C++实现的,但它又不仅仅是一个C++库,它还实现了自己的编译机制。换句话说,UE4对现有的C++语法进行了改进,以适应游戏开发的场景。当然,UE4也不会疯狂到自己去开发一个C++编译器,它还是需要依赖传统的C++编译器以及相关的编程套件。熟悉Qt的读者应该......
  • UE4是什么?虚幻4引擎是什么?
    UE4的全名是UnrealEngine4,中文译为“虚幻引擎4”。UE4是一款由EpicGames公司开发的开源、商业收费、学习免费的游戏引擎。从1998年发行至今,UE4一共经历了UE、UE2、UE2.5、UE3、UDK、UE4多个版本,它的迭代速度极快,现在已经到了4.22预览版。基于UE4开发的大作无......
  • UE4的下载和安装(UE4开发环境的搭建)
    使用UE4开发游戏之前,必须先搭建开发环境,具体包括:UE4引擎的下载和安装VisualStudio下载和安装UE4的下载和安装1)首先,打开任意一个浏览器输入UE4官方网站的网址 https://www.unrealengine.com/zh-CN/,点击右上角的“下载”按钮,如下图所示:2)官方要求必须登录......
  • UE4字符串调试日志
    #在运行时打印输出信息原作者:Rama(opensnewwindow)此文为Logs,PrintingMessagesToYourselfDuringRuntime(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。#概述Logs很重要,因为它通过给你反馈来让你知道:你的......
  • UE4中控制台变量
    #前言此文为ConsoleVariablesinC++(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。一个控制台命令是用户输入字符发送到引擎然后引擎以某种方式反应(比如console/log变量,改变内部状态)。一个控制台变量会额外地保存一......
  • UE4中的蓝图函数库
    #蓝图函数库此文为AssertionsBlueprintFunctionLibraries(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解我们在开发中经常发现需要一系列工具函数来让开发更简单。这些函数经常是无状态的,并且在各种gameplay框架代码中......
  • UE4配置文件
    #配置文件此文为configurationcategories(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。包含配置gameplay或者引擎行为属性设置值的文本文件。在工程加载时,配置文件可以被用来给一些需要初始化的类属性设置值,配置文件......
  • UE4代码编写标准
    #代码编写标准此文为CodingStandard(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。在Epic,我们有一些编码标准和约定。这个文档不打算讨论或进行改进,相反,它反映了Epic的当前编码标准。编码约定对程序员很重要,因为:软件......
  • UE4时间管理
    #时间管理定时器是在短暂延迟或一段时间后计划执行一些操作。比如,你可能想让玩家获取一些东西后变无敌,在十秒后变回原状态,又或者你想让玩家在一个充满毒气的屋子里移动时每秒掉多少血。这样的行为都是通过定时器来实现的。定时器是被全局TimerManager(FTimerManager类)中管理......