BE教程

【基岩版附加包进阶教程】行为包的动画及动画控制器

不***Lv.4 高级会员 发表于 2022-6-4 · 最后回复 2023-1-31 IP:福建省 4,779 3
AI 速览2026-09-27 02:42 生成

基岩版行为包动画与动画控制器的进阶教程

这篇教程面向已掌握基岩版附加包基础的读者,讲解行为包中动画(animations)和动画控制器(animation_controllers)的用法。作者指出这两者并非单纯保存和控制动画,而是可以执行指令,常见于神器类附加包。内容依次分析动画控制器的格式版本、id、初始状态、transitions 条件跳转、on_entry、on_exist、animations 及 sounds、particles 等子组件,再说明动画的 loop、animation_length 与 timeline 字段,并提示动画需在实体文件中注册调用名后由控制器调用。

  • 默认读者已了解基本生物、物品、函数命令与指令
  • 需了解 molang 中 query 表示读取的含义
  • 时间线的时间点数不能大于动画时长
  • 动画需在实体文件添加调用名及调用文件 id 才能被控制器调用
本卡片由 AI 阅读本帖后生成,可能存在疏漏,请以帖子正文为准。
本帖最后由 不道 于 2023-1-31 09:00 编辑

前排提醒:本教程默认读者已了解基本生物/物品/函数命令/指令等等的情况下进行
以上可以参考站内教程,如@782 的附加包教程系列


让我们开始吧!


行为包里的动画(animations)和动画控制器(animation_controllers),有些人可能会顾名思义,诶,这不就是一个保存动画,一个控制动画吗
其实吧,并不准确,因为在行为包里的这些,都是执行指令的(在神器addon里很常见)


动画控制器部分
首先我们得了解一个常识:在基岩版json里,是允许molang代码的存在的,但是在这个帖子里,大家只需了解molang代码中query是读取的意思就行了


接下来看一个典型的一个动画控制器代码


怎么样,是不是感觉晕晕的?别急,我们逐步分析

首先是formate_version,是定义mc引擎版本的
animation_controllers则是定义这个文件是一个动画控制器文件
下一行是定义这个控制器的id,格式是:animation.controllers.你的id
下面的initial_state,是定义这个控制器初始执行的级别,写你的状态自定义扩展名


接下来是重点了,transitions下面是定义当触发某一条件时,转到指定的级别(state)
冒号前面的字符串里填一个自定义的id(注意,在这个段落里下面的也要是这个id)
冒号后面则是一行molang代码,格式为query.生物特性
这里的生物特性是指生物的某一状态,比如上面例子代码中的query.get_equipped_item_name=='kar98' && query.item_remaining_use_duration > 2就是当生物持有‘kar98’这个物品(注意,这里不是填物品id,是填物品id冒号后的词)并且使用这个物品的时间大于2的时候转到state(下面的on_entry),类似的常用状态还有is_baby(是幼年状态),is_adult(是成年状态),is_using_item(正在使用物品),is_sneaking(正在潜行),all_animations_finished(所有动画播放完毕),具体可以去文档找找(当需要多个molang代码时,可以用&&或者||,这两个一个是并且的意思,也就是要满足两边所有条件才行,一个是或者的意思,也就是两边满足一个条件就行)

下面就是on_entry了
这里的字符串里填的是事件,一般可以是mc指令,实体事件(event)和molang代码

还有on_exist
这里是这个级别转到其他级别时执行的指令/事件/molang

还有animations
可以在这个级别被执行时执行动画

另外还有sounds,particles这些子组件,可以去文档看(


动画部分
老规矩,看代码
  1. {
  2.   "format_version": "1.8.0",
  3.   "animations": {
  4.     "animation.kar98.reload": {
  5.       "loop": false,
  6.       "animation_length": 4.8,
  7.       "timeline": {
  8.         "0.0": "/title @s actionbar 装填中",
  9.         "0.1": "/playsound reload.kar98",
  10.         "0.2": "/clear @s addon:kar98 0 1",
  11.         "0.5": "/title @s actionbar 装填中",
  12.         "1.0": "/clear @s addon:kar98_empty 0 1",
  13.         "1.5": "/clear @s addon:792mag5 0 1",
  14.         "2.0": "/title @s actionbar 装填中",
  15.         "2.4": "/title @s actionbar 装填中",
  16.         "2.5": "/title @s actionbar 装填完成",
  17.         "3.3": "/give @s addon:kar98"
  18.       }
  19.     }
  20.   }
  21. }
复制代码


前面三行就不必多说了
loop是定义这个动画是否循环,后面填布尔值
animation_length是动画的时长
timeline是时间线
下面就是在这个时间线里每秒执行的指令(注意,时间点数不能大于动画时长)


如果你想让你这个动画能被动画控制器调用的话,需要在实体文件里添加调用名及调用文件id,然后再动画控制器里调用这个调用名,这里就不多说(肝不下去了)

没了

好氵啊啊啊啊啊啊啊啊

  • WZM*** 铁粒 +50 的确很氵(滑稽)
回复 3 最早 最新 只看楼主
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则