<本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。>

基岩版实体事件文档

来自Minecraft Wiki
跳转至: 导航搜索


Information icon.svg
此特性为基岩版独有。

这是一个适用于基岩版1.14.0实体事件文档

动画控制器[编辑 | 编辑源代码]

在状态为「进入」或「退出」时触发动画 进入时触发的动画为"on_entry",离开时触发的动画为"on_exit"

{
  "format_version": "1.8.0",
  "animation_controllers": {
    "controller.animation.test": {
      "states": {
        "default": {
          "on_entry": [
            "event1", //这些事件可以是任何事件、命令、MoLang或实体事件
            "event2",
            "event3"
          ],
          "on_exit": [
            "event1",
            "event2"
          ]
        },
      }
    }
  }
}

动画[编辑 | 编辑源代码]

动画事件可对各个事件设立专属的时间轴。 「时间轴」部分包含事件时间轴列表。 以下是各种示例,其中特定时间可以触发单个或一系列事件:

{
  "format_version": "1.8.0",
  "animations": {
    "animation.test_events": {
      "timeline": {
        "2.0": "@s minecraft:entity_born",
        "4.0": [ "@s minecraft:ageable_grow_up" ]
      },
      "animation_length": 5.0
    },
    "animation.test_molang": {
      "timeline": {
        "0.0": "variable.pop_smoke = 1; variable.pop_bubbles = 0;",
        "3.0": [
          "variable.pop_smoke = 0;",
          "variable.pop_bubbles = 1;"
        ]
      }
    },
    "animation.test_commands": {
      "timeline": {
        "1.0": "/tell @a timeline command1",
        "2.0": [
          "/tell @a timeline command 2.1",
          "/tell @a timeline command 2.2"
        ],
        "3.0": [ "/tell @a command 3" ]
      }
    }
  }
}

动画注意事项[编辑 | 编辑源代码]

你可以在游戏客户端通过资源包使用动画触发实体事件,也可以在服务端上透过行为包触发。 由于服务端没有画面(视觉效果),因此不会出现基于骨骼(2D、3D模型……等)的动画。 但是,由于传统动画基本上是事件时间轴的一部分,所以由动画触发并发生在骨骼(装备、模型……等)上的动画将会改变骨骼看起来的外观。 基岩版Minecraft动画系统的工作机制是动画控制器(state machines)和动画(timeline)共同工作。 这些概念直接适用于事件的触发,因此动画系统可以在服务端以去除视觉效果的方式执行,并驱动实体事件。

要在服务端上触发实体事件,请将动画控制器和动画添加到行为包中,就像添加到资源包中一样。 将动画和动画控制器添加到实体代码中的“animations”部分。 这些动画和动画控制器将在服务端上运行,就像它们在资源包中的客户端上一样。 在“scripts”部分添加“animate”子部分,以指定要自动运行的动画或动画控制器。

要在客户端上触发事件则不需要特殊的设置,因为客户端实体通常已经写入了动画和动画控制器。 只需在动画或动画控制器中将事件添加到需要的地方即可。

{
  //服务端的实体示例,已修改为运行动画和动画控制器
  "format_version": "1.8.0",
  "minecraft:entity": {
    "description": {
      "identifier": "minecraft:cat",
      ...
      "animations": {
        "anim1": "animation.anim1",
        "anim2": "animation.anim2",
        "anim_controller1": "controller.animation.test1",
        "anim_controller2": "controller.animation.test2"
      },
      "scripts": {
        //只有这里的动画和动画控制器会自动运行
        "animate": [
          "anim1",
          "anim_controller1",
          ...
         ]
      }
      ...
    },
    ...
  },
  ...
}

事件[编辑 | 编辑源代码]

事件包含三个类别,所有类别均以字符串表示:

  1. 实体事件
  2. 斜杠命令
  3. MoLang表达式

详细介绍:

实体事件:仅服务端。 现在,官方仅支持实体事件发生于他自身,即其形式为“@s事件”。 这些是在实体定义文件的事件部分中声明的事件。 例如在cat.json中,“minecraft:ageable_grow_up”事件使小猫长大。 这将采用“@s minecraft:ageable_grow_up”的形式

斜杠命令:仅服务端。 可以调用任何斜杠命令,例如“/ particle minecraft:example_smoke_puff~ ~ ~”。 斜杠命令的假定实体是调用实体,因此这项斜杠命令将在该实体的位置产生烟熏效果。

MoLang表达式:这将执行MoLang表达式。 主要用途是设置MoLang变量,以便以后使用。 例如,状态转换可能根据某个特定的MoLang变量,并且此表达式可能会更改该变量。 实体上的粒子效果可能会由于该效果用于着色的MoLang变量而改变颜色。 移动手臂的动画可能会使用由动画事件设置的MoLang变量。

//实体事件,将特定事件名称置于"@s"后
"@s minecraft:entity_event"

//斜杠命令,可以是任何服务端的命令
//是从一个实体发送的,所以默认目标为该发送命令的实体
"/tell @a this is a message"

//MoLang表达式,对实体执行一个MoLang表达式
"variable.something_to_set = 3;"

通常注意事项[编辑 | 编辑源代码]

本文档包含有关通过实体.json数据驱动各种事件的详细信息。 实体事件可以同时出现在行为和资源包中。 行为包与资源包中的动画和动画控制器设置是相同的,尽管实体.json本身使用不同的方法来激活动画。

实体事件是改变游戏中「游戏玩法」和「实体状态变化」的一种方式。 这些事件通常可以包括斜杠命令(仅行为包),实体事件(仅行为包,例如:成年)和MoLang表达式(例如,在特定实体上将MoLang变量“variable.foo”设置为3)。 动画和动画控制器提供了一种执行实体状态机(state machines)和时间轴(timeline)的方法。 例如,特定的动画控制器可能处于特定的状态,并正在运行特定的动画,并且我们希望在进入/退出该状态时触发事件。 另外,如果一个动画正在运行,而我们希望在该动画运行期间触发事件。 实体事件时间轴机制使这成为可能。