Bedrock Wiki
  • QQ
  • 原站
新手入门指南
  • Guide
    • 1. 简介
      指南
    • 2. 附加组件详解
    • 3. 软件与准备工作
    • 4. 项目设置
    • 5. 创建自定义物品
    • 6. 创建自定义实体
    • 7. Blockbench:建模、贴图与动画制作
    • 8. 添加战利品表、生成规则与合成配方
  • Extra
    • a. 理解JSON
    • b. 下载示例包
    • c. 故障排除
      帮助
    • d. 高级清单文件指南
    • e. 格式版本
    • f. Android 项目设置
JSON UI
  • General
    • JSON UI 入门指南
      指南
    • 最佳实践
      指南
  • Tutorials
    • Aseprite 动画
    • 保留标题文本
      中级
    • 修改服务器表单
      中级
    • 字符串与数字转换
      中级
    • 按钮与开关
      新手
    • 添加HUD界面元素
      新手
  • Documentation
    • JSON UI 文档
Meta
  • Style Guide
  • 使用JSON模式(Schemas)
  • 实用链接
  • 版本控制
  • 附加包性能优化
  • Q&A
    • GameTest 问答集 2021/08/06
    • 世界生成问答 2024/11/15
    • 延迟渲染技术预览问答 2024/02/23
    • 方块与物品问答 2024/08/30
    • 脚本与编辑器问答 2023/09/22
NBT
  • General
    • .mcstructure
  • Tutorials
    • 扩展结构限制
      简单
    • 教育版中的实验功能
      简单
  • NBT in Depth
    • NBT 库列表
      专家
    • NBT读取示例
      专家
    • 关于NBT(命名二进制标签)
      专家
世界生成
  • General
    • 世界生成入门
      指南
      实验性
    • 特性类型
      实验性
    • 生物群系
      指南
      实验性
  • Tutorials
    • 特征(Feature)的方块条件
      实验性
    • 生成地表区块
      实验性
    • 生成自定义矿石
      实验性
    • 生成自定义结构
      实验性
    • 高度图噪声地形
      实验性
  • Documentation
    • 生物群系标签
动画控制器
  • 动画控制器入门指南
    指南
  • 实体命令
    中级
  • AFK检测器
  • 将Molang变量转换为计分板数值
  • 死亡指令
  • 重生指令
命令
  • General
    • 命令方块入门指南
    • 函数
    • NBT 命令
    • 坐标系
    • 方块状态
    • 理解目标选择器
    • 记分板操作
  • Commands
    • Execute
      简单
    • Playanimation
    • 伤害
    • 播放音效
  • On Event Systems
    • 玩家首次加入时
    • On Player Join
    • 玩家离开时触发
    • 玩家死亡事件
    • 玩家重生事件系统
    • 首次加载世界时
  • Scoreboard Systems
    • 实体计数器
    • 计分板计时器
    • 比较与获取分数
  • Techniques
    • 执行逻辑门
    • MBE - Max的方块实体
    • FMBE - 创建显示实体的新方法
    • 视线检测
    • 移动状态检测
    • 轨道摄像机
  • Useful Creations
    • 多人位置重排系统
      函数
    • 自定义合成台
      简单
实体
  • General
    • Intro to Entities BP
      指南
      新手
    • 实体资源包入门
      指南
      新手
    • 实体问题排查指南
      帮助
    • NPC对话系统
      中级
    • 实体事件
      新手
    • 实体属性
    • 渲染控制器
      新手
    • 生成规则
  • Tutorials
    • 任意坐标系间的坐标转换(世界、实体、骨骼)
      中级
    • 创建船只
      中级
    • 实体手持物品
      中级
    • 实体攻击机制
      中级
    • 实体睡眠机制
      中级
    • 实体碰撞体
      中级
    • 实体移动
    • 实体计时器
      中级
    • 无敌实体
      新手
    • 村庄机制实现指南
    • 检测其他实体
      中级
    • 生成已驯服的实体
      脚本
      中级
    • 视线检测实体
      中级
    • 禁用队友伤害
      中级
    • 范围效果云入门指南
      中级
    • 虚拟实体
      新手
    • 飞行实体控制
      中级
  • Documentation
    • Vanilla Usage Spawn Rules
    • 原版使用组件
    • 抛射物
    • 虚拟组件
    • 运行时标识符
    • 非生物实体运行时标识符
战利品、配方与交易
  • General
    • 交易行为
  • Documentation
    • 战利品表
    • 交易表
    • 合成配方
    • 物品函数
  • Tutorials
    • 随机化结构战利品
      简单
文档
  • Shared Constructs
  • Molang 查询详解
  • Vanilla Materials
    专家
  • 声音定义
  • 文件类型
  • 材质配置文件说明
    专家
  • 菜单分类
  • 资源包文件夹结构
  • 雾效ID
  • 高级Molang指南
方块
  • General
    • 方块入门指南
      指南
      新手
    • 方块组件
    • Block Tags
    • 方块状态
    • Block Traits
    • 方块排列组合
    • 方块事件
      脚本
    • 方块事件迁移指南
      帮助
    • 方块物品化
      中级
    • 方块问题排查指南
      帮助
  • Visuals
    • 方块剔除
      中级
    • 方块模型
      指南
      新手
      简单
    • 方块着色
      简单
    • 方块纹理动画
      中级
    • 方块纹理变体
      中级
  • Tutorials
    • Precise Interaction
      专家
      脚本
    • Precise Rotation
      专家
      脚本
    • 伪方块
      中级
    • 可旋转方块
    • 应用持续效果
      简单
      脚本
    • 矿石战利品表
      简单
      脚本
    • 规避状态值限制
      专家
  • Vanilla Re-Creations
    • 自定义作物
      中级
      脚本
    • 自定义活板门
      中级
      脚本
    • 自定义玻璃
      新手
      简单
      已弃用
    • 自定义釉面陶瓦
      简单
  • Documentation
    • 原版方块模型
      新手
    • 方块形状
    • 方块格式历史
    • 方块音效
服务器
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet 协议
    • RakNet 协议
概念
  • contents.json
  • Molang
    中级
  • Rawtext
  • textures_list.json
  • 命名空间
  • 子包
  • 文本与本地化
  • 着色器
  • 纹理图集
    中级
  • 表情符号与特殊字符
  • 覆盖资源
    中级
  • 音效
    中级
物品
  • General
    • 物品入门指南
      指南
      新手
    • 物品组件
    • 物品标签
    • 物品事件
      脚本
    • Item Event Migration
      帮助
    • 物品问题排查指南
      帮助
  • Tutorials
    • Custom Pottery Sherds
    • 可投掷物品
      中级
    • 生成物品
      中级
    • 自定义武器
      简单
    • 自定义盔甲
    • 自定义食物
      简单
      脚本
    • 通过装备物品执行命令
      实验性
      中级
    • 高分辨率物品
  • Documentation
    • 附魔
    • Numerical Item IDs
    • Vanilla Usage Components
    • 原版物品标识符
      已弃用
    • 可附着物
      新手
    • 物品格式历史记录
视觉效果
  • General
    • 实体视觉效果简介
      指南
    • 基岩版建模指南
    • 动画中的特效
    • 基于数学的动画
      中级
    • 材质
      专家
    • 材质创作
      专家
    • 皮肤包制作指南
    • 自定义死亡动画
      中级
  • Tutorials
    • Glowing Entity Texture
    • 受伤动画
      中级
    • 实体纹理动画
      中级
    • 栓绳位置调整
      简单
    • 玩家几何模型
      新手
    • 移除实体阴影
      中级
    • 重绘生成蛋纹理
      新手
  • Ideas
    • 结构展示技巧
粒子效果
  • General
    • 粒子效果入门
      指南
  • Tutorials
    • 禁用粒子效果
      新手
  • Documentation
    • 原版粒子效果
脚本编写
  • General
    • 脚本编程入门
    • 什么是Script API?
    • API 模块
  • Tutorials
    • GameTests
      实验性
    • 简易聊天命令
      实验性
    • 脚本核心功能
    • 脚本表单
      实验性
    • 脚本请求API
      实验性
    • 阻止方块放置
  • Documentation
    • JavaScript 问题排查指南
    • Script Resources
    • Script Watchdog
      实验性
    • TypeScript
    • 引擎环境
虚拟现实
  • General
    • 启用VR模式
      指南
    • 配置资源包
      专家
  • Tutorials
    • 编辑你的第一个模型
      专家

创建自定义实体

创建自定义实体
  • 实体行为
    • 组件
    • 状态组件
    • 移动组件
    • 行为组件
    • 完整的实体服务端文件
  • 实体资源
    • 模型
    • 纹理
    • 动画

与自定义物品类似,我们也可以创建具有许多与游戏中原版实体相似机制的自定义实体。这些实体功能强大,允许你创建可以繁殖和驯养的动物,或是会攻击所见一切的敌对生物。

在这里,我们将创建一个幽灵实体,它会漂浮、攻击玩家并在死亡时掉落我们的灵质物品。

与物品一样,实体由两部分组成:

  • 视觉效果(纹理、名称、动画、音效)
  • 行为(移动、攻击)

不同的是,我们需要为实体创建两个主要文件:分别位于BP和RP中的_服务端_文件和_客户端_文件。 我们还需要额外的文件来描述实体的几何形状和动画,这些将在后面的部分中介绍。

首先,我们将介绍如何创建实体并定义其行为。接下来,我们将学习如何添加视觉效果。

实体行为 ​

与物品一样,我们需要一个文件来告诉实体如何行为,该文件将一个标识符指向定义行为的某些组件。这个文件与我们的物品行为文件非常相似,只是组件更多。

我们在BP的BP/entities/文件夹下定义服务端文件。我们将此文件命名为ghost.se.json。这里的.se代表_服务端实体_。这是为了清晰起见,并在样式指南中推荐。

这是文件的基本概述:

BP/entities/ghost.se.json
json
{
	"format_version": "1.21.70",
	"minecraft:entity": {
		"description": { ... },
		"components": { ... }
	}
}
1
2
3
4
5
6
7

与物品一样,我们有格式版本,这里我们有"minecraft:entity",因为这是一个实体文件。从现在开始,我们不会评论格式版本,并建议使用我们给出的示例版本。

对于实体,我们在description下有更多信息:

BP/entities/ghost.se.json#minecraft:entity
json
"description": {
	"identifier": "wiki:ghost",
	"is_summonable": true,
	"is_spawnable": true
}
1
2
3
4
5

identifier键的作用相同,指向我们正在讨论的实体。 其他键决定了我们可以将实体添加到世界的方式:

  • is_summonable:是否可以使用/summon命令召唤。
  • is_spawnable:是否可以使用生成蛋或生成规则在世界中生成。

我们建议保持这些设置不变,因为任何更改都会使你在游戏中测试实体变得更加困难。

组件 ​

实体比物品有更多的行为,因此我们需要为其定义更多的组件。 我们将把使用的组件类型分类,然后更详细地查看它们。 有关实体中组件的更多信息,你可以查看我们的页面这里。

状态组件 ​

这些是你通常在每个实体上都会有的组件。它们定义了一些实体的核心属性。

BP/entities/ghost.se.json#minecraft:entity#components
json
"minecraft:type_family": {
	"family": ["ghost", "monster"]
},
"minecraft:health": {
	"value": 20,
	"max": 20
},
"minecraft:attack": {
	"damage": 3
},
"minecraft:movement": {
	"value": 0.2
},
"minecraft:collision_box": {
	"width": 0.8,
	"height": 1.8
},
"minecraft:loot": {
	"table": "loot_tables/entities/ghost.json"
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

组件minecraft:health、minecraft:attack和minecraft:movement直接设置实体的生命值、攻击伤害和移动速度。实体的碰撞箱是实体与方块或其他实体交互或碰撞的框。这是用minecraft:collision_box定义的,它将框的中心放在实体的中间。

minecraft:type_family为实体添加家族标签。家族标签用于将类似类别的实体分组。例如,monster包括僵尸、骷髅和爬行者。这使我们能够选择所有带有monster标签的实体。

minecraft:loot定义了实体死亡时掉落的战利品表的路径。我们将在后面的部分中使用此路径创建此战利品表。

移动组件 ​

为了使实体能够移动,我们需要定义两件事:_如何_移动和_可以_移动到何处。这分别使用movement和navigation组件定义。

如果你希望你的实体能够移动,你总是需要一个movement和navigation组件。

BP/entities/ghost.se.json#minecraft:entity#components
json
"minecraft:physics": {},
"minecraft:jump.static": {},
"minecraft:movement.basic": {},
"minecraft:navigation.walk": {
	"can_walk": true,
	"avoid_sun": true,
	"can_pass_doors": true,
	"can_open_doors": true
}
1
2
3
4
5
6
7
8
9

minecraft:physics用于向你的实体应用重力和碰撞。注意:你不能通过使用组件组来更改此组件。 minecraft:jump.static允许你的实体跳跃以穿越方块。两者几乎用于每个实体。

有几种不同类型的移动组件,允许不同类型的移动,例如海豚使用的minecraft:movement.swim,鹦鹉使用的minecraft:movement.fly和蜜蜂使用的minecraft:movement.hover。 minecraft:movement.basic组件允许我们的实体通过移动方块来行走。为了使我们的实体看起来像是在漂浮,我们将使用我们的几何形状。

导航组件是一个路径查找器,定义了我们允许实体遵循的路径。例如,骷髅会尽量避免在阳光下行走,因此它们的路径阻止它们采取会使它们暴露在阳光下的路径。此外,鹦鹉可以飞行,因此它们可以像行走的生物一样在空中路径。

这些组件有许多不同的设置,允许有趣的路径。我们选择的设置让我们的幽灵在地面上行走,避免踏入阳光,穿过门口并打开门。

行为组件 ​

虽然我们已经定义了实体_如何_做事情,但我们还没有定义_何时_或_做什么_。这就是.behavior组件的作用。这些组件定义了我们的实体将执行的具体动作。 例如,村民会尝试繁殖,因此他们有minecraft:behavior.breed组件,驯服的狼跟随它们的主人,因此他们有minecraft:behavior.follow_owner组件。

我们希望我们的幽灵能够闲逛和环顾四周,在附近时瞄准玩家,然后攻击他们。以下是我们使用的组件:

BP/entities/ghost.se.json#minecraft:entity#components
json
// 允许随机移动和环顾四周
"minecraft:behavior.random_stroll": {...},
"minecraft:behavior.random_look_around": {...},
"minecraft:behavior.look_at_player": {...},
// 允许瞄准
"minecraft:behavior.hurt_by_target": {...},
"minecraft:behavior.nearest_attackable_target": {...},
// 允许攻击
"minecraft:behavior.delayed_attack": {...}
1
2
3
4
5
6
7
8
9

第一个组件minecraft:behavior.random_stroll允许我们的实体定期选择一个附近的随机点进行路径查找。这个路径是由我们的navigation组件创建的,然后移动类型由我们的movement组件定义。

接下来的两个组件允许我们的实体随机环顾四周,并在范围内时看向玩家。

对于攻击,为了使我们的实体能够攻击,它需要一个target。行为minecraft:behavior.hurt_by_target和minecraft:behavior.nearest_attackable_target将使实体瞄准任何伤害它的实体,并瞄准范围内最近的敌人。

最后,minecraft:behavior.delayed_attack是我们的实体实际攻击其目标的方式。

这些行为中的每一个都有进一步的设置来调整我们想要的确切行为。

BP/entities/ghost.se.json#minecraft:entity#components
json
"minecraft:behavior.random_stroll": {
	"priority": 6,
	"speed_multiplier": 1
},
"minecraft:behavior.random_look_around": {
	"priority": 7
},
"minecraft:behavior.look_at_player": {
	"priority": 7,
	"look_distance": 6,
	"probability": 0.02
},
"minecraft:behavior.hurt_by_target": {
	"priority": 1
},
"minecraft:behavior.nearest_attackable_target": {
	"priority": 2,
	"within_radius": 25,
	"reselect_targets": true,
	"entity_types": [
		{
			"filters": {
				"any_of": [
					{
						"test": "is_family",
						"subject": "other",
						"value": "player"
					}
				]
			},
			"max_dist": 35
		}
	]
},
"minecraft:behavior.delayed_attack": {
	"priority": 0,
	"attack_once": false,
	"track_target": true,
	"require_complete_path": false,
	"random_stop_interval": 0,
	"reach_multiplier": 1.5,
	"speed_multiplier": 1,
	"attack_duration": 0.75,
	"hit_delay_pct": 0.5
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

有关这些选项的更多详细信息,你可以在官方文档bedrock.dev上阅读。

优先级 ​

所有行为都包含一个"priority"字段。此字段用于决定当多个行为可以运行时运行哪一个。

当实体选择要做的事情时,它会从最低优先级到最高优先级搜索所有行为,并选择它可以执行的第一个行为。因此,你需要使重要的行为(如minecraft:behavior.nearest_attackable_target)的优先级低于行为(如minecraft:behavior.look_at_player)。如果look_at_player行为的优先级较低,当玩家靠近时,它将始终首先运行此行为,实体将永远不会攻击。

一般来说,重要的行为的优先级为0或1。

完整的实体服务端文件 ​

完整的ghost.se.json
BP/entities/ghost.se.json
json
{
    "format_version": "1.21.70",
    "minecraft:entity": {
        "description": {
            "identifier": "wiki:ghost",
            "is_summonable": true,
            "is_spawnable": true
        },
        "components": {
            "minecraft:type_family": {
                "family": ["ghost", "monster"]
            },
            "minecraft:health": {
                "value": 20,
                "max": 20
            },
            "minecraft:attack": {
                "damage": 3
            },
            "minecraft:movement": {
                "value": 0.2
            },
            "minecraft:collision_box": {
                "width": 0.8,
                "height": 1.8
            },
            "minecraft:loot": {
                "table": "loot_tables/entities/ghost.json"
            },
            "minecraft:physics": {},
            "minecraft:jump.static": {},
            "minecraft:movement.basic": {},
            "minecraft:navigation.walk": {
                "can_walk": true,
                "avoid_sun": true,
                "can_pass_doors": true,
                "can_open_doors": true
            },

            "minecraft:behavior.random_stroll": {
                "priority": 6,
                "speed_multiplier": 1
            },
            "minecraft:behavior.random_look_around": {
                "priority": 7
            },
            "minecraft:behavior.look_at_player": {
                "priority": 7,
                "look_distance": 6,
                "probability": 0.02
            },
            "minecraft:behavior.hurt_by_target": {
                "priority": 1
            },
            "minecraft:behavior.nearest_attackable_target": {
                "priority": 2,
                "within_radius": 25,
                "reselect_targets": true,
                "entity_types": [
                    {
                        "filters": {
                            "any_of": [
                                {
                                    "test": "is_family",
                                    "subject": "other",
                                    "value": "player"
                                }
                            ]
                        },
                        "max_dist": 35
                    }
                ]
            },
            "minecraft:behavior.delayed_attack": {
                "priority": 0,
                "attack_once": false,
                "track_target": true,
                "require_complete_path": false,
                "random_stop_interval": 0,
                "reach_multiplier": 1.5,
                "speed_multiplier": 1,
                "attack_duration": 0.75,
                "hit_delay_pct": 0.5
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

这样我们就完成了实体行为文件。

更复杂的实体还可以有不同的_状态_,它们会根据所处的状态而表现不同。例如,一只野生的狼会自由走动,但一旦被驯服,它就会跟随玩家。一个_事件_(被驯服)导致狼改变_状态_。这个功能允许我们创建动态实体,可以在不同事件发生时执行不同的动作。你可以在我们的指南这里了解更多。

如果你打开你的世界并尝试使用/summon wiki:ghost召唤你的实体,它应该会像我们预期的那样行为,但地面上只会有一个影子。你可能还会看到它的名称是一个翻译键,类似于我们的物品发生的情况。

接下来,我们将学习如何创建我们的资源或客户端文件,以及如何分配我们的纹理、几何形状和动画。

实体资源 ​

为实体应用视觉效果与物品非常不同。由于有更多的部分,我们有一个单独的文件专门用于定义资源。 这被称为实体_客户端文件_,我们将其命名为ghost.ce.json。这些文件放在RP/entity/文件夹中。

在本节中,我们将使用为我们的幽灵实体创建的示例资源来演示如何将它们添加到实体中。在指南的下一部分中,我们将解释如何使用Blockbench(一个专门的3D编辑器)来创建你自己的实体几何形状和动画。

模型 ​

实体的“模型”是实体的形状,也称为“几何形状”。这描述了实体的形状,比如猪是一个有四条腿和一个头的盒子,而鸡有两条腿、一个头和翅膀。几何形状以JSON文件的形式存储在RP/models/entity/中,我们的文件将命名为ghost.geo.json。

这个文件是由Blockbench自动为我们生成的,因此不需要手动学习其语法。因此,我们在查看文件时不会详细介绍。它存储了模型中每个方块的数据,如大小、位置和旋转。

RP/models/entity/ghost.geo.json
json
{
    "format_version": "1.12.0",
    "minecraft:geometry": [
        {
            "description": {
                "identifier": "geometry.ghost",
                "texture_width": 64,
                "texture_height": 64,
                "visible_bounds_width": 3,
                "visible_bounds_height": 3.5,
                "visible_bounds_offset": [0, 1.25, 0]
            },
            "bones": [
                { "name": "root", "pivot": [0, 3, 0] },
                {
                    "name": "body",
                    "parent": "root",
                    "pivot": [0, 4.625, 0],
                    "cubes": [
                        {
                            "origin": [-4, 3, -4],
                            "size": [8, 13, 8],
                            "uv": [0, 20]
                        }
                    ]
                },
                {
                    "name": "leftArm",
                    "parent": "body",
                    "pivot": [4.6, 15.5, 0.5],
                    "cubes": [
                        {
                            "origin": [4.1, 7, -1],
                            "size": [3, 9, 3],
                            "uv": [32, 32]
                        }
                    ]
                },
                {
                    "name": "rightArm",
                    "parent": "body",
                    "pivot": [-4.5, 15.5, 0.5],
                    "cubes": [
                        {
                            "origin": [-7.1, 7, -1],
                            "size": [3, 9, 3],
                            "uv": [32, 20]
                        }
                    ]
                },
                {
                    "name": "head",
                    "parent": "body",
                    "pivot": [0, 16, 0],
                    "cubes": [
                        {
                            "origin": [-5, 16, -5],
                            "size": [10, 10, 10],
                            "uv": [0, 0]
                        }
                    ]
                }
            ]
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

我们需要的重要信息是identifier,我们将使用它来引用我们的几何文件,这里是geometry.ghost。

纹理 ​

我们的实体现在有了形状,但它还需要一个纹理。这个纹理也可以在Blockbench中创建,只是一个.png文件。

RP/textures/entity/ghost.png

ectoplasm.png

在此下载纹理

你可能还记得,当我们制作物品时,我们为纹理分配了一个短名称以便以后引用。我们将在实体文件中为实体做类似的事情,因此请确保你保留纹理的文件路径。

动画 ​

动画允许我们的实体更有生命力并以不同的方式移动。我们可以为实体设置任意数量的动画,还可以使用_动画控制器_在不同的时间触发它们,我们将在下一节中介绍。

根据你的实体,你可能需要不同的动画

贡献者

编辑 创建自定义实体

Bedrock Wiki by Bedrock OSS ,Translate by 8aka-Team

"Minecraft"是Mojang AB的注册商标。

Bedrock OSS、Bedrock Wiki以及 bedrock.dev 与Microsoft及Mojang AB不存在任何隶属关系。

  • 隐私政策
  • 加入QQ社区
  • 参与贡献指南
  • 访问代码仓库