动画表达式¶
Blockbench的动画时间轴支持在若干数值字段中输入表达式。表达式可用于周期运动、速度控制、变量驱动的表情切换和批量数值处理。基岩版动画导出时,这些表达式通常会以Molang形式进入动画JSON;但Blockbench预览支持的内容不一定都能在Minecraft基岩版中以同样方式运行。
表达式基础¶
表达式使用接近Molang的语法,并返回数值。0通常表示假,非0表示真。三角函数按角度计算,而不是按弧度计算。
常见用途包括:
- 用
query.anim_time驱动循环动作。 - 用三元条件表达式按变量切换状态。
- 用
variable.或v.保存模型预览时需要复用的值。 - 在数值滑块中输入
*2、+-1等表达式,对多个选中元素进行批量处理。
区分Blockbench预览和游戏运行
time等Blockbench便捷变量可能只适用于工具预览。面向基岩版导出的动画应优先使用基岩版可识别的query.anim_time、query.delta_time和标准Molang语法。
关键帧表达式¶
关键帧的某个轴可以填写固定数值,也可以填写表达式。只有一个关键帧时,整条通道会按表达式持续求值;存在多个关键帧时,Blockbench会先在各关键帧处求值,再按时间插值。
例如,让头部以两秒为周期轻微摆动:
表达式与平滑或贝塞尔插值并不总是适合混用。需要稳定导出到通用三维格式时,表达式通常会被烘焙为大量普通关键帧。
动画时间更新与混合权重¶
动画属性中的时间更新表达式决定时间轴如何前进。默认逻辑相当于:
把增量乘以2会使动画以两倍速度播放:
混合权重用于缩放整段动画的幅度。0.5表示只播放一半幅度,2表示放大为两倍幅度。它适合制作呼吸、抖动、情绪强弱等连续变化效果。
变量占位符¶
变量占位符面板可以在不直接修改关键帧的情况下运行表达式。它常用于预览某个变量状态,例如表情、装备开关或部件显隐。
Blockbench还提供仅用于预览界面的输入函数,例如开关、滑块和瞬时按钮。它们能快速调整变量,但不应被当作基岩版原生Molang函数使用。要让游戏内也能切换变量,应在动画指令关键帧、动画控制器或客户端实体逻辑中写入可导出的Molang表达式。
表情与部件显隐¶
变量驱动的常见做法是为同一部位准备多个骨骼或元素组,再用缩放表达式决定哪一个可见。例如,mouth_1只在v.mouth_shape为1时保持原大小,否则缩放为0:
随后可以用指令关键帧在不同时间修改变量:
这种方法适合制作面部表情、发光部件开关和替换式装饰件。实际导入游戏时,应确认所有变量初始化和切换表达式都能被基岩版客户端执行。
占位输入¶
Blockbench还提供几种只面向编辑器预览的占位输入。它们能让你在不改关键帧内容的前提下,临时拖动变量、切换开关或触发一次短动作。
v.enabled = toggle('Enabled')
v.mouth_shape = slider('Mouth', 1, 1, 3)
v.blink = impulse('Blink', 0.1)
可用输入主要有:
| 语法 | 作用 |
|---|---|
toggle(name) | 创建一个勾选框。开启时返回1,关闭时返回0。 |
slider(name, step, min, max) | 创建一个数值滑条,也可以直接输入数字。 |
impulse(name, duration) | 创建一个按钮。按下后会在短时间内返回1,随后恢复成0。 |
这些输入主要用于预览
占位输入是Blockbench界面功能,不是基岩版原生Molang函数。导出给游戏后,是否还能按原样工作,取决于你最后写进JSON的表达式本身,而不是这些编辑器控件。
烘焙表达式¶
表达式很适合在Blockbench里快速搭动作,但某些导出格式并不直接支持它们。这时就需要把表达式“烘焙”为普通关键帧。
官方推荐的做法是使用Bakery插件:
- 安装Bakery插件。
- 确保要烘焙的通道有明确的起始关键帧和结束关键帧。
- 选中要烘焙的关键帧。
- 打开Animation→Bake Animations。
- 调整参数并执行烘焙。
常见参数里,Rate决定生成关键帧的间隔;值越大,关键帧越少,数据量更低,但曲线还原会更粗。Spherical Interpolation会在旋转关键帧之间启用四元数插值,但它和表达式并不总能稳定配合。
速度渐变¶
动画属性中的Anim Time Update字段不仅能让动画整体加速或减速,也能做局部慢动作。
例如,假设动画时间轴长4秒,而你只想在1.0秒到1.3秒之间把动作放慢到原来的20%,就可以写成:
这类做法常被称为“速度渐变”。它特别适合预览甩头、蓄力、击中瞬间或镜头感更强的动作节奏。
传统导出格式不一定保留这种效果
文档明确说明,这种实时速度控制不会自动延续到glTF等传统导出格式,即使做过烘焙也不一定得到同样结果。
数值输入里的表达式¶
表达式不只出现在动画关键帧里。Blockbench几乎所有数值输入都能接受表达式,例如:
- 元素的位置和旋转滑条。
- UV位置和尺寸。
- 纹理尺寸。
- 各类对话框中的数值框。
- 画笔大小等滑条。
多选时的特殊规则¶
当一个滑条同时控制多个元素时,Blockbench会用额外规则逐个处理每个元素:
- 以
+、*或/开头,表示在原值基础上分别加、乘、除。 - 因为
-已用于负数,减法要写成+-。 val表示当前字段原值。n表示当前元素在处理列表中的索引。
例如:
| 表达式 | 结果 |
|---|---|
16*4 | 直接得到64。 |
*2 | 把所有选中值翻倍。 |
+-Math.PI | 对所有值减去PI。 |
Math.random(0, 8) | 给每个选中元素生成不同的随机值。 |
val < 0 ? 0 : val * 2 | 把负值钳到0,正值翻倍。 |
这类表达式非常适合批量处理骨骼偏移、UV或大量元素的位置分布。