UGameplayEffect相关:
1.UGameplayEffect
作为效果的基类, 可以继承从而开发自己的效果类
2.FGameplayEffectSpec
首先F开头(多用于结构体), 不继承自UObject因此不会进行垃圾回收;
作用:聚合UGamplayEffect类对象, 然后附加运行时的一些数据和Context上下文。 例如Level , FGameplayEffectContextHandle
3.FGameplayEffectSpecHandle
2中的Spec是无法进行垃圾回收的,因此要想办法,既不需要调用者关心对象的生存周期(无需手动Delete对象),又可以正常的进行垃圾回收。因此做了一个Tricky:使用ShaderPtr来做引用计数, 这样我们调用MakeGameplayEffect最终会返回一个Handle() , 而C++中除非标记&引用类型进行传递,否则全部使用值传递(将会产生临时对象); 这就会产生一系列的临时变量:随着作用域的变化生生死死, 但是最终将会MakeShared(UGameplayEffect)这个可以自动回收的变量
捋一下最终的引用链
FGameplayEffectSpecHandle-----通过Shared_ptr -------->引用New出来的FGameplayEffectSpec(New出来的作为持久化的存在,除非手动Delete,而上面使用Share_ptr Tricky)----