UE4 动作映射

原创 2018年04月16日 10:53:52

1.在项目设置中映射按键

2.在MyCharacter.h头文件中,声明添加映射按键相应的函数

	void press();
	void release();

private:
	bool isMousePressed = false;
	void moveForward(float value);
	void moveRight(float value);
	void lookUp(float value);
	void lookRight(float value);
	float LocX = 0;
	float LocY = 0;

3.在MyCharacter.cpp文件中,定义相应函数

void AMyCharacter::moveForward(float value)
{
	// 明确哪个方向是“前进”,并记录玩家试图向此方向移动。  
	FVector driection = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::X);
	AddMovementInput(driection, value);
}

void AMyCharacter::moveRight(float value)
{
	// 明确哪个方向是“向右”,并记录玩家试图向此方向移动。
	FVector driection = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::Y);
	AddMovementInput(driection, value);
}

void AMyCharacter::lookUp(float value)
{	
	if(isMousePressed)

	AddControllerYawInput(value);
}

void AMyCharacter::lookRight(float value)
{	
	if (isMousePressed)
	AddControllerPitchInput(value);
}

void AMyCharacter::press()
{
	isMousePressed = true;
	
	//鼠标左键点击时,隐藏光标
	FSlateApplication::Get().GetPlatformApplication()->Cursor->Show(false);

	//获取鼠标最开始的位置
	GetWorld()->GetFirstPlayerController()->GetMousePosition(LocX, LocY);
}

void AMyCharacter::release()
{
	isMousePressed = false;
	//鼠标左键松开时,显示光标
	FSlateApplication::Get().GetPlatformApplication()->Cursor->Show(true);

	//设置鼠标最开始的位置
	//GetWorld()->GetFirstPlayerController() 代表playercontroller

	FViewport* v = CastChecked<ULocalPlayer>(GetWorld()->GetFirstPlayerController()->Player)->ViewportClient->Viewport;
	int intX = (int)LocX;
	int intY = (int)LocY;
	v->SetMouse(intX, intY);
}

或:

void AMyCharacter::MoveForward(float amount)
{
    // Controller控制器当前拥有该actor。例如如果当前角色死了,actor不存在了,此时Controller控制器没有拥有任何一个actor,那么如果我们还想去控制它,就会出错。
    // 如果控制器没有拥有actor或者移动量是0,不能进入该函数。
    if (Controller && amount)
    {
        // GetActorForwardVector()取得角色向前的向量
        FVector fwd = GetActorForwardVector();
        // 我们调用AddMovementInput来在‘fwd’向量的方向上移动角色‘amount’个单位
        AddMovementInput(fwd, amount);
    }
}
void AMyCharacter::MoveBack(float amount)
{
    if (Controller && amount)
    {
        // GetActorForwardVector()取得角色向前的向量,加上负号,该向量就向后,所以取得了角色向后的向量
        FVector back = -GetActorForwardVector();
        AddMovementInput(back, amount);
    }
}
注:这种方法不需要在项目设置里设置1和-1

4.绑定映射

// 游戏开始时被调用以绑定设备输入功能
void AMyCharacter::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
	Super::SetupPlayerInputComponent(InputComponent);

	// 设置“移动”绑定。 
	InputComponent->BindAxis("MoveForward", this, &AMyCharacter::moveForward);
	InputComponent->BindAxis("MoveRight", this, &AMyCharacter::moveRight);
	InputComponent->BindAxis("LookUp", this, &AMyCharacter::lookUp);
	InputComponent->BindAxis("LookRight", this, &AMyCharacter::lookRight);
	
	InputComponent->BindAction("Press", EInputEvent::IE_Pressed, this, &AMyCharacter::press);
	InputComponent->BindAction("Press", EInputEvent::IE_Released, this, &AMyCharacter::release);
	
}

ue4 玩家控制器APlayerController

通过 APlayerController 可以让输入设备控制游戏,可以直接在蓝图中设置,不过我比较喜欢折腾c++(逻辑代码都是用c++写) 1、创建一个 AMyPlayerCtrler 继承自 APl...
  • yangxuan0261
  • yangxuan0261
  • 2016-08-04 21:42:25
  • 3285

UE4 序列化,反序列化,读写 Json

序列化: 1.在build.s里加入两个模块:Json and JsonUtilities。 2.建立主要的JsonObject: TSharedPtr t_jsonObject = MakeShar...
  • qq_35760525
  • qq_35760525
  • 2017-08-24 16:06:17
  • 1147

UE4 C++ Character动作映射

1. 首先在项目设置中,映射按键 2. 在character的头文件中,声明添加映射按键相应的函数。 其中character的基类中,已经定义了关于鼠标的旋转等相关函数(AddController...
  • u013766466
  • u013766466
  • 2017-03-02 16:28:41
  • 794

UE4动作流程总结

http://www.cnblogs.com/corgi/p/5522953.html
  • OnafioO
  • OnafioO
  • 2017-09-29 14:52:20
  • 214

关于VS2015调试DX11的HLSL着色器代码的方法与步骤

本次调试的项目是DXSDK中的CSM例子来展开说明,如何用VS2015自带的图形调试器来进行调试HLSL着色器代码,供大家交流与学习有不足之处还请指出批评。 1、首先打开VS2015在菜单栏中找到调...
  • weiyuxinyuan
  • weiyuxinyuan
  • 2017-10-18 11:19:15
  • 426

UE4 Rama's Vertex Snap Editor Plugin

Contents  [hide]  Overview Entire C++ Source Code PicturesPlugin Release Dates and UE4 E...
  • pizi0475
  • pizi0475
  • 2016-01-05 11:00:05
  • 1524

张瀚荣:如何用UE4制作3D动作游戏

GameLook报道/ 6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次活动由Epic Games与GameLook联合主办。 动作游戏凭借爽快的打击感和强...
  • pizi0475
  • pizi0475
  • 2015-09-23 07:16:04
  • 5598

UE4 通过动捕设备 实时 驱动 人体运动

动捕设备用的是诺亦腾的,惯性设备多多少少会有些漂移,不过总体效果还行。目前数据传输采用的是Socket,不过后面会改成VRPN会更通用一些。...
  • zhuyingqingfen
  • zhuyingqingfen
  • 2017-02-19 18:15:34
  • 1701

Epic 官方视频教程《 Battery Collector》源码+超详细注释【C++】【UE4】

首先来看效果图:1. 电池随机从天空掉落,玩家按C键收集电池的能量(闪电粒子效果)来补充血条(每秒都会自动衰减)2.玩家的颜色随着血条的减少,逐渐变黑3.当血条为空时,玩家(黑色的那一坨)死亡,游戏结...
  • panda1234lee
  • panda1234lee
  • 2017-03-13 15:59:56
  • 2328

OGRE的2D坐标、CEGUI坐标、鼠标坐标、 世界坐标转屏幕坐标

屏幕坐标系:左上角为(0, 0)右下角为(1, 1) OGRE的2D坐标系:左上角为(-1, 1)右下角为(1, -1) CEGUI坐标系:左上角为(0, 0),单位像素   转换公式(鼠标坐...
  • debugconsole
  • debugconsole
  • 2013-06-04 14:40:32
  • 2021
收藏助手
不良信息举报
您举报文章:UE4 动作映射
举报原因:
原因补充:

(最多只允许输入30个字)