动画控制器
在过去,动画的播放条件完全是硬编码的,美术人员无法进行自定义设置。
在 2.3.0 版本中,添加了基岩版动画控制器,通过该控制器,用户能够自定义动画的播放条件。
只需在 ysm.json
文件中添加 animation_controllers
字段即可,以下是示例:
"files": { "player": { "model": { "main": "models/main.json", "arm": "models/arm.json" }, "animation": { "main": "animations/main.animation.json", "parcool": "animations/parcool.animation.json" }, // 可以添加多个文件 "animation_controllers": [ "controller/随便起名字都行啊.json" ], "texture": [ "textures/texture.png" ] }}
动画控制器文件中可以包含多个控制器。如果你愿意,也可以将其拆分为多个文件,因为程序在读取时会自动进行合并。
控制器文件的名称不受限制,但内部命名的控制器需要使用特定的名称,如下图所示:
当你添加了特定名称的动画控制器后,先前硬编码的控制器将被替换。
目前有以下这些名称可供使用,具体含义通过英文名应该就能理解,这里就不进行翻译了:
- player.pre_parallel_0
- player.pre_parallel_1
- player.pre_parallel_2
- player.pre_parallel_3
- player.pre_parallel_4
- player.pre_parallel_5
- player.pre_parallel_6
- player.pre_parallel_7
- player.parallel_0
- player.parallel_1
- player.parallel_2
- player.parallel_3
- player.parallel_4
- player.parallel_5
- player.parallel_6
- player.parallel_7
- player.main
- player.pre_main
- player.post_main
- player.hold_mainhand
- player.hold_offhand
- player.pre_hold
- player.post_hold
- player.use
- player.pre_use
- player.post_use
- player.swing
- player.pre_swing
- player.post_swing
- player.passenger
- player.vehicle
- player.armor_feet
- player.armor_legs
- player.armor_chest
- player.armor_head
- player.fire(仅用于 tacz 开火)
- player.carry_on
- player.parcool
- arrow.main
- arrow.parallel_0
- arrow.parallel_1
- arrow.parallel_2
- arrow.parallel_3
- arrow.parallel_4
- arrow.parallel_5
- arrow.parallel_6
- arrow.parallel_7
添加的 molang 变量与函数
Section titled “添加的 molang 变量与函数”为了方便使用控制器,我们对部分状态进行了封装,直接添加了以 ctrl 开头的 molang 变量,以便于制作动画控制器。
变量(全是布尔值变量)
Section titled “变量(全是布尔值变量)”molang | 说明 |
---|---|
query.all_animations_finished | 当前状态下,控制器的全部动画播放完毕时为 true |
query.any_animation_finished | 当前状态下,控制器的任意动画播放完毕时为 true |
ctrl.death | 玩家死亡时为 true |
ctrl.riptide | 玩家使用三叉戟并触发激流时为 true |
ctrl.sleep | 玩家睡觉时为 true |
ctrl.swim | 玩家游泳时为 true |
ctrl.climb | 玩家趴下并移动时为 true |
ctrl.climbing | 玩家趴下但不移动时为 true |
ctrl.ladder_up | 玩家在梯子上上爬时为 true |
ctrl.ladder_stillness | 玩家在梯子上定住时为 true |
ctrl.ladder_down | 玩家在梯子上下滑时为 true |
ctrl.fly | 玩家飞行时为 true |
ctrl.elytra_fly | 玩家使用鞘翅飞行时为 true |
ctrl.swim_stand | 玩家站立式游泳时为 true |
ctrl.attacked | 玩家被攻击时为 true |
ctrl.jump | 玩家跳跃时为 true |
ctrl.sneak | 玩家潜行移动时为 true |
ctrl.sneaking | 玩家潜行但不移动时为 true |
ctrl.run | 玩家跑步时为 true |
ctrl.walk | 玩家行走时为 true |
ctrl.idle | 玩家处于待命状态时为 true |
以下是几个 molang 函数,使用时需要填入参数。
其中第二个参数和原来动画命名有些类似,$
表示物品 ID,#
表示物品 tag,:
表示特殊类别。
molang | 说明 |
---|---|
ctrl.hold | 用法:ctrl.hold('mainhand', '$minecraft:apple') |
ctrl.swing | 用法:ctrl.swing('offhand', '#minecraft:axes') |
ctrl.use | 用法:ctrl.use('offhand', ':eat') |
ctrl.armor | 用法:ctrl.armor('head', '$minecraft:iron_helmet') 第一个参数有:feet, legs, chest, head |
ctrl.ride | 用法:ctrl.ride('vehicle', '$minecraft:pig') ctrl.ride('passenger', '$minecraft:pig') |
模组兼容相关 molang
Section titled “模组兼容相关 molang”molang | 说明 |
---|---|
ctrl.carryon_type | 返回字符串 表示玩家抱起的类型,有三种: block entity player 。如果玩家没有抱起任何东西,则返回空字符串。 |
ctrl.carryon_is_princess | 返回布尔值 表示玩家是否被抱起。 |
ctrl.parcool_state | 返回字符串 返回当前正在执行的跑酷动作(内容较多,暂不展示)。如果没有执行任何跑酷动作,则返回空字符串。 |
ctrl.swem_is_ride | 返回布尔值 表示玩家是否骑乘 SWEM 的马。 |
ctrl.swem_state | 返回字符串 表示玩家当前正在执行的马术动作。如果没有骑乘 SWEM 的马,则返回空字符串。 |
ctrl.tac_hold_gun | 返回布尔值 表示玩家是否主手持 tacz 的枪械。 |
ctrl.tac_gun_type | 返回字符串 表示玩家当前持有的枪械类型(如步枪、手枪等分类)。如果没有持枪,则返回空字符串。 |
ctrl.tac_gun_id | 返回字符串 表示玩家当前持有的枪械 ID。如果没有持枪,则返回空字符串。 |
ctrl.tac_is_fire | 返回布尔值 表示玩家是否正在开火。 |
ctrl.tac_is_aim | 返回布尔值 表示玩家是否正在瞄准。 |
ctrl.tac_is_reload | 返回布尔值 表示玩家是否正在重载弹药。 |
ctrl.tac_is_melee | 返回布尔值 表示玩家是否正在进行近战(如刺刀攻击)。 |
ctrl.tac_is_draw | 返回布尔值 表示玩家是否正在切枪。 |
ctrl.slashblade_animation | 返回字符串 表示玩家当前打出的剑技名称。如果没有打出剑技,则返回空字符串。 |
ctrl.slashblade_animation | 返回字符串 表示玩家当前打出的剑技名称。如果没有打出剑技,则返回空字符串。 |