实体¶
实体(Entity)是Minecraft基岩版中存在于世界内的所有动态对象的统称。玩家、生物、掉落物、弹射物、矿车、经验球等均属于实体。与静态的方块不同,实体具有精确的浮点坐标位置、速度、旋转角度等运动属性,并可在世界中自由移动。
概述¶
实体是基岩版游戏世界中最重要的组成要素之一。每个实体在游戏中都具有唯一的实体唯一ID(Actor Unique ID)用于标识,并拥有一个赋命名空间标识符指示其类型。
在基岩版的源码和引擎层面,实体通常被称为活动对象(Actor)。“Actor”是引擎内部的术语,而“Entity”则是面向开发者的术语。两者指代同一概念,但在不同的文档和代码环境中可能交替出现。
实体分类¶
基岩版中的实体可以从多个维度进行分类:
按类型分类¶
- 生物(Mob)
- 具有AI行为的实体,包括动物、怪物和NPC等。生物通常拥有生命值、AI意向、寻路能力等特性。
- 非生物实体(Non-Mob Entity)
- 不具有常规AI的实体,例如掉落物、经验球、弹射物、矿车、船、盔甲架等。
- 玩家(Player)
- 由真实玩家控制的特殊实体,拥有独特的输入处理、背包系统和界面交互能力。
按定义方式分类¶
- 原版实体
- 由游戏内置定义的实体。原版实体的行为一部分通过数据驱动定义,一部分通过硬编码实现。
- 自定义实体
- 由附加包开发者通过数据驱动系统定义的实体。自定义实体在行为包和资源包中分别拥有定义文件。
实体定义¶
实体在附加包中通过两类定义文件进行声明:
服务端定义¶
位于行为包的entities/目录中,定义实体的行为逻辑。服务端定义文件的根键为minecraft:entity,包含以下主要部分:
- 描述(Description):声明实体的标识符、是否可生成、是否可召唤、运行时标识符等基本信息。
- 组件(Components):定义实体始终具有的行为和属性。
- 组件组(Component Groups):定义可被动态添加或移除的组件集合。
- 事件(Events):定义可被触发的事件,用于添加或移除组件组。
客户端定义¶
位于资源包的entity/目录中,定义实体的外观和渲染方式。客户端定义文件的根键为minecraft:client_entity,主要声明以下内容:
- 实体的标识符。
- 所使用的几何体模型、纹理和材质。
- 所使用的动画和动画控制器。
- 所使用的渲染控制器。
- 生成蛋的颜色。
实体组件¶
组件(Component)是实体行为定义中的基本功能单元。基岩版提供了大量预定义的组件,涵盖实体的各个方面:
- 属性组件:如
minecraft:health(生命值)、minecraft:movement(移动速度)、minecraft:collision_box(碰撞箱)等。 - AI意向组件:如
minecraft:behavior.nearest_attackable_target(寻找可攻击目标)、minecraft:behavior.random_stroll(随机游走)等。 - 传感器组件:如
minecraft:environment_sensor(环境传感器)、minecraft:damage_sensor(伤害传感器)等。 - 交互组件:如
minecraft:interact(交互)、minecraft:rideable(可骑乘)等。
族¶
族(Family)是实体的一种分类标记,通过minecraft:type_family组件定义。族用于在AI意向和目标选择器等场景中按类别筛选实体。例如,原版的僵尸属于zombie、undead和monster族。
实体属性¶
实体属性(Entity Property),也称为活动对象属性(Actor Property),是实体可以持有的自定义数据字段。属性可以是布尔值、整数、浮点数、枚举或字符串类型,在实体的描述部分中声明,通过事件或Molang进行读写。实体属性的值在实体的生命周期内持久存在,并可在网络上同步。
客户端实体¶
客户端实体(Client Entity)是资源包中定义的实体渲染信息。客户端实体将标识符与几何体模型、纹理、动画、渲染控制器等资源关联起来。在中国版中,自定义方块实体也可以通过挂接客户端实体的方式获得复杂的模型和动画。
附着物¶
附着物(Attachable)是一种特殊的客户端实体,用于定义物品在手持、穿戴等场景下的渲染方式。附着物将物品与几何体模型、纹理、动画等渲染资源关联,使物品在第一人称、第三人称和GUI等不同场景中具有不同的显示效果。