用jquery做的书籍网站,淘宝购物返利网站开发,网站seo优化推广,网站建设天津在前面文章中#xff0c;我们实现了对技能添加并直接激活功能#xff0c;介绍了GA的相关参数配置。现在#xff0c;我们还不能通过键位触发技能#xff0c;正常在游戏时#xff0c;我们需要通过键位触发技能#xff0c;实现技能的激活。 在UE5里面添加了增强输入#xf…在前面文章中我们实现了对技能添加并直接激活功能介绍了GA的相关参数配置。现在我们还不能通过键位触发技能正常在游戏时我们需要通过键位触发技能实现技能的激活。 在UE5里面添加了增强输入相对于之前的输入操作切换为了模块化我们可以通过切换输入上下文来实现键位输入和InputAction的映射你可以创建多个上下文蓝图在角色不同操作时切换不同的上下文来实现不同的映射比如在正常情况下有一套控制任务的上下文当角色进入汽车后我们可以停止当前的上下文并改为使用汽车操作上下文去实现。 我们将使用UE的游戏案例Lyra实现的简化版可以根据输入决定如何激活技能并且通过数据驱动在运行时也可以修改输入映射。 接下来我们将实现通过增强输入去激活GA首先创建一个DataAsset将Tag和InputAction绑定起来然后自定义增强输入的管理器增加自定义的绑定操作函数用于绑定接着在PlayerController里面实现对输入事件的绑定。
创建DataAsset
首先创建一个基于DataAsset的类 放置到一个Input目录中 关闭UE让编辑器编译完成。首先创建一个结构体作为数据资产的结构里面需要设置GamplayTag和其对应的InputAction并设置为蓝图的类型
USTRUCT(BlueprintType)
struct FInputActionStruct
{GENERATED_BODY()UPROPERTY(EditDefaultsOnly)const class UInputAction* InputAction nullptr;UPROPERTY(EditDefaultsOnly)FGameplayTag InputTag FGameplayTag();
};接着创建一个数组变量用于存储当前数据的列表后面我们需要在面板上面去添加数据。
public:UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)TArrayFInputActionStruct AbilityInputActions;增加一个函数可以通过Tag去获取对应的InputAction的函数 const UInputAction* FindAbilityInputActionForTag(const FGameplayTag InputTag, bool bLogNotFound false) const;在函数实现方面遍历整个数组比对Tag来获取到对应的InputAction并返回如果发现获取不到的情况我们可以将bLogNotFound设置为true来查看那些Data设置的有问题。
const UInputAction* UInputConfig::FindAbilityInputActionForTag(const FGameplayTag InputTag, bool bLogNotFound) const
{for(const FInputActionStruct Action : AbilityInputActions){if(Action.InputAction Action.InputTag InputTag){return Action.InputAction;}}if(bLogNotFound){UE_LOG(LogTemp, Error, TEXT(无法从InputConfig[%s]中找到InputTag[%s]对应的技能InputAction), *GetNameSafe(this), *InputTag.ToString());}return nullptr;
}添加Tag
DataAsset需要Tag和InputAction我们先把需要Tag添加上。 打开MyGameplayTags类之前我们添加过属性的Tag在下面接着添加InputAction的这里添加鼠标键和数字键的Tag FGameplayTag InputTag_LMB; //鼠标左键FGameplayTag InputTag_RMB; //鼠标右键FGameplayTag InputTag_1; //1键FGameplayTag InputTag_2; //2键FGameplayTag InputTag_3; //3键FGameplayTag InputTag_4; //4键由于注册的代码太差我将属性和InputAction的Tag分成了两个函数去注册下面是专门注册Input的函数
void FMyGameplayTags::InitializeInputGameplayTags()
{GameplayTags.InputTag_LMB UGameplayTagsManager::Get().AddNativeGameplayTag(FName(Attributes.InputTag.LMB),FString(鼠标左键));GameplayTags.InputTag_RMB UGameplayTagsManager::Get().AddNativeGameplayTag(FName(Attributes.InputTag.RMB),FString(鼠标右键));GameplayTags.InputTag_1 UGameplayTagsManager::Get().AddNativeGameplayTag(FName(Attributes.InputTag.1),FString(键盘1键));GameplayTags.InputTag_2 UGameplayTagsManager::Get().AddNativeGameplayTag(FName(Attributes.InputTag.2),FString(键盘2键));GameplayTags.InputTag_3 UGameplayTagsManager::Get().AddNativeGameplayTag(FName(Attributes.InputTag.3),FString(键盘3键));GameplayTags.InputTag_4 UGameplayTagsManager::Get().AddNativeGameplayTag(FName(Attributes.InputTag.4),FString(键盘4键));
}然后在初始化里面调用
void FMyGameplayTags::InitializeNativeGameplayTags()
{InitializeAttributeGameplayTags();InitializeInputGameplayTags();
}编译打开UE查看是否Tag注册成功
创建InputAction
我们之前创建过移动的InputAction用于移动操作 接着在此文件夹创建按键所需的InputAction 命名为IA_LMBIA_是InputAction的推荐命名将内部的值类型修改为浮点类型 接着将其它的InputAction都创建出来进行同样的设置 创建完成InputAction这只是单纯的InputAction不添加到输入映射的上下文中它是无法起作用的接下来我们添加到之前移动使用的上下文中。 这里有个小细节我们绑定对应键位时可以鼠标左键点击一下键盘图标然后接着点击需要绑定的键位就可以设置上。设置完成在应用这个输入映射上下文时对应键位的InputAction将会触发事件。 创建DataAsset的数据都有了我们就可以创建数据列表了。
填充DataAsset
创建一个数据资产 选择InputConfig类 打开我们需要将两项内容对应填充 数据创建完成