1. Wiki
  2. /实体
  3. /你的第一个自定义生物

你的第一个自定义生物

为 Minecraft Bedrock 制作一个简单的被动生物:它会四处走动、看向玩家,还有自己的刷怪蛋。

在本指南中,你将制作一只小兽(Critter):一种小巧友善的四足生物,它会四处闲逛、看着你,受伤时还会逃跑。它有 3D 模型、皮肤、刷怪蛋,还能自己在草地上生成。

生物是附加包中最庞大的一类对象,因为它同时存在于两个包中:行为包决定生物做什么,资源包决定它长什么样。

快捷方式:GodCraft

手工制作模型意味着要一个个输入立方体坐标。在 GodCraft 里,你可以直接用手指捏出它的形状。

  1. 打开工坊,向你的附加包添加一个生物。
  2. 在 3D 模型编辑器中搭建身体,然后用模型绘制器给它画上皮肤。
  3. 设置它的生命值、速度和行为,再添加一个刷怪蛋。
  4. 点击导出。你会得到一个 .mcaddon,下面所有文件都已经写好,包括清单、UUID 和名称。

手动制作

先按照项目设置准备好行为包(BP)和资源包(RP)。我们使用命名空间 myname,所以我们的生物是 myname:critter。

文件所在包作用
entities/critter.jsonBP生命值、移动和行为
spawn_rules/critter.jsonBP它在哪里自然生成
entity/critter.entity.jsonRP使用哪个模型、皮肤和动画
models/entity/critter.geo.jsonRP3D 模型
textures/entity/critter.pngRP皮肤
texts/en_US.langRP生物和刷怪蛋的名称

第 1 步:行为文件

BP/entities/critter.json
{
  "format_version": "1.26.50",
  "minecraft:entity": {
    "description": {
      "identifier": "myname:critter",
      "is_spawnable": true,
      "is_summonable": true
    },
    "components": {
      "minecraft:type_family": {
        "family": ["critter", "mob"]
      },
      "minecraft:health": {
        "value": 8,
        "max": 8
      },
      "minecraft:physics": {},
      "minecraft:collision_box": {
        "width": 0.6,
        "height": 0.7
      },
      "minecraft:movement": {
        "value": 0.25
      },
      "minecraft:movement.basic": {},
      "minecraft:navigation.walk": {
        "avoid_water": true,
        "avoid_damage_blocks": true
      },
      "minecraft:jump.static": {},
      "minecraft:pushable_by_entity": {},
      "minecraft:pushable_by_block": {},
      "minecraft:breathable": {
        "total_supply": 15,
        "suffocate_time": 0
      },
      "minecraft:behavior.float": {
        "priority": 0
      },
      "minecraft:behavior.panic": {
        "priority": 1,
        "speed_multiplier": 1.4
      },
      "minecraft:behavior.random_stroll": {
        "priority": 4,
        "speed_multiplier": 0.8
      },
      "minecraft:behavior.look_at_player": {
        "priority": 5,
        "look_distance": 6.0,
        "probability": 0.02
      },
      "minecraft:behavior.random_look_around": {
        "priority": 6
      }
    }
  }
}

description 部分:

  • identifier 是生物的 ID,/summon myname:critter 用的就是它。
  • is_spawnable 让它可以拥有刷怪蛋并自然生成。
  • is_summonable 让你可以对它使用 /summon。

基础组件:

  • minecraft:type_family 给生物加上标签,其他生物和命令可以检查这些标签,比如 @e[family=critter]。
  • minecraft:health:value 是初始生命值,max 是最大生命值。每颗心等于 2 点。
  • minecraft:physics 赋予它重力和碰撞。没有它,生物会悬浮在原地。
  • minecraft:collision_box 是会与其他东西相撞的隐形盒子,单位是方块。

移动三件套(走路三个都需要):

minecraft:jump.static 让它可以跳上一格高的方块。pushable_by_entity 和 pushable_by_block 组件让玩家和活塞可以推动它,minecraft:breathable 控制它在水下的氧气。

行为和优先级

以 behavior. 开头的组件就是生物的“大脑”。每个都有一个 priority:数字越小越优先。当小兽受伤时,panic(优先级 1)会接管 random_stroll(优先级 4)。

第 2 步:模型

模型由骨骼组成,每根骨骼包含若干立方体。单位是像素:16 像素等于一个方块。

RP/models/entity/critter.geo.json
{
  "format_version": "1.12.0",
  "minecraft:geometry": [
    {
      "description": {
        "identifier": "geometry.myname.critter",
        "texture_width": 64,
        "texture_height": 32,
        "visible_bounds_width": 2,
        "visible_bounds_height": 1.5,
        "visible_bounds_offset": [0, 0.5, 0]
      },
      "bones": [
        {
          "name": "body",
          "pivot": [0, 4, 0],
          "cubes": [{ "origin": [-3, 4, -4], "size": [6, 5, 8], "uv": [0, 0] }]
        },
        {
          "name": "head",
          "parent": "body",
          "pivot": [0, 8, -4],
          "cubes": [{ "origin": [-2.5, 6, -8.5], "size": [5, 5, 5], "uv": [0, 13] }]
        },
        { "name": "leg0", "parent": "body", "pivot": [-2, 4, 3], "cubes": [{ "origin": [-3, 0, 2], "size": [2, 4, 2], "uv": [28, 0] }] },
        { "name": "leg1", "parent": "body", "pivot": [2, 4, 3], "cubes": [{ "origin": [1, 0, 2], "size": [2, 4, 2], "uv": [28, 0] }] },
        { "name": "leg2", "parent": "body", "pivot": [-2, 4, -3], "cubes": [{ "origin": [-3, 0, -4], "size": [2, 4, 2], "uv": [28, 0] }] },
        { "name": "leg3", "parent": "body", "pivot": [2, 4, -3], "cubes": [{ "origin": [1, 0, -4], "size": [2, 4, 2], "uv": [28, 0] }] }
      ]
    }
  ]
}

骨骼特意命名为 head 和 leg0 到 leg3:原版的行走和注视动画移动的正是这些名字的骨骼,所以我们可以免费复用它们。

第 3 步:皮肤

画一张 64x32 的 PNG,保存为 RP/textures/entity/critter.png。每个立方体的 uv 告诉游戏用图片的哪一部分包裹它。手工绘制 UV 布局很麻烦,这就是模型绘制器能帮上大忙的原因。技巧请看像素纹理。

第 4 步:客户端实体

这个文件把 ID 与模型、皮肤、动画和刷怪蛋连接起来:

RP/entity/critter.entity.json
{
  "format_version": "1.10.0",
  "minecraft:client_entity": {
    "description": {
      "identifier": "myname:critter",
      "materials": { "default": "entity_alphatest" },
      "textures": { "default": "textures/entity/critter" },
      "geometry": { "default": "geometry.myname.critter" },
      "animations": {
        "walk": "animation.quadruped.walk",
        "look_at_target": "animation.common.look_at_target"
      },
      "scripts": {
        "animate": [
          { "walk": "query.modified_move_speed" },
          "look_at_target"
        ]
      },
      "render_controllers": ["controller.render.default"],
      "spawn_egg": {
        "base_color": "#c98a4b",
        "overlay_color": "#5a3a1e"
      }
    }
  }
}
  • materials:entity_alphatest 让皮肤中完全透明的像素可以被看穿。
  • render_controllers:controller.render.default 是一个原版控制器,它用 default 纹理和材质绘制 default 几何体。非常适合只有一种皮肤的生物。
  • scripts.animate:行走动画的播放速度与生物的移动速度一致,用的是 Molang 查询 query.modified_move_speed(参见 Molang 查询)。
  • spawn_egg:刷怪蛋的两种颜色。你也可以改用 "texture",填写 item_texture.json 中的短名称。

第 5 步:名称

RP/texts/en_US.lang
entity.myname:critter.name=Critter
item.spawn_egg.entity.myname:critter.name=Critter Spawn Egg

第 6 步:自然生成(可选)

没有这个文件,生物只能通过刷怪蛋或 /summon 出现。有了它,小兽会在白天的草地上成小群生成:

BP/spawn_rules/critter.json
{
  "format_version": "1.8.0",
  "minecraft:spawn_rules": {
    "description": {
      "identifier": "myname:critter",
      "population_control": "animal"
    },
    "conditions": [
      {
        "minecraft:spawns_on_surface": {},
        "minecraft:spawns_on_block_filter": "minecraft:grass_block",
        "minecraft:brightness_filter": { "min": 7, "max": 15, "adjust_for_weather": false },
        "minecraft:weight": { "default": 8 },
        "minecraft:herd": { "min_size": 1, "max_size": 3 },
        "minecraft:biome_filter": { "test": "has_biome_tag", "operator": "==", "value": "animal" }
      }
    ]
  }
}

weight 表示与其他生物相比它被选中的频率。population_control: animal 让它与世界的动物数量上限共享名额,这样它就不会挤满你的世界。

测试你的生物

  1. 安装两个包(导出与安装)并在一个世界中启用它们。
  2. 在创造模式物品栏中找到 Critter Spawn Egg,或者运行 /summon myname:critter。
  3. 看它四处闲逛并看向你。打它一下:它应该会逃跑。

生物隐形或只有影子

游戏找到了行为文件,却没找到模型或皮肤。检查两个包中的 identifier 是否相同、几何体名称是否与 geometry.myname.critter 完全一致,以及纹理路径中是否没有 .png。

  • 生物不移动。 移动的三个部分缺一不可:movement、movement.basic 和 navigation.walk,另外还需要至少一个行走类行为。
  • 生物掉穿地面或悬浮在空中。 检查是否有 minecraft:physics。

更多内容请看故障排除。

下一步

We use cookies to improve your experience and analyse site traffic. Learn more