虚幻引擎UE5 GAS开发RPG游戏-02 设置英雄角色-16 启动数据

发布于:2025-07-08 ⋅ 阅读:(18) ⋅ 点赞:(0)

摘要:该代码实现了一个Unreal Engine的GameplayAbilitySystem(GAS)数据资产类UDataAsset_StartUpDataBase,用于批量管理游戏技能授予。主要功能包括:1)通过GrantAbilities方法批量授予技能;2)支持配置初始技能等级;3)将技能源对象绑定至角色Avatar;4)区分立即激活和被动技能。该设计遵循GAS推荐模式,将技能配置与逻辑分离,适用于角色初始化、装备系统和技能升级等场景,提高了代码的可维护性和扩展性。

1.创建启动数据资产:

Source/Warrior/Public/DataAssets/StartUp/DataAsset_StartUpDataBase.h:

// Copyright @ ChenChao

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "DataAsset_StartUpDataBase.generated.h"

class UWarriorGameplayAbility;
class UWarriorAbilitySystemComponent;
/**
 * 
 */
UCLASS()
class WARRIOR_API UDataAsset_StartUpDataBase : public UDataAsset
{
	GENERATED_BODY()
public:
	virtual  void GiveToAbilitySystemComponent(UWarriorAbilitySystemComponent* InWarriorASCToGive, int32 ApplyLevel = 1);
	
protected:
	//授予能力
	void GrantAbilities(const TArray<TSubclassOf<UWarriorGameplayAbility>>& InAbilitiesToGive, UWarriorAbilitySystemComponent* InWarriorASCToGive, int32 ApplyLevel = 1);
protected:
	//原始就有的能力
	UPROPERTY(EditDefaultsOnly, Category="StartUpData")
	TArray<TSubclassOf<UWarriorGameplayAbility>> ActivateOnGivenAbilities;
	//激活才能有的能力
	UPROPERTY(EditDefaultsOnly, Category="StartUpData")
	TArray<TSubclassOf<UWarriorGameplayAbility>> ReactiveAbilities;

	
};

Source/Warrior/Private/DataAssets/StartUp/DataAsset_StartUpDataBase.cpp:

// Copyright @ ChenChao


#include "DataAssets/StartUp/DataAsset_StartUpDataBase.h"

#include "AbilitySystem/WarriorAbilitySystemComponent.h"
#include "AbilitySystem/GameplayAbilities/WarriorGameplayAbility.h"

void UDataAsset_StartUpDataBase::GiveToAbilitySystemComponent(UWarriorAbilitySystemComponent* InWarriorASCToGive,
                                                              int32 ApplyLevel)
{
	check(InWarriorASCToGive);
	GrantAbilities(ActivateOnGivenAbilities, InWarriorASCToGive, ApplyLevel);
	GrantAbilities(ReactiveAbilities, InWarriorASCToGive, ApplyLevel);
}

void UDataAsset_StartUpDataBase::GrantAbilities(const TArray<TSubclassOf<UWarriorGameplayAbility>>& InAbilitiesToGive,
	UWarriorAbilitySystemComponent* InWarriorASCToGive, int32 ApplyLevel)
{
	if (InAbilitiesToGive.IsEmpty()) return;

	for (const TSubclassOf<UWarriorGameplayAbility>& Ability : InAbilitiesToGive)
	{
		if (! Ability) continue;
		
		FGameplayAbilitySpec AbilitySpec(Ability);		//设置技能类引用
		AbilitySpec.SourceObject = InWarriorASCToGive->GetAvatarActor();  //指定技能源对象为角色Avatar
		AbilitySpec.Level = ApplyLevel;		//配置技能初始等级
		
		InWarriorASCToGive->GiveAbility(AbilitySpec);	//将技能授予目标组件
	}
}

这段代码实现了在Unreal Engine的Gameplay Ability System(GAS)中批量授予技能的功能,主要逻辑如下:

参数说明

  • InAbilitiesToGive:需要授予的技能类数组
  • InWarriorASCToGive:目标角色的技能系统组件
  • ApplyLevel:技能初始等级

核心流程

  • 检查技能数组是否为空,为空则直接返回
  • 遍历技能数组,跳过无效的技能类
  • 为每个技能创建FGameplayAbilitySpec结构体实例:
    • 设置技能类引用
    • 指定技能源对象为角色Avatar
    • 配置技能初始等级
  • 通过GiveAbility方法将技能授予目标组件

关键设计

  • 使用数据资产(UDataAsset_StartUpDataBase)集中管理技能配置
  • 支持批量授予多个技能
  • 可统一设置技能等级
  • 通过技能系统组件管理技能生命周期

典型应用场景

  • 角色初始化时加载默认技能
  • 装备系统附加新技能
  • 升级时提升技能等级

该实现体现了GAS推荐的技能管理模式,将技能配置与逻辑分离,便于后期维护和扩展。                                                        

2.生成子类:DataAsset_HeroStartUpData

创建它的蓝图子类:

配置资产:

 


网站公告

今日签到

点亮在社区的每一天
去签到