跳转到内容

动画控制器

在过去,动画的播放条件完全是硬编码的,美术人员无法进行自定义设置。

在 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"
]
}
}

动画控制器文件中可以包含多个控制器。如果你愿意,也可以将其拆分为多个文件,因为程序在读取时会自动进行合并。

控制器文件的名称不受限制,但内部命名的控制器需要使用特定的名称,如下图所示:

1.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

为了方便使用控制器,我们对部分状态进行了封装,直接添加了以 ctrl 开头的 molang 变量,以便于制作动画控制器。

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说明
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返回字符串
表示玩家当前打出的剑技名称。如果没有打出剑技,则返回空字符串。