-
Notifications
You must be signed in to change notification settings - Fork 0
Math Expressions
Noogear edited this page Mar 9, 2026
·
1 revision
math 节点和 check 的 value 字段支持完整的数学表达式语法。
| 类型 | 示例 |
|---|---|
| 整数 |
123、0、42
|
| 小数 |
3.14、0.5
|
| 科学计数法 |
2E7、1.5e-3
|
| 内置常量 |
pi(3.14159…)、e(2.71828…) |
| 布尔值 |
true(→ 1.0)、false(→ 0.0) |
所有表达式求值结果均为 double 类型。
# 基本变量引用
- math: "{damage} * 1.5"
store: "result"
# 带默认值(变量未定义时使用默认值)
- math: "{attack:-10} * 1.5"
store: "result"| 语法 | 说明 |
|---|---|
{varName} |
引用变量 |
{varName:-defaultValue} |
引用变量,未定义时使用默认值 |
| 运算符 | 说明 | 示例 |
|---|---|---|
+ |
加法 | {hp} + 100 |
- |
减法 | {max_hp} - {hp} |
* |
乘法 | {damage} * 1.5 |
/ |
除法 | {hp} / {max_hp} |
% |
取模 | {score} % 10 |
^ |
幂运算(右结合) |
2 ^ 10 → 1024 |
| 运算符 | 说明 |
|---|---|
== |
等于 |
!= |
不等于 |
> < >= <=
|
大小比较 |
| 运算符 | 说明 |
|---|---|
&& |
逻辑与(第一个为 false 时不计算第二个) |
|| |
逻辑或(第一个为 true 时不计算第二个) |
! |
逻辑非(一元前缀) |
| 运算符 | 说明 |
|---|---|
- |
取负 |
+ |
取正(无实际效果) |
! |
逻辑非(0.0 → 1.0,非零 → 0.0) |
条件 ? 为真时的值 : 为假时的值
# 暴击加成
- math: "{is_critical} >= 1 ? {damage} * 2 : {damage}"
store: "finalDmg"
# 嵌套三元
- math: "{x} > 10 ? {y} * 2 : {x} < 5 ? {y} / 2 : {y}"
store: "result"三元运算符为右结合——嵌套时最右侧的 : 优先与最近的 ? 配对。
条件判定规则:0.0 视为 false,其他值视为 true。
- 一元运算:
!、-、+ - 幂运算:
^ - 乘除取模:
*、/、% - 加减:
+、- - 比较:
==、!=、>、<、>=、<= - 逻辑与:
&& - 逻辑或:
|| - 三元:
?:
使用括号 () 可以改变运算顺序:
- math: "({a} + {b}) * {c}"
store: "result"sin(x) cos(x) tan(x)
asin(x) acos(x) atan(x)
sinh(x) cosh(x) tanh(x)
| 函数 | 说明 | 示例 |
|---|---|---|
sqrt(x) |
平方根 |
sqrt(144) → 12 |
cbrt(x) |
立方根 |
cbrt(27) → 3 |
abs(x) |
绝对值 |
abs(-5) → 5 |
log(x) |
以 10 为底的对数 |
log(100) → 2 |
ln(x) |
自然对数 |
ln(e) → 1 |
| 函数 | 说明 | 示例 |
|---|---|---|
round(x) |
四舍五入 |
round(3.7) → 4 |
ceil(x) |
向上取整 |
ceil(3.1) → 4 |
floor(x) |
向下取整 |
floor(3.9) → 3 |
| 函数 | 说明 | 示例 |
|---|---|---|
min(a, b) |
取最小值 | min({hp}, 100) |
max(a, b) |
取最大值 | max({damage}, 1) |
rand(n) |
[0, n) 随机数 |
rand(1) → 0.0~1.0 |
| 函数 | 说明 |
|---|---|
clamp(value, min, max) |
将值限制在 [min, max] 区间 |
lerp(a, b, t) |
线性插值:a + (b - a) × t |
saturate(x) |
等价于 clamp(x, 0, 1) |
sign(x) |
符号函数,返回 -1、0 或 1 |
step(edge, x) |
x ≥ edge 返回 1.0,否则 0.0 |
smoothstep(e0, e1, x) |
GLSL 风格平滑过渡 |
map(x, inMin, inMax, outMin, outMax) |
线性值重映射 |
- math: "{attack} * (1 + {level} * 0.1)"
store: "scaledDamage"- check: hp
op: "<="
value: "{max_hp} * 0.3" # hp 低于 30% 最大生命# 带随机浮动的伤害
- math: "{base} * (1 + rand(0.4) - 0.2)"
store: "randomizedDamage"
# RPG 伤害公式
- math: "clamp({attack} * (1 + {level} * 0.05) - {defense} * 0.3, 1, 99999)"
store: "finalDmg"
# 冷却时间钳制
- math: "clamp({speed} * 0.8, 0.5, 5.0)"
store: "cooldown"
# 距离计算
- math: "sqrt({x}^2 + {y}^2 + {z}^2)"
store: "distance"