UID46148性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2021-4-17最后登录1970-1-1
| 本帖最后由 不道 于 2023-1-31 09:00 编辑
前排提醒:本教程默认读者已了解基本生物/物品/函数命令/指令等等的情况下进行 以上可以参考站内教程,如@782 的附加包教程系列
让我们开始吧!
行为包里的动画(animations)和动画控制器(animation_controllers),有些人可能会顾名思义,诶,这不就是一个保存动画,一个控制动画吗 其实吧,并不准确,因为在行为包里的这些,都是执行指令的(在神器addon里很常见)
动画控制器部分 首先我们得了解一个常识:在基岩版json里,是允许molang代码的存在的,但是在这个帖子里,大家只需了解molang代码中query是读取的意思就行了
接下来看一个典型的一个动画控制器代码
- {
- "format_version": "1.10.0",
- "animation_controllers": {
- "controller.animation.kar98": {
- "initial_state": "setup",
- "states": {
- "setup": {
- "transitions": [
- {
- "kar98.5": "query.get_equipped_item_name=='kar98' && query.item_remaining_use_duration > 2"
- }
- ]
- },
- "kar98.5": {
- "animations": [
- "kar98shoot"
- ],
- "transitions": [
- {
- "kar98.4": "query.get_equipped_item_name=='kar98' && query.item_remaining_use_duration > 2 && query.all_animations_finished"
- }
- ],
- "on_entry": [
- "/title @s actionbar 4/5",
- "/playsound addon.kar98",
- "/summon addon:shell ^-0.45^1.59^0.44",
- "/camerashake add @s[r=1] 1 0.1 rotational"
- ]
- },
- "kar98.4": {
- "animations": [
- "kar98shoot"
- ],
- "transitions": [
- {
- "kar98.3": "query.get_equipped_item_name=='kar98' && query.item_remaining_use_duration > 2 && query.all_animations_finished"
- }
- ],
- "on_entry": [
- "/title @s actionbar 3/5",
- "/playsound addon.kar98",
- "/summon addon:shell ^-0.45^1.59^0.44",
- "/camerashake add @s[r=1] 1 0.1 rotational"
- ]
- },
- "kar98.3": {
- "animations": [
- "kar98shoot"
- ],
- "transitions": [
- {
- "kar98.2": "query.get_equipped_item_name=='kar98' && query.item_remaining_use_duration > 2 && query.all_animations_finished"
- }
- ],
- "on_entry": [
- "/title @s actionbar 2/5",
- "/playsound addon.kar98",
- "/summon addon:shell ^-0.45^1.59^0.44",
- "/camerashake add @s[r=1] 1 0.1 rotational"
- ]
- },
- "kar98.2": {
- "animations": [
- "kar98shoot"
- ],
- "transitions": [
- {
- "kar98.1": "query.get_equipped_item_name=='kar98' && query.item_remaining_use_duration > 2 && query.all_animations_finished"
- }
- ],
- "on_entry": [
- "/title @s actionbar 1/5",
- "/playsound addon.kar98",
- "/summon addon:shell ^-0.45^1.59^0.44",
- "/camerashake add @s[r=1] 1 0.1 rotational"
- ]
- },
- "kar98.1": {
- "animations": [
- "kar98shoot"
- ],
- "transitions": [
- {
- "kar98.0": "query.get_equipped_item_name=='kar98' && query.item_remaining_use_duration > 2 && query.all_animations_finished"
- }
- ],
- "on_entry": [
- "/title @s actionbar 0/5",
- "/playsound addon.kar98",
- "/replaceitem entity @p slot.weapon.mainhand 0 addon:kar98_empty 1 0",
- "/summon addon:shell ^-0.45^1.59^0.44",
- "/camerashake add @s[r=1] 1 0.1 rotational"
- ]
- },
- "kar98.0": {
- "transitions": [
- {
- "setup": "query.all_animations_finished"
- }
- ],
- "on_entry": [
- "/playsound addon.pull",
- "/title @s actionbar 弹药上膛"
- ]
- }
- }
- }
- }
- }
复制代码 |
怎么样,是不是感觉晕晕的?别急,我们逐步分析
首先是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这些子组件,可以去文档看(
动画部分 老规矩,看代码
- {
- "format_version": "1.8.0",
- "animations": {
- "animation.kar98.reload": {
- "loop": false,
- "animation_length": 4.8,
- "timeline": {
- "0.0": "/title @s actionbar 装填中",
- "0.1": "/playsound reload.kar98",
- "0.2": "/clear @s addon:kar98 0 1",
- "0.5": "/title @s actionbar 装填中",
- "1.0": "/clear @s addon:kar98_empty 0 1",
- "1.5": "/clear @s addon:792mag5 0 1",
- "2.0": "/title @s actionbar 装填中",
- "2.4": "/title @s actionbar 装填中",
- "2.5": "/title @s actionbar 装填完成",
- "3.3": "/give @s addon:kar98"
- }
- }
- }
- }
复制代码
前面三行就不必多说了
loop是定义这个动画是否循环,后面填布尔值
animation_length是动画的时长
timeline是时间线
下面就是在这个时间线里每秒执行的指令(注意,时间点数不能大于动画时长)
如果你想让你这个动画能被动画控制器调用的话,需要在实体文件里添加调用名及调用文件id,然后再动画控制器里调用这个调用名,这里就不多说(肝不下去了)
没了
好氵啊啊啊啊啊啊啊啊
|
评分查看全部评分
|