UE4-GAS-GameplayEffectExecutionCalculation
一上来照旧写写心情。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相关推荐
- 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 ...
- Gameplay Ability System - UE4
Gameplay Ability System - UE4 https://www.jianshu.com/p/d736c417a9c2 Intro简介 So, what's a GameplayAb ...
- UE4 UE4 C++ Gameplay Abilities的GameplayCue
UE4 UE4 C++ Gameplay Abilities的GameplayCue GAS参考文档 用GameplayCue 做一个玩家加血,buff效果 初始化: 加血: 加buff: buff消 ...
- 【UE4】关于UE和游戏,应该知道的一些英语知识
本文记录一些做游戏,以及用 UE 引擎,需要知道的一些基础英语知识,以及一些自己的理解,可能会更多从程序的角度讲述. 如有不对,欢迎指点.讨论. 一.缩写 / 简称 1.1 一些单词的简称 简称 全称 ...
- UE4中的GameplayTag:使用层级概念标签来管理对象
简介: GameplayTag原本是用在GAS(GameplayAbilitySystem,技能系统插件)中,但是现在出现在UE4默认类型中,明显GameplayTag可以用在其它很多地方.与Acto ...
- UE4 射击游戏(游戏机制完善中)
Windows+左方向键,视口贴到左边:Windows+右方向键,视口贴到右边 一.视角切换:调整第一人称和第三人称的视角有两种方案, 1.双摄像机,通过使用SetActive来使能选定的相机 ...
- UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect
UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect GAS参考文档 仅是个人理解,参考 AttributeSet是设置玩家属性的比如 ...
- ue4 4.24启动无响应_UE4项目问题集合
debugeditor模式下,在LoadPackage过程中crash,vs报出Stack overflow的错误 这是由于Package层数过多,vs栈不够用导致的.而ue4用UBT导致不能直接修改 ...
- ue4 曲线图实现 蓝图_UE4蓝图解析(一)
简介 蓝图是一类特殊的asset,可以使用直观.基于节点的方式创建逻辑,或者设置一些变量数据.策划可以创建自定义的Actor.Event.函数等等,快速的做Gameplay迭代,不需要写任何代码. 蓝 ...
- UE4材质着色器全面学习教程
你会学到什么 通过所有着色器类型和设计的实际演示,学习创建材质 要求 对虚幻的基本理解会有所帮助 了解纹理的一般知识(不仅限于UE4)也很有用 描述 在这个系列中,我将带你设置大量不同的材料,教你如何 ...
最新文章
- ubuntu中pycharm配置opencv2环境
- jquery判断多选框是否选中
- Apache Common常用jar包
- 四六级成绩查询,你的『验证码』刷出来了吗?
- php5.5 getter setter,实现了一个PHP5的getter/setter基类的代码
- 在MyEclipse中,jsp文件输入中文,文件不能保存
- ArcGIS API for Silverlight开发入门(2):一个基础地图实例
- 关于 Injection of autowired dependencies failed 错误的解决方法
- 深入浅出数据分析:寻找最大值Solver
- 电机精密运动控制专家电机驱动芯片TMC260
- python手写数字识别实验报告_ANN MNIST手写数字识别总结
- python 计算置信区间,Python求解正态分布置信区间
- 请根据以下需求使用决策表设计测试用例
- 微信小程序 #项目笔记# | 从0到1实现外卖点餐系统小程序
- 生僻字_tte_linux_ttf_提取字体_打印生僻字_uni
- HTML期末作业-我的大学生活网页
- 基于自抗扰控制ADRC的主动悬架控制
- 聊城大学计算机2014高数试题,高数真题14-15.docx
- 2022年华中科技大学计算机考研复试分数线
- 《都挺好》:编剧你是不是对硅谷渣男有什么误解?
热门文章
- 阿里大于短信平台Python版教程
- python 简历解析_pyresparser 一个简单的简历解析器,用于从简历中提取信息
- 09组团队项目-中期总结
- VScode提示“调试中的Python路径设置无效” 的解决方案
- qtCSV格式文件的输出
- Python入门初学者“百钱买百鸡”问题
- 有哪些1000元左右的蓝牙耳机推荐?五款超实用的蓝牙耳机
- 404 Note Found· 第七次作业 - 需求分析报告
- iptables禁止访问1端口和80端口
- 2 adding Two Numbers C++/PYTHON