zh_cn:tutorial:entity
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| zh_cn:tutorial:entity [2023/01/15 01:07] – [创建一个实体] solidblock | zh_cn:tutorial:entity [2023/01/15 01:23] (current) – [创建一个实体] solidblock | ||
|---|---|---|---|
| Line 8: | Line 8: | ||
| * 船 | * 船 | ||
| - | 生物实体(Living Entity)是拥有生命值,并且可以造成伤害的实体。 | + | 生物实体(Living Entity)是拥有生命值,并且可以造成伤害的实体。 |
| 为了实现不同的功能,生物实体有着不同的分支类型,其中有: | 为了实现不同的功能,生物实体有着不同的分支类型,其中有: | ||
| * '' | * '' | ||
| Line 44: | Line 44: | ||
| </ | </ | ||
| - | 你可以在 '' | + | 你可以在 '' |
| - | Fabric提供一个 '' | + | |
| - | Fabric提供的Builder类内置用于配置实体的 追踪数值(tracking values) | + | |
| <code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
| Line 52: | Line 50: | ||
| | | ||
| /* | /* | ||
| - | * 使用 | + | * 使用“entitytesting: |
| * | * | ||
| * 这个实体注册在了 SpawnGroup# | * 这个实体注册在了 SpawnGroup# | ||
| - | * 它有一个 .75 * .75 (或12个像素宽,即一个方块的3/ | + | * 它有一个 |
| */ | */ | ||
| public static final EntityType< | public static final EntityType< | ||
| Line 70: | Line 68: | ||
| </ | </ | ||
| - | 实体需要 //属性(Attributes)// 和 //渲染器(Renderer)// 才能起作用。 | + | 实体需要// |
| ===== 注册实体的属性 ===== | ===== 注册实体的属性 ===== | ||
| Line 105: | Line 103: | ||
| ===== 注册实体的渲染器 ===== | ===== 注册实体的渲染器 ===== | ||
| - | 最后一个需要注册的是实体的**渲染器**。渲染器一般通过提供模型来决定实体的 | + | 最后一个需要注册的是实体的**渲染器**。渲染器一般通过提供模型来决定实体的 |
| - | '' | + | '' |
| - | * '' | + | * '' |
| * '' | * '' | ||
| * 实体阴影的大小,'' | * 实体阴影的大小,'' | ||
| - | 下面的代码展示了一个简单的实体渲染器,它的阴影大小是0.5f, 贴图的路径为 '' | + | 下面的代码展示了一个简单的实体渲染器,阴影大小是 0.5f,纹理的路径为 '' |
| - | 注意:用到的贴图和模型将在下一步创建。 | + | 注意:用到的纹理和模型将在下一步创建。 |
| <code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
| /* | /* | ||
| - | * 一个用来提供模型、阴影大小和贴图的渲染器 | + | * 一个用来提供模型、阴影大小和纹理的渲染器 |
| */ | */ | ||
| public class CubeEntityRenderer extends MobEntityRenderer< | public class CubeEntityRenderer extends MobEntityRenderer< | ||
| Line 139: | Line 137: | ||
| public void onInitializeClient() { | public void onInitializeClient() { | ||
| /* | /* | ||
| - | | + | * 方块实体渲染器的注册,提供模型、阴影大小和纹理的渲染器。 |
| - | * | + | |
| - | * 实体渲染器也可以在实体基于上下文进行渲染前(EndermanEntityRenderer# | + | |
| - | */ | + | |
| EntityRendererRegistry.INSTANCE.register(EntityTesting.CUBE, | EntityRendererRegistry.INSTANCE.register(EntityTesting.CUBE, | ||
| return new CubeEntityRenderer(dispatcher); | return new CubeEntityRenderer(dispatcher); | ||
| Line 150: | Line 148: | ||
| </ | </ | ||
| - | ===== 创建模型和贴图 | + | ===== 创建模型和纹理 |
| - | 完成实体创建的最后一步是创建模型和贴图。 | + | 完成实体创建的最后一步是创建模型和纹理。模型定义了实体的// |
| - | 模型定义了实体的 //结构// ,而贴图提供了实体的颜色。 | + | |
| - | 标准的模型在类的顶部提供并在构造方法中初始化"部位(parts)", 或 '' | + | 标准的模型在类的顶部提供并在构造方法中初始化“部位(parts)”,即 |
| - | 然后在 '' | + | |
| - | 注意 '' | + | |
| - | + | ||
| - | '' | + | |
| - | * 当前模型对象 | + | |
| - | * textureOffsetU, | + | |
| - | * textureOffsetV, | + | |
| - | + | ||
| - | 贴图偏移值指在你的贴图文件中,当前模型贴图的位置。 | + | |
| - | 我们的实体的一个简单的方块,所以 '' | + | |
| <code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
| Line 172: | Line 159: | ||
| private final ModelPart base; | private final ModelPart base; | ||
| | | ||
| - | public CubeEntityModel() { | + | public CubeEntityModel(ModelPart modelPart) { |
| - | base = new ModelPart(this, 0, 0); | + | base = modelPart.getChild(EntityModelPartNames.CUBE); |
| } | } | ||
| | | ||
| Line 179: | Line 166: | ||
| } | } | ||
| </ | </ | ||
| - | + | 在创建一个部位之后,我们需要添加一个形状(shape)。为此,我们必须为根部添加一个子形状。新部分的纹理位置在 '' | |
| - | 在创建一个部位之后,我们需要为他添加一个形状(shape)。 | + | |
| - | 注意,模型的原点从拐角处开始,所以你需要一些偏移让它居中: | + | |
| <code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
| Line 189: | Line 174: | ||
| | | ||
| public CubeEntityModel() { | public CubeEntityModel() { | ||
| - | | + | |
| - | base.addCuboid(-6, -6, -6, 12, 12, 12); | + | } |
| + | |||
| + | // 你可以使用 BlockBench,制作你的模型并为你的实体模型导出以得到这个方法。 | ||
| + | public static TexturedModelData getTexturedModelData() { | ||
| + | ModelData modelData | ||
| + | ModelPartData modelPartData = modelData.getRoot(); | ||
| + | modelPartData.addChild(EntityModelPartNames.CUBE, ModelPartBuilder.create().uv(0, 0).cuboid(-6F, 12F, -6F, 12F, 12F, 12F), ModelTransform.pivot(0F, | ||
| } | } | ||
| - | | ||
| - | [...] | ||
| } | } | ||
| </ | </ | ||
| - | O我们的实体模型现在有了一个12x12x12的方块(大约一个方块的75%),并以0, 0, 0为中心。 | + | 我们的实体模型现在有了一个 12x12x12 的方块(大约一个方块的75%),并以0, 0, 0为中心。'' |
| - | '' | + | |
| - | '' | + | |
| <code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
| Line 215: | Line 202: | ||
| @Override | @Override | ||
| public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { | public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { | ||
| - | | + | |
| - | matrices.translate(0, 1.125, 0); | + | |
| - | + | }); | |
| - | // 渲染方块实体 | + | |
| - | base.render(matrices, | + | |
| } | } | ||
| } | } | ||
| </ | </ | ||
| - | + | 要完成我们的模型,我们还需要一个纹理文件。默认的纹理大小是64宽、32高的;你可以通过在 '' | |
| - | 我们还需要添加一个贴图文件来完成它。默认的贴图大小是64宽、32高的; | + | |
| - | 你可以通过改变模型构造函数里的 | + | |
| - | 我们使用64x64的贴图: | + | |
| {{https:// | {{https:// | ||
| Line 235: | Line 217: | ||
| private final ModelPart base; | private final ModelPart base; | ||
| | | ||
| - | public | + | public |
| - | this.textureHeight = 64; | + | |
| - | this.textureWidth = 64; | + | |
| - | | + | |
| [...] | [...] | ||
| + | return TexturedModelData.of(modelData, | ||
| } | } | ||
| | | ||
| Line 247: | Line 227: | ||
| ===== 生成你的实体 ===== | ===== 生成你的实体 ===== | ||
| + | 记得将客户端入口点添加到 fabric.mod.json 中,像这样: | ||
| + | <code json> | ||
| + | |||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ], | ||
| + | " | ||
| + | " | ||
| + | ] | ||
| + | }, | ||
| + | </ | ||
| - | 你可以在游戏内使用 ''/ | + | 你可以在游戏内使用 ''/ |
| {{https:// | {{https:// | ||
| + | **注意:**如果你的实体没有继承 '' | ||
zh_cn/tutorial/entity.1673744825.txt.gz · Last modified: 2023/01/15 01:07 by solidblock