mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-26 19:34:47 +00:00
44 lines
3.1 KiB
Markdown
44 lines
3.1 KiB
Markdown
|
# EX-GAS Wiki -- MMC(Modifier Magnitude Calculation)
|
|||
|
## MMC的作用
|
|||
|
MMC(Modifier Magnitude Calculation)是一个用于计算Modifier的模值的可编辑类,它的作用是根据输入的参数计算Modifier的模值,然后在后续逻辑中将模值赋给对应的属性。
|
|||
|
## MMC的使用
|
|||
|
在EX-GAS中MMC只会在GameplayEffect中使用。
|
|||
|
|
|||
|
MMC依存于GameplayEffectModifier中,GameplayEffectModifier是包裹MMC的结构体,MMC为GameplayEffectModifier成员之一。
|
|||
|
GameplayEffectModifier为GameplayEffect的成员之一。
|
|||
|
|
|||
|
**GameplayEffectModifier在EX-GAS中非常重要,它是GAS属性变化的核心,所有的游戏运行时的元素属性变化全部由他操作(除了属性初始化,或者开发人员手动设置属性值的情况)。**
|
|||
|
|
|||
|
GameplayEffectModifier成员组成(所有成员都需要在编辑器中设置):
|
|||
|
- AttributeName:Modifier作用的属性名称,一个游戏效果对一个元素属性产生影响时,需要表明影响哪个属性
|
|||
|
- ModiferMagnitude:基础模值,这个模值是否使用依赖于MMC的类型。后文MMC的类型中会详细介绍。
|
|||
|
- Operation:Modifier的操作类型,有加法、乘法、赋值(覆写)等
|
|||
|
- MMC:计算Modifier模值的计算类,后文MMC的类型中会详细介绍
|
|||
|
```
|
|||
|
例子:伤害效果,对单位造成50点伤害
|
|||
|
GameplayEffectModifier:
|
|||
|
AttributeName:AS_Fight.Health
|
|||
|
ModifierMagnitude:50
|
|||
|
Operation:Add
|
|||
|
MMC:ScalableFloatModCalculation -> k=-1,b=0 (下文会介绍ScalableFloatModCalculation的k,b含义)
|
|||
|
```
|
|||
|
|
|||
|
## MMC的类型
|
|||
|
MMC的基类为抽象类ModifierMagnitudeCalculation,它的子类有以下几种:
|
|||
|
- ScalableFloatModCalculation:可缩放浮点数计算
|
|||
|
- 该类型是根据ModifierMagnitude计算Modifier模值的,计算公式为:`ModifierMagnitude * k + b`
|
|||
|
实际上就是一个线性函数,k和b为可编辑参数,可以在编辑器中设置。
|
|||
|
- AttributeBasedModCalculation:基于属性的计算
|
|||
|
- 该类型是根据属性值计算Modifier模值的,计算公式为:`AttributeValue * k + b`
|
|||
|
计算逻辑与ScalableFloatModCalculation一致。
|
|||
|
- 重点在于属性值的来源,确定属性值来源的参数有3个:
|
|||
|
- attributeFromType:属性值从谁身上取?是从游戏效果的来源(创建者),还是目标(拥有者)。
|
|||
|
- attributeName:属性值的名称,比如战斗属性集里的生命值:AS_Fight.Health
|
|||
|
- captureType:属性值的捕获类型
|
|||
|
- Track: 追踪,在Modifier被执行时,当场去取属性值
|
|||
|
- SnapShot: 快照,在游戏效果被创建时会对来源和目标的属性进行快照。在Modifier被执行时,去取快照的属性值。
|
|||
|
- SetByCallerModCalculation:由调用者设置的计算
|
|||
|
- 不使用任何值计算模值,而是在执行时由调用者给出Modifier模值。
|
|||
|
- CustomCalculation:自定义计算(必须继承自抽象基类ModifierMagnitudeCalculation)
|
|||
|
- 上述3种类型显然不够方便且全面的满足游戏开发者的所有需求,所以提供了自定义计算类的功能。
|
|||
|
- 允许开发者自由发挥给出各种各样的计算逻辑。
|