基于数学的动画
数学动画是关键帧动画的强大替代方案。广义上说,"基于数学的动画"是指使用Molang表达式来驱动实体几何变形的概念。所有原版动画都采用数学驱动,这里有个典型示例:
"leftarm" : {
"rotation" : [ "((-0.2 + 1.5 * (math.abs(math.mod(q.modified_distance_moved, 13) - 6.5) - 3.25) / 3.25) * q.modified_move_speed) * 57.3 - v.agent.armxrotationfactor", 0.0, "-v.agent.armzrotation" ]
},如你所见,数学动画可能相当复杂且难以理解。因此,它们应被视为关键帧动画的"专业级替代方案"——而非"完全替代品"。这是为了实现动画丝滑完美循环所必须付出的代价。

编写数学动画
手动编写
要手动创建此类动画,只需建立动画文件并将关键帧替换为数值数组(支持字符串值,数学表达式就放置在字符串中)。原版动画文件是这类动画的绝佳参考,强烈建议下载并研究!
对于希望可视化创作过程的设计者,Jannis开发的Molang绘图器工具可以将表达式转化为直观的曲线图。
在Blockbench中制作
Blockbench在一定程度上支持多数数学动画的创建与实时预览。首先在时间轴第0帧创建关键帧,然后通过左侧边栏的关键帧面板添加/编辑Molang表达式(支持与关键帧混合使用)。请注意:表达式不需要加引号,引号仅适用于原始JSON编辑!
需注意,由于缺乏游戏上下文,Blockbench不支持部分Molang查询。若要预览使用上下文相关查询的动画,可在关键帧面板下方的"变量占位符"区域模拟数值。例如添加q.modified_distance_moved = time*8即可模拟每秒移动8格时的距离查询值。
查询语句的运用
Molang"查询语句"是我们数学工具箱中最强大的工具,它能将外部数据注入数学表达式。常用查询包括:
q.modified_distance_moved(修正移动距离)q.modified_move_speed(修正移动速度)q.anim_time(动画时间)q.life_time(生命周期)
这些查询可提取游戏世界中的攻击时长、移动距离等数据,使动画更具动态同步效果。
避免使用动画控制器
通过巧妙运用查询语句,你可以省去创建动画控制器的步骤。当行走动画速度直接关联实体移动速度时,静止的实体将自动停止播放动画。
应用实例
下方展示了一个运用q.modified_distance_moved查询的数学动画实例:
{
"format_version": "1.12.0",
"animations": {
"animation.car.wheel_spin": {
"loop": true,
"bones": {
"front_wheels": {
"rotation": ["q.modified_distance_moved * -30", 0, 0]
},
"back_wheels": {
"rotation": ["q.modified_distance_moved * -30", 0, 0]
}
}
}
}
}此例中,模型骨骼front_wheels和back_wheels的X轴旋转量由q.modified_distance_moved查询结果乘以-30决定。这意味着静止的车辆轮子不会旋转,而行驶中的车辆轮子会随移动速度按比例旋转。








