UE GAS系统 UAbilitySystemComponent组件中UAttributeSet 的属性集合的存储问题

文章讲述了作者在学习过程中发现UAbilitySystemComponent如何自动获取PlayerState中的AttributeSet,经过调查发现这是在UAbilitySystemComponent的InitializeComponent()函数中,通过GetObjectsWithOuter()函数将PlayerState的AttributeSet存入SpawnedAttributes的过程。
摘要由CSDN通过智能技术生成

今天学习时,当时一直在思索  我 UAttributeSet类的子类 并没有在 UAbilitySystemComponent 的子类中 去进行附加  但是为何 使用时 能获取出来

在PlayerState的构造函数中进行创建

在AAEffectActo类的碰撞重叠函数中进行获取

玩家角色类 是继承自 IAbilitySystemInterface 所以 会使用

IAbilitySystemInterface* IASIF_AbilitySys = Cast<IAbilitySystemInterface>(OtherActor);

 GetAbilitySystemComponent()函数

UAbilitySystemComponent::GetAttributeSet(TSubclassOf<UAttributeSet> AttributeSetClass) const  函数 意思就是 通过这个Class 去轮询 UAbilitySystemComponent::  SpawnedAttributes; 

返回找到的首个

在此我就发现一个问题  我没主动将 PlayerState中的 AttributeSet 存进 SpawnedAttributes中

怎么能获取到呢?

事实就是获取到了  是否是闹鬼了?  根据以前我的一个老师告诉我的一句话

计算机是不会骗人的  

我并存着这个思想  去看看是否是 UAbilitySystemComponent内部 给我存储了 究竟是如何存储的

我大为震撼UE的开放者们是如何去把我类外的对象找到的 

于是不久找到了 位置

UAbilitySystemComponent::InitializeComponent()函数中

我找到是在此处存储的

直接通过拥有者对象去 查找 拥有者对象中全部包含的UObject 我理解是如此可能有误 

然后逐一轮询添加  我看不懂这个操作  但是意思就是这样

这里的GetOwner()获取的我们可以看一下 

其实返回的就是OwnerPrivate

WITH_EDITOR宏 我是忽略的 

可以看到最终拿到的是 UObjectBase::OwnerPrivate 变量

CreateDefaultSubobject 函数的源码 我还看不懂  不过我知道的是在它进行创建组件时

会把当前的调用它的对象存到 UObjectBase::OwnerPrivate 中

这里可以看到   AbilitySystemComponent中的OwnerPrivate存的是当前的PlayerState对象

UAbilitySystemComponent::InitializeComponent()函数中使用GetObjectsWithOuter()函数

拿到了PlayerState中的AttributeSet

就直接存入了SpawnedAttributes中

现在应该可以说真相破案了

我估计分开放就不会有存储

可能有错误  欢迎大佬们指正

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值