跳转至

动画

动画(Animation)是Minecraft基岩版中用于驱动实体模型运动的系统。动画通过在时间轴上定义骨骼的变换来实现模型的动态表现,如行走、攻击、待机等动作。

概述

在基岩版的渲染系统中,实体的几何体模型由若干骨骼组成,动画通过在不同的时间点设置骨骼的位置(Position)旋转(Rotation)缩放(Scale)来驱动模型运动。动画文件以JSON格式定义,存放在资源包的animations/目录中。

每个动画通过一个标识符引用,通常格式为animation.<实体名>.<动作名>,例如animation.zombie.walk

关键帧

关键帧(Keyframe)是动画时间轴上的控制点,定义了特定时间点骨骼的变换状态。两个关键帧之间的状态由插值(Interpolation)算法计算得出,常用的插值方式包括线性插值(Lerp)Catmull-Rom插值

关键帧的时间以秒为单位表示。关键帧的值可以是固定的数值,也可以是Molang表达式,以实现动态计算的效果。

动画定义

动画定义文件的根键为animations,包含一个或多个动画定义。每个动画的结构如下:

  • 循环(Loop):控制动画是否循环播放、仅播放一次还是保持最后一帧状态。
  • 动画长度(Animation Length):动画的总时长(秒)。
  • 骨骼(Bones):按骨骼名称索引的变换定义,每个骨骼可以分别定义位置、旋转和缩放的关键帧序列。
  • 时间轴(Timeline):在特定时间点触发Molang表达式或命令。
  • 粒子特效(Particle Effects):在特定时间点和骨骼位置上生成粒子特效。
  • 音效(Sound Effects):在特定时间点播放音效。

服务端动画

除了资源包中的客户端动画外,行为包中也可以定义服务端动画(Server Animation)。服务端动画不控制模型的视觉变换,而是在时间轴上执行命令、触发事件等服务端逻辑。服务端动画的文件存放在行为包的animations/目录中。

状态融合

状态融合(State Blending)是在两个动画之间切换时,通过一段过渡时间平滑地混合两个动画状态的机制。状态融合可以避免动画切换时产生突兀的跳变,使动画过渡更加自然。融合时间在动画控制器的状态转移定义中指定。

与动画控制器的关系

动画本身仅定义了骨骼的运动方式,而何时播放哪个动画、如何在多个动画之间切换,则由动画控制器(Animation Controller)负责管理。详见动画控制器文档。