虚幻引擎UE5 GAS开发RPG游戏-02 设置英雄角色-07 自定义增强输入组件

目标:输入绑定流程

(1)原生游戏玩法标签

         定义输入标签

(2)输入配置数据资产

        将输入标签映射到输入活动

(3)自定义增强输入组件

        定义输入绑定方法

(4)绑定输入

(5)在编辑器里分配资产

现在执行第三步操作:定义输入绑定方法

1.通过UEnhancedInputComponent创建子类:UWarriorInputComponent

定义一个模板函数,来绑定回调函数

2.实现:

参数解释
  1. InInputConfig‌ (const UWarriorDataAssetInputConfig*):

    • 类型:指向 UWarriorDataAssetInputConfig 类的常量指针。
    • 说明:这是一个输入配置对象,包含了各种输入动作的配置信息。
  2. InInputTag‌ (const FGameplayTag&):

    • 类型:对 FGameplayTag 的常量引用。
    • 说明:用于标识特定的输入动作。
  3. TriggerEvent‌ (ETriggerEvent):

    • 类型:枚举 ETriggerEvent
    • 说明:指定触发回调函数的事件类型,如按下、释放等。
  4. ContextObject‌ (UserObject*):

    • 类型:指向 UserObject 类型的指针。
    • 说明:这是回调函数的上下文对象,即回调函数内部可能会使用的对象。
  5. Func‌ (CallbackFunc):

    • 类型:函数回调类型,具体类型由模板参数 CallbackFunc 指定。
    • 说明:这是需要绑定的回调函数。
函数功能
  • 该模板函数用于将指定的回调函数 Func 绑定到由 InInputTag 标识的输入动作上。
  • 当输入动作在 TriggerEvent 指定的事件发生时,将调用 Func 回调函数。
  • ContextObject 作为回调函数的上下文对象,可以在回调函数内部使用。

Source/Warrior/Public/Components/Input/WarriorInputComponent.h:

// Copyright @ ChenChao

#pragma once

#include "CoreMinimal.h"
#include "EnhancedInputComponent.h"
#include "DataAssets/Input/WarriorDataAssetInputConfig.h"
#include "WarriorInputComponent.generated.h"

/**
 * 
 */
UCLASS()
class WARRIOR_API UWarriorInputComponent : public UEnhancedInputComponent
{
	GENERATED_BODY()

public:
	//模板函数: 绑定回调函数
	template<class UserObject, typename CallbackFunc>
	void BindNativeInputAction(const UWarriorDataAssetInputConfig* InInputConfig, const FGameplayTag& InInputTag,
		ETriggerEvent TriggerEvent, UserObject* ContextObject, CallbackFunc Func);
	
};

//模板函数: 绑定回调函数
template <class UserObject, typename CallbackFunc>
void UWarriorInputComponent::BindNativeInputAction(const UWarriorDataAssetInputConfig* InInputConfig,
	const FGameplayTag& InInputTag, ETriggerEvent TriggerEvent, UserObject* ContextObject, CallbackFunc Func)
{
	//检查指针
	checkf(InInputConfig,TEXT("InInputConfig 为空指针,无法继续执行绑定操作!"));
	//通过标签查到输入动作
	UInputAction* InputAction = InInputConfig->GetNativeInputActionsByTag(InInputTag);
	//检查输入动作是否有效
	if (InputAction == nullptr) return;
	//绑定函数
	BindAction(InputAction, TriggerEvent, ContextObject, Func);
	
}

3.编译,运行UE编辑器

改成自己的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值