Unreal Engine RPG 游戏开发课程 - 第五课 利用DataAsset灵活的输入配置

实现 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.MoveInputTag.Look)。
    • InputAction: 关联具体的 UInputAction,表示输入动作的具体实现。
  • 默认输入映射上下文:
    • DefalutMappingContext: 存储默认的输入映射上下文(UInputMappingContext),用于定义输入动作与按键的映射关系。
  • 输入动作列表:
    • NativeInputActions: 使用 TArray 存储多个 FRpgInputActionConfig,方便管理多个输入动作。
  • 查找输入动作:
    • FindNativeInputActionByTag: 提供一个方法,通过 FGameplayTag 查找对应的 UInputAction

步骤 4: 在编辑器中创建和配置数据资产

操作

  1. 在内容浏览器中右键 -> 其他 -> 数据资产,选择 DataAsset_InputConfig 创建数据资产。
  2. 双击创建的数据资产,进行配置:
    • ThirdPerson 项目中的 IMC_Default 指定给 DefalutMappingContext
    • 添加两个 Native Input
      • InputTag.Move 映射到 IA_Move
      • InputTag.Look 映射到 IA_Look

作用

  • 数据资产实例化: 在编辑器中创建具体的数据资产实例,用于存储和管理输入配置。
  • 输入动作绑定: 将 GameplayTag 与具体的 InputAction 绑定,实现输入动作的逻辑分离和灵活配置。
  • 默认映射上下文: 设置默认的输入映射上下文,确保游戏启动时输入系统能够正确初始化。

总结

通过以上步骤,我们实现了一个用于管理输入配置的 Data Asset。它的作用包括:

  1. 模块化输入配置: 将输入动作的配置数据存储在数据资产中,便于管理和复用。
  2. 灵活绑定输入动作: 通过 GameplayTagInputAction 的绑定,实现输入动作的灵活配置。
  3. 默认输入映射: 设置默认的输入映射上下文,确保输入系统的正确初始化。
  4. 蓝图支持: 通过 BlueprintTypeEditDefaultsOnly 等属性,支持在编辑器和蓝图中进行配置和调试。

这种设计使得输入系统的配置更加灵活和可维护,适合复杂的游戏项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gameatp

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值