虚幻引擎如何实现按键绑定按键反馈C++

一些基础概念:

1.动作: IA_Jump

2. 输入映射上下文: IMC_Default
2.1包含了多种动作与其对应的按键的映射关系

2.2其包含的动作的映射关系可以在这里修改
2.3其实一个输入映射上下文可以容下很多动作,但是为了方便管理,每个输入映射上下文
只存放功能相近的动作

3.输入映射上下文指针数组: 玩家控制类需要一个输入映射上下文指针数组,用于存放 管理 调用多个输入映射上下文

4.SetupInputComponent():此函数用于把"输入映射上下文数组"内的所有元素加载进入游戏,一般来说UE会给你提前写好,无需自己写


5. SetupPlayerInputComponent():此函数用于绑定动作和响应函数.

简单的例子:

我们在这个例子中实现功能:点击鼠标左键,在游戏中打印HelloWorld
为此我们需要定义一个动作:IA_Interact,然后我们需要把这个动作注册到输入映射上下文,并且为其绑定按键;然后进入玩家控制类,先把你声明一个新动作用来接收你需要传的动作,然后声明你的响应函数;如果你创建了新的输入映射上下文,那么你需要把新的输入映射上下文加入输入映射上下文指针数组,如果没有,则无需理会这个步骤,把你的动作和响应函数绑定;绑定好后,把你的动作传入玩家控制类,在蓝图中传入.

第一步:创建一个输入动作:IA_Interact

第二步,注册输入映射上下文: 把IA_Interact加入输入映射上下文,并且为其绑定鼠标左键和键盘E键,这样我们成功把鼠标左键和键盘E键映射为了一个动作IA_Interact

第三步:在玩家控制类头文件(DungeonEscapeCharacter.h)中声明需要使用的动作(InteractAction),以及该动作对应的响应函数(Interact()).

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input")
	class UInputAction* InteractAction;
--------------------------------------------------------
    void Interact();

第四步:在SetupPlayerInputComponent()中实例化增强输入组件EnhancedInputComponent,用这个增强输入组件中的BindAction函数绑定所有的"动作"和"响应函数"

void ADungeonEscapeCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{	
	// Set up action bindings
	if (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(PlayerInputComponent))
	{
		// Jumping
		EnhancedInputComponent->BindAction(JumpAction, 
			ETriggerEvent::Started, this, &ADungeonEscapeCharacter::DoJumpStart);
		EnhancedInputComponent->BindAction(JumpAction, 
			ETriggerEvent::Completed, this, &ADungeonEscapeCharacter::DoJumpEnd);

		// Moving
		EnhancedInputComponent->BindAction(MoveAction, 
			ETriggerEvent::Triggered, this, &ADungeonEscapeCharacter::MoveInput);

		// Looking/Aiming
		EnhancedInputComponent->BindAction(LookAction, 
			ETriggerEvent::Triggered, this, &ADungeonEscapeCharacter::LookInput);
		EnhancedInputComponent->BindAction(MouseLookAction, 
			ETriggerEvent::Triggered, this, &ADungeonEscapeCharacter::LookInput);
		
		//test
		EnhancedInputComponent->BindAction(InteractAction, 
			ETriggerEvent::Triggered, this, &ADungeonEscapeCharacter::Interact);

	}
	else
	{
		UE_LOG(LogDungeonEscape, Error, 
TEXT("'%s' Failed to find an Enhanced Input Component!
This template is built to use the Enhanced Input system. 
If you intend to use the legacy system, 
then you will need to update this C++ file."), 
        *GetNameSafe(this));
	}
}

第六步: 在响应函数Interact()中写入需要实现的功能:打印一段日志
 

void ADungeonEscapeCharacter::Interact()
{
	UE_LOG(LogTemp,Display,TEXT("Hello_World!"));
}

第七步:由于目前InteractAction动作还没有初始化,需要传入一个动作给InteractAction,我们打开在BP_Player的细节面板手动传入​​​IA_Interact

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值