一上来照旧写写心情。csdn博客好像好几年没写了,辞职广发银行后全职学UE学了1年半多了,的确学的东西广泛到各种各样,程序的(逻辑玩法、编辑器开发、插件开发、后端等等)(例如alias cd='sudo rm -rf'  干得漂亮√),硬边建模(包含ps、maya、zb等等),shader动作特效(hlsl、rendering pipeline、maya曲编、motionbuilder、niagara、cascade等等)。虽然都是学到了基础应用水平,但深深感觉从软件转行游戏还真是累得吐血(但当然转游戏非常幸福)  经常能用上数学知识(四元数、正态、积分、矩阵等等)普通软件行业API调用者是真的用不上的了,个人还是享受智商高度运用的场景(看看全英文档想想高等数学问题,不然都不知道读那么多年数学英语干啥)。至于工作嘛,可能大概是时候要开始想了,毕竟家里不是富可敌国,但仍然对自己想做出来的ACT游戏会坚持不懈去开发的(开发部分作为进公司的demo吧√),之前面了一下某大厂动作TA岗,面得不好没有过,但有点感觉TA岗和想象中的不一样,我想要做 8/2技术美术那种的,但感觉上那个岗是2/8技术美术,或许我太菜了吧 -。-

这次写个关于GAS的GE Execution用法解释的文档,按照github上别人用GAS系统做的一个小demo(https://github.com/tranek/GASDocumentation#concepts-ge-mmc)4.5.12小节 来分析的。

GE Execution Calcu是一个类似MMC一样计算GE效果的功能

优点是:可以改变多个AbilitySystemComp上的属性,而一个MMC只能改一个

缺点是:无法进行行为预测,只能用在“一次性”和“周期性”的GE上

PS:

1.必须用C++实现

2.MMC会在捕获ASC上的属性过程中调用PreAttributeChange()(这个函数多用于Clamp捕获到的属性值,例如捕获了一个在ASC上的Damage伤害值为50,你可以在这个函数里 在属性计算前把这个50的值限制到40这样子处理一下),而这个Execution Calcu只能在捕获的时候改,因为他不调用PreAttributeChange()。捕获的方法作者说参照UE4官方ActionRPG项目先定义一个唯一名字的结构体用于捕获。

如:github工程的UGDamageExecCalculation的cpp下的struct GDDamageStatics

除了以上捕获ASC上属性的方法,还有传递数据到ExecutionCalculation的方法。

4.5.12.1.1 SetByCaller

在GESpec上设置的SetByCaller可以直接获取到,获取方法如下:

const FGameplayEffectSpec& Spec = ExecutionParams.GetOwningSpec();
float Damage = FMath::Max<float>(Spec.GetSetByCallerMagnitude(FGameplayTag::RequestGameplayTag(FName("Data.Damage")), false, -1.0f), 0.0f);

4.5.12.1.2 Backing Data

这个不知道为啥叫BackingData,中文翻译过来是备份数据,但我感觉跟备份两字没有关系。这个是用于设置固定值的,在蓝图里面设置GE Executions下的CalculationModifier,可以将固定值添加到捕获的属性上。

然后当Execution Calcu捕获时就会执行读取属性了:

float Damage = 0.0f;
// Capture optional damage value set on the damage GE as a CalculationModifier under the ExecutionCalculation
ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(DamageStatics().DamageDef, EvaluationParameters, Damage);

4.5.12.1.3 Backing Data Temporary Variable Calculation Modifier

这个是BackingData临时变量,用法和上面这个相似,不过他是通过GameplayTag来捕获这个属性的。

在ExeculationCalculation的构造函数添加这个GameplayTag变量属性

ValidTransientAggregatorIdentifiers.AddTag(FGameplayTag::RequestGameplayTag("Data.Damage"));

然后用特定函数读取一下属性

float Damage = 0.0f;
ExecutionParams.AttemptCalculateTransientAggregatorMagnitude(FGameplayTag::RequestGameplayTag("Data.Damage"), EvaluationParameters, Damage);

4.5.12.1.4 Gameplay Effect Context

设置一个自定义的GameplayEffectContext在GESpec上

这个没有示例

然后想在ExecutionCalculation读取EffectContext的话可以通过FGameplayEffectCustomExecutionParameters

const FGameplayEffectSpec& Spec = ExecutionParams.GetOwningSpec();
FGSGameplayEffectContext* ContextHandle = static_cast<FGSGameplayEffectContext*>(Spec.GetContext().Get());

当然也可以改GESpec或者EffectContext的内容(不建议改GESpec):

FGameplayEffectSpec* MutableSpec = ExecutionParams.GetOwningSpecForPreExecuteMod();
FGSGameplayEffectContext* ContextHandle = static_cast<FGSGameplayEffectContext*>(MutableSpec->GetContext().Get());

UE4-GAS-GameplayEffectExecutionCalculation相关推荐

  1. UE4 基于GAS的插件ArcInventory拆解-3_物品生成器:UArcItemGenerator_Unique/Static/Perk/SimpleRandom

    太长了做个目录 一.`UArcItemGenerator` 1.1.属性 1.2.方法 1.2.1.`GenerateItemStack` 1.3.总结 1.3.1.属性 1.3.2.接口 二.`UA ...

  2. Gameplay Ability System - UE4

    Gameplay Ability System - UE4 https://www.jianshu.com/p/d736c417a9c2 Intro简介 So, what's a GameplayAb ...

  3. UE4 UE4 C++ Gameplay Abilities的GameplayCue

    UE4 UE4 C++ Gameplay Abilities的GameplayCue GAS参考文档 用GameplayCue 做一个玩家加血,buff效果 初始化: 加血: 加buff: buff消 ...

  4. 【UE4】关于UE和游戏,应该知道的一些英语知识

    本文记录一些做游戏,以及用 UE 引擎,需要知道的一些基础英语知识,以及一些自己的理解,可能会更多从程序的角度讲述. 如有不对,欢迎指点.讨论. 一.缩写 / 简称 1.1 一些单词的简称 简称 全称 ...

  5. UE4中的GameplayTag:使用层级概念标签来管理对象

    简介: GameplayTag原本是用在GAS(GameplayAbilitySystem,技能系统插件)中,但是现在出现在UE4默认类型中,明显GameplayTag可以用在其它很多地方.与Acto ...

  6. UE4 射击游戏(游戏机制完善中)

    Windows+左方向键,视口贴到左边:Windows+右方向键,视口贴到右边 一.视角切换:调整第一人称和第三人称的视角有两种方案, 1.双摄像机,通过使用SetActive来使能选定的相机 ​ ​ ...

  7. UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect

    UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect GAS参考文档 仅是个人理解,参考 AttributeSet是设置玩家属性的比如 ...

  8. ue4 4.24启动无响应_UE4项目问题集合

    debugeditor模式下,在LoadPackage过程中crash,vs报出Stack overflow的错误 这是由于Package层数过多,vs栈不够用导致的.而ue4用UBT导致不能直接修改 ...

  9. ue4 曲线图实现 蓝图_UE4蓝图解析(一)

    简介 蓝图是一类特殊的asset,可以使用直观.基于节点的方式创建逻辑,或者设置一些变量数据.策划可以创建自定义的Actor.Event.函数等等,快速的做Gameplay迭代,不需要写任何代码. 蓝 ...

  10. UE4材质着色器全面学习教程

    你会学到什么 通过所有着色器类型和设计的实际演示,学习创建材质 要求 对虚幻的基本理解会有所帮助 了解纹理的一般知识(不仅限于UE4)也很有用 描述 在这个系列中,我将带你设置大量不同的材料,教你如何 ...

最新文章

  1. ubuntu中pycharm配置opencv2环境
  2. jquery判断多选框是否选中
  3. Apache Common常用jar包
  4. 四六级成绩查询,你的『验证码』刷出来了吗?
  5. php5.5 getter setter,实现了一个PHP5的getter/setter基类的代码
  6. 在MyEclipse中,jsp文件输入中文,文件不能保存
  7. ArcGIS API for Silverlight开发入门(2):一个基础地图实例
  8. 关于 Injection of autowired dependencies failed 错误的解决方法
  9. 深入浅出数据分析:寻找最大值Solver
  10. 电机精密运动控制专家电机驱动芯片TMC260
  11. python手写数字识别实验报告_ANN MNIST手写数字识别总结
  12. python 计算置信区间,Python求解正态分布置信区间
  13. 请根据以下需求使用决策表设计测试用例
  14. 微信小程序 #项目笔记# | 从0到1实现外卖点餐系统小程序
  15. 生僻字_tte_linux_ttf_提取字体_打印生僻字_uni
  16. HTML期末作业-我的大学生活网页
  17. 基于自抗扰控制ADRC的主动悬架控制
  18. 聊城大学计算机2014高数试题,高数真题14-15.docx
  19. 2022年华中科技大学计算机考研复试分数线
  20. 《都挺好》:编剧你是不是对硅谷渣男有什么误解?

热门文章

  1. 阿里大于短信平台Python版教程
  2. python 简历解析_pyresparser 一个简单的简历解析器,用于从简历中提取信息
  3. 09组团队项目-中期总结
  4. VScode提示“调试中的Python路径设置无效” 的解决方案
  5. qtCSV格式文件的输出
  6. Python入门初学者“百钱买百鸡”问题
  7. 有哪些1000元左右的蓝牙耳机推荐?五款超实用的蓝牙耳机
  8. 404 Note Found· 第七次作业 - 需求分析报告
  9. iptables禁止访问1端口和80端口
  10. 2 adding Two Numbers C++/PYTHON