索引
动画控制器 |
---|
状态融合 |
状态转移 |
状态 |
通道(旋转,位置,缩放) |
实体动画格式示例 |
准备开始 |
添加动画 |
动画层阶 |
从v1.10升级到v1.17.30 |
从v1.17.30升级到v1.18.10 |
从v1.7测试版升级到v1.8 |
从v1.8测试版升级到v1.10 |
关键帧 |
插值 |
命名 |
概述 |
渲染控制器 |
示例 |
准备开始 |
变换 |
动画控制器
动画控制器决定何时播放哪些动画。每个控制器都包含一个状态列表,这些状态可以播放一个或多个动画,如果需要,每个动画都可以通过 Molang 表达式进行混合。控制器文件以 JSON 格式存储在 animation_controllers 文件夹中状态融合
如果您希望在过渡时状态之间出现交叉淡化,只需将 “blend_transition” 设置为您希望系统在两种状态之间混合的时间。这是在指定时间内在两个状态之间进行简单的插值完成的。状态转移
状态可以指定任意数量的过渡脚本,按顺序列出。每个转换都有一个要切换到的目标状态,以及一个用于是否应切换的脚本。按顺序对于每个转换,评估脚本,如果它返回非零,则立即切换到指定的状态。注意:每帧将只处理一个过渡。状态
一个状态定义了一组需要处理的动画(其中每一个都可以具有其自己的融合值)。每个状态都有一个可选的variables段落,列出着所引用的动画可以使用的任意数量的变量。每个状态还可以具有一个或多个动画,它们使用实体定义JSON文件中给出的短名称。状态变量
变量既可以由游戏设置,也可以由一个在definitions/entity/<entity_name>.json处的实体定义JSON中的用户定义的脚本中设置。变量可以通过Molang表达式定义它们的值。也可以通过一个线性插值曲线将它们的值进行重新映射。示例:
这里定义了一个单状态的控制器。它将创建一个变量`variable.ground_speed_curve`,仅当游戏处理该动画控制器的那一帧时,该变量才会存在在这个实体上。它将取`query.ground_speed`的值,然后基于`query.ground_speed`从0.0走到1.0的值把它重映射到0.2至0.7之间。它将在实体的地面速度从停止不动至2.3m/s时播放一个从0.0至1.0融合的walk动画。重映射曲线可以有任意多项。接下来,该动画控制器将播放从实体中引用的`wiggle_nose`动画,紧跟着播放`walk`动画,并将后者通过`variable.ground_speed_curve`的值进行缩放用户自定义脚本示例
此脚本将 foo 设置为 query.life_time 的正弦结果,以便稍后在动画或动画控制器中使用。在definitions\entity\tiger.json中
通道(旋转,位置,缩放)
引擎可以分别追踪一个动画的旋转、位置和缩放。在一个通道中,可以以秒为单位在从动画开始处之后的任意时刻指定一个或多个关键帧。如果没有指定关键帧,引擎将在t=0.0处创建一个单一的关键帧,所有的通道数据都存储在这个关键帧中。实体动画格式示例
动画的JSON格式如下所示。注意:与几何中的格式一致,长度单位为1/16米。准备开始
添加动画
动画控制器
创作者们需要能够控制动画如何进行播放,以及动画何时和通过何种方式来与其他动画交互。要想整合动画,尽管在实体的定义文件的`scripts/animate`段落中就可以管理许多动画,动画控制器给予了你状态机划分状态的功能,并能够分块对动画进行控制。动画控制器里每个状态中的动画都可以是其他的动画控制器,这允许你定义出任意复杂的动画层阶。动画
在每一帧的的开始,骨架将重置为其几何定义中默认姿势,然后动画将按照顺序逐通道叠加应用在骨架上。注意,各通道(的x、y和z)将先分别添加在各个动画上,然后在所有动画都被逐次应用之后再被转换成一个变换。动画数据可以是原始数据:
默认情况下旋转角是角度制的,顺序为欧拉X-Y-Z格式也可以是一个在运行时的解释器中解释的脚本:
实体定义
要定义一个实体都具有哪些动画,你必须同时向一个实体的实体定义文件中添加一个`animations`和一个`scripts/animate`段落。动画层阶
动画是基于通道的(旋转、位置或缩放),其中,它们是关键帧的:从v1.10升级到v1.17.30
1.17.30 的主要变化是:从v1.17.30升级到v1.18.10
1.18.10 的主要变化是:从v1.7测试版升级到v1.8
当我们根据反馈整理代码和沿着路线图推进技术时,我们做出了一些变更。要升级先前的Molang脚本,你需要按照列出的顺序对你所有的脚本执行以下步骤:从v1.8测试版升级到v1.10
在1.10中有三个主要变更,它们分别是关键帧
一个关键帧为位于指定时刻的特定骨骼上的特定通道的变换定义了两个值,一个是迫近该关键帧时刻时的终值,另一个是在关键帧时刻达到之后的初值。插值
目前仅支持线性插值。关键帧的 “pre” 和 “post” 设置允许控制任何关键帧的插值曲线。连续的示例
此示例在 1 秒内围绕 y 轴旋转 1 圈的骨骼“头部”。不连续的示例
不连续意味着关键帧之间不会有一个平滑的过渡。当你想要一些东西突然发生时,这将非常有用。命名
所有的命名:动画、骨骼、状态等,都必须以一个字母开头,只包含字母、数字、下划线和英文句点。我们建议命名时字母全部使用小写概述
以下是当前的Minecraft JSON范式:渲染控制器
渲染控制器需要一个标识符,并且需要遵循"controller.render.<name>"的格式。此名称需要与客户端实体定义 JSON 中设置的名称匹配。示例
来自于绵羊JSON的几何数组示例准备开始
首先,在资源包的根目录中创建一个名为 “render_controllers” 的新文件夹,以便在其中添加新的渲染控制器 JSON。变换
- 运算顺序:各顶点先平移,再旋转,然后缩放。