实现 Input Config Data Asset 的步骤与作用
步骤 1: 创建 DataAsset_InputConfig
类
代码
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "DataAsset_InputConfig.generated.h"
UCLASS()
class RPGGAME_API UDataAsset_InputConfig : public UDataAsset
{
GENERATED_BODY()
};
作用
- 创建 Data Asset 类: 定义了一个继承自
UDataAsset
的类UDataAsset_InputConfig
,用于存储输入配置数据。 - 数据资产基础: 作为数据资产的基础类,后续可以在编辑器中创建和配置具体的输入配置数据。
步骤 2: 添加蓝图类型 FRpgInputActionConfig
代码
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "DataAsset_InputConfig.generated.h"
USTRUCT(BlueprintType)
struct FRpgInputActionConfig
{
GENERATED_BODY()
};
UCLASS()
class RPGGAME_API UDataAsset_InputConfig : public UDataAsset
{
GENERATED_BODY()
};
作用
- 定义蓝图可用结构体: 使用
USTRUCT(BlueprintType)
定义了一个结构体FRpgInputActionConfig
,使其可以在蓝图中使用。 - 输入配置容器: 该结构体将用于存储输入动作的配置信息。
步骤 3: 添加需要的变量
代码
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "GameplayTagContainer.h"
#include "DataAsset_InputConfig.generated.h"
class UInputAction;
class UInputMappingContext;
USTRUCT(BlueprintType)
struct FRpgInputActionConfig
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (Categories = "InputTag"))
FGameplayTag InputTag;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
UInputAction* InputAction;
};
UCLASS()
class RPGGAME_API UDataAsset_InputConfig : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
UInputMappingContext* DefalutMappingContext;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (TitleProperty = "InputTag"))
TArray<FRpgInputActionConfig> NativeInputActions;
UInputAction* FindNativeInputActionByTag(const FGameplayTag& InInputTag);
};
作用
- 定义输入配置变量:
InputTag
: 使用FGameplayTag
标识输入动作的类型(如InputTag.Move
或InputTag.Look
)。InputAction
: 关联具体的UInputAction
,表示输入动作的具体实现。
- 默认输入映射上下文:
DefalutMappingContext
: 存储默认的输入映射上下文(UInputMappingContext
),用于定义输入动作与按键的映射关系。
- 输入动作列表:
NativeInputActions
: 使用TArray
存储多个FRpgInputActionConfig
,方便管理多个输入动作。
- 查找输入动作:
FindNativeInputActionByTag
: 提供一个方法,通过FGameplayTag
查找对应的UInputAction
。
步骤 4: 在编辑器中创建和配置数据资产
操作
- 在内容浏览器中右键 -> 其他 -> 数据资产,选择
DataAsset_InputConfig
创建数据资产。 - 双击创建的数据资产,进行配置:
- 将
ThirdPerson
项目中的IMC_Default
指定给DefalutMappingContext
。 - 添加两个
Native Input
:- 将
InputTag.Move
映射到IA_Move
。 - 将
InputTag.Look
映射到IA_Look
。
- 将
- 将
作用
- 数据资产实例化: 在编辑器中创建具体的数据资产实例,用于存储和管理输入配置。
- 输入动作绑定: 将
GameplayTag
与具体的InputAction
绑定,实现输入动作的逻辑分离和灵活配置。 - 默认映射上下文: 设置默认的输入映射上下文,确保游戏启动时输入系统能够正确初始化。
总结
通过以上步骤,我们实现了一个用于管理输入配置的 Data Asset。它的作用包括:
- 模块化输入配置: 将输入动作的配置数据存储在数据资产中,便于管理和复用。
- 灵活绑定输入动作: 通过
GameplayTag
和InputAction
的绑定,实现输入动作的灵活配置。 - 默认输入映射: 设置默认的输入映射上下文,确保输入系统的正确初始化。
- 蓝图支持: 通过
BlueprintType
和EditDefaultsOnly
等属性,支持在编辑器和蓝图中进行配置和调试。
这种设计使得输入系统的配置更加灵活和可维护,适合复杂的游戏项目。