当前位置: 首页 > news >正文

ASC学习笔记0020:用于定义角色或Actor的默认属性值

中文注释:UrealEngine-5.2.1源码-AbilitySystemComponent.h

学习内容:

UPROPERTY(EditAnywhere, Category="AttributeTest")TArray<FAttributeDefaults>	DefaultStartingData;

这是一个在虚幻引擎中非常常见的模式,用于定义角色或Actor的默认属性值。以下是详细解析和相关用法:

这个属性的作用:

  • EditAnywhere: 允许在类默认值和实例详情面板中编辑

  • Category="AttributeTest": 在编辑器中将此属性分组到"AttributeTest"类别下

  • TArray<FAttributeDefaults>: 存储属性默认定义的集合

典型的 FAttributeDefaults 结构:

USTRUCT(BlueprintType)
struct FAttributeDefaults
{GENERATED_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite)FGameplayAttribute Attribute;  // 游戏属性UPROPERTY(EditAnywhere, BlueprintReadWrite)float DefaultValue;  // 默认值
};
 

常见使用模式:

1. 游戏技能系统 (GAS)

// 从默认数据初始化属性
for (const FAttributeDefaults& AttributeDefault : DefaultStartingData)
{AbilitySystemComponent->SetNumericAttributeBase(AttributeDefault.Attribute, AttributeDefault.DefaultValue);
}
 

2. 角色初始化

void AMyCharacter::InitializeAttributes()
{if (AbilitySystemComponent){for (const FAttributeDefaults& Default : DefaultStartingData){AbilitySystemComponent->SetNumericAttributeBase(Default.Attribute, Default.DefaultValue);}}
}
 

3. 数据驱动的方式

通过在蓝图子类或数据资产中配置这个数组,可以创建不同的预设(如"战士"、"法师"、"盗贼")

增强版本示例:

UPROPERTY(EditAnywhere, Category="AttributeTest")
TArray<FAttributeDefaults> DefaultStartingData;// 辅助函数
float GetDefaultValueForAttribute(const FGameplayAttribute& Attribute) const
{for (const FAttributeDefaults& Default : DefaultStartingData){if (Default.Attribute == Attribute){return Default.DefaultValue;}}return 0.0f; // 或合理的默认值
}
 

实际应用场景:

  • 角色初始属性:生命值、魔法值、攻击力、防御力等

  • 职业模板:为不同职业设置不同的初始属性

  • 装备系统:初始装备带来的属性加成

  • 难度设置:不同难度下的角色初始属性

这种模式非常灵活,适合用于设置游戏中的初始角色属性、装备加成或任何其他基于属性的系统。

在实际项目中,这种默认属性配置系统有广泛的应用场景。以下是一些具体的实际应用案例:

1. 角色职业系统

配置不同职业的初始属性

// 在角色蓝图或数据资产中配置
DefaultStartingData = {{HealthAttribute, 100.0f},     // 战士生命值{ManaAttribute, 50.0f},        // 战士魔法值{StrengthAttribute, 15.0f},    // 战士力量{DefenseAttribute, 12.0f}      // 战士防御
};
 

2. 敌人类型配置

不同敌人类型的属性差异

// 小兵敌人
DefaultStartingData = {{HealthAttribute, 30.0f},{AttackAttribute, 5.0f},{MoveSpeedAttribute, 300.0f}
};// BOSS敌人
DefaultStartingData = {{HealthAttribute, 1000.0f},{AttackAttribute, 25.0f},{DefenseAttribute, 15.0f},{MoveSpeedAttribute, 200.0f}
};
 

3. 实际项目中的完整实现

属性集定义

UCLASS()
class YOURGAME_API UMyAttributeSet : public UAttributeSet
{GENERATED_BODY()public:UPROPERTY(BlueprintReadOnly, Category = "Health")FGameplayAttributeData Health;GAMEPLAYATTRIBUTE_PROPERTY_GETTER(UMyAttributeSet, Health)UPROPERTY(BlueprintReadOnly, Category = "Mana")FGameplayAttributeData Mana;GAMEPLAYATTRIBUTE_PROPERTY_GETTER(UMyAttributeSet, Mana)UPROPERTY(BlueprintReadOnly, Category = "Stats")FGameplayAttributeData Strength;GAMEPLAYATTRIBUTE_PROPERTY_GETTER(UMyAttributeSet, Strength)
};
 

角色初始化

void AMyCharacter::BeginPlay()
{Super::BeginPlay();InitializeAttributes();
}void AMyCharacter::InitializeAttributes()
{if (UAbilitySystemComponent* ASC = GetAbilitySystemComponent()){// 创建属性集UMyAttributeSet* AttributeSet = NewObject<UMyAttributeSet>();ASC->AddAttributeSetSubobject(AttributeSet);// 应用默认属性值for (const FAttributeDefaults& DefaultAttr : DefaultStartingData){ASC->SetNumericAttributeBase(DefaultAttr.Attribute, DefaultAttr.DefaultValue);}}
}
 

4. 数据资产驱动配置

创建属性配置数据资产

UCLASS(BlueprintType)
class YOURGAME_API UCharacterAttributeData : public UDataAsset
{GENERATED_BODY()public:UPROPERTY(EditAnywhere, Category = "Attributes")TArray<FAttributeDefaults> DefaultStartingData;UPROPERTY(EditAnywhere, Category = "Visual")UTexture2D* Icon;UPROPERTY(EditAnywhere, Category = "Visual")FText DisplayName;
};
 

在角色中使用数据资产

UPROPERTY(EditAnywhere, Category = "Character Config")
UCharacterAttributeData* CharacterAttributeData;// 初始化时使用数据资产
void AMyCharacter::InitializeFromDataAsset()
{if (CharacterAttributeData){DefaultStartingData = CharacterAttributeData->DefaultStartingData;InitializeAttributes();}
}
 

5. 实际游戏系统集成

RPG游戏中的职业系统

// 战士配置
{{HealthAttribute, 120.0f},{ManaAttribute, 30.0f},{StrengthAttribute, 18.0f},{StaminaAttribute, 15.0f},{IntelligenceAttribute, 8.0f}
}// 法师配置  
{{HealthAttribute, 80.0f},{ManaAttribute, 100.0f},{StrengthAttribute, 8.0f},{IntelligenceAttribute, 18.0f},{SpellPowerAttribute, 15.0f}
}
 

生存游戏中的角色状态

// 生存角色初始状态
{{HealthAttribute, 100.0f},{HungerAttribute, 100.0f},{ThirstAttribute, 100.0f},{StaminaAttribute, 100.0f},{CarryWeightAttribute, 50.0f}
}
 

6. 编辑器中的优势

在UE编辑器中,你可以:

  • 可视化配置:直接在详情面板中调整数值

  • 批量设置:通过数据资产一次性配置多个角色

  • 版本控制:数据资产便于版本管理和团队协作

  • 热重载:运行时调整数值立即生效

7. 实际项目经验

最佳实践:

  • 使用数据资产而不是直接在蓝图中配置

  • 为不同的敌人类型、职业创建不同的数据资产

  • 添加验证逻辑确保属性配置的完整性

  • 使用枚举或Gameplay Tags来管理属性类型

注意事项:

  • 确保属性名称的一致性

  • 处理属性依赖关系(如最大生命值影响当前生命值)

  • 考虑网络同步的需求

这种模式在实际项目中极大地提高了配置的灵活性和开发效率,特别适合需要大量角色类型和属性配置的RPG、ARPG、生存等游戏类型。

http://www.dtcms.com/a/613468.html

相关文章:

  • 第十篇 扫雷游戏 下(末版·精简)
  • 开发者获取Claude API Key 申请指南:从注册到 Python 调用的实战教程
  • pyinstaller 介绍
  • 建设网站与服务器专业网页设计哪家好
  • 【大语言模型 125】开放域对话实战:自然流畅的闲聊系统完全指南
  • FastAPI基础项目:实现用户管理系统,实现基本的搜索和增删改查功能
  • 小众做的好的网站手机下载工具app
  • Qt for HarmonyOS 3D图片轮播组件开源鸿蒙开发实战
  • Evolution_07_环境
  • MinIO 不再“开放”,RustFS 能否成为更优选择?
  • DMLDCL
  • 大型ERP管理系统多语言分层架构设计
  • WordPress网站404公益页面公司网站建设策划书
  • B-树分析
  • 关于做网站建设公司你应该知道的宣传网站建设方案
  • VSCode 1.106 版本发布 —— 更强 AI 特性,更丝滑的编程体验!
  • F046 新闻推荐可视化大数据系统vue3+flask+neo4j
  • SpringMVC基础教程(3)--SSM框架整合
  • 1.硬件测试测试方案设计方法
  • 个人网站名字大全大学生创意产品设计
  • 基于 **Three.js** 开发的 3D 炮弹发射特效系统
  • 前端构建工具缓存清理,npm cache与yarn cache
  • 【开题答辩全过程】以 翡翠仓库管理系统为例,包含答辩的问题和答案
  • 2025 批量下载微博内容/图片/视频,导出word和pdf,微博点赞/评论/转发等数据导出excel
  • 高级网站开发工程师证书天眼查网站建设公司
  • 11.3 实战:使用FastGPT开发企业级智能问答Agent
  • Spring AI接入DeepSeek:构建你的第一个AI应用
  • 中国最大免费wap网站wordpress转代码
  • Unable to load class ‘org.slf4j.LoggerFactory‘.解决
  • 2025年印尼服务器选型指南:跨境业务落地的合规与性能双解