This commit is contained in:
boybook
2025-12-01 20:59:16 +08:00
parent 12738a142c
commit 760c2dd9ad
5535 changed files with 21070 additions and 2021 deletions

View File

@@ -0,0 +1,17 @@
---
front: https://nie.res.netease.com/r/pic/20211104/69055361-2e7a-452f-8b1a-f23e1262a03a.jpg
hard: 入门
time: 5分钟
---
# 摘要
在本章中,你将认识我的世界中的各种基本概念。这将有助于你在后续开发过程中能够更好地理解我的世界这款游戏,从而写出优异的模组。
- 在第一节(*区块、世界和存档*)中,你将认识我的世界中一个**世界****World**)的基本组成,了解一个世界是由一个个的**区块****Chunk**)组成的,而区块又是一个个**方块****Block**)组成的。
- 在第二节(*实体、生物和弹射物*)中,你讲学习到这个世界的**生物****Mob**)事实上都属于一种更广泛的类别——**实体****Entity**),以及了解到**弹射物****Projectile**)其实也是一种实体。
- 在第三节(*方块、物品和物品实体*)中,你将认识到方块和**物品****Item**)的关系,了解到物品和**物品实体****Item Entity**)的不同。
- 在第四节(*模型、纹理和动画*)中,你讲学习到两种不同的**模型****Model**),分别是原版模型的**几何****Geometry**)和中国版特有的骨骼模型。你还会认识到什么是**纹理****Texture**)和**动画****Animation**)。
- 在最后一节(*游戏界面和特效粒子*)中,你将熟悉什么是**UI**、**粒子****Particle**)和**特效****Effect**),了解我的世界的特效粒子是如何运行的。
本章关键词:世界 存档 区块 子区块 方块 碰撞箱 亮度 材料 形状 液体 物品 方块物品 堆叠 耐久 武器 工具 盔甲 物品实体 实体 生物 玩家 弹射物 模型 纹理 动画 序列帧 UI 粒子 特效

View File

@@ -0,0 +1,29 @@
---
front: https://nie.res.netease.com/r/pic/20211104/69055361-2e7a-452f-8b1a-f23e1262a03a.jpg
hard: 入门
time: 10分钟
---
# 区块、世界和存档
在本节中,我们将一起了解我的世界中一个世界的组成方式。
## 世界和存档
在我的世界中,**世界****World**)是玩家最主要的游玩场所。一个世界便是玩家进入游戏后所观察到一切事物的总和。丰富多彩的群系,林林总总的生物和各式各样的地形与组成地形的方块,都是这个世界的一部分。对于每一个世界,我们都有一个**存档****Level**)来储存它。存档是一个世界的文件记录,它通常是以一个文件夹的形式而存在的。在游戏选择世界的界面上,我们能看到我们创建过、游玩过的的各式各样的存档。这其中每一个条目都是代表着一个存档,同时也是一个可以供我们选择进入的世界
![游戏的世界选择界面](./images/2.1_world_screen.png)
在我们进入世界后,我们最先接触到的便是**方块****Block**了。由于世界约等于是无限大的所以方块也可以认为是无限多的。一个方块便是在游戏中以1m³为单位的一个块状物体。有的方块可以充斥这个1m³的空间我们称作完整方块有的则更小一些形状也多样一些这些都是不完整方块开发者还可以通过自定义方块定义出超过该空间大小的方块。方块组成了这个世界的基本形状配合以生物群系和各种生物使得这个世界更加多彩。
![方块举例](./images/2.1_block_example.png)
## 区块
世界在横向上非常广大,为了使世界与世界之间不出现重复,游戏使用**种子****Seed**)来配合生成世界。每一个种子都将对世界生成器造成随机的影响,使得每一个世界的每一个相同的位置都会出现不同的结果。再加之以玩家后续在世界中还会进行各种建筑、开采和改造,我们便需要一种存储方式来将这种不同存储在存档中。**区块****Chunk**)应运而生。
区块是一个尺寸为16×256×16个方块的集合。由于在我的世界的坐标中x坐标和z坐标代表长宽y坐标代表高度。所以我们可以看到区块其实是一个竖长条的长方体。而一个存档便是由一个个区块并排横向排列的一个二维地图。
![一个区块](./images/2.1_chunk.png)
区块又由一个个的**子区块****Subchunk**组成每个子区块是一个16×16×16个方块的立方体。所以一个区块事实上是由16个子区块自下而上排列而成的。我的世界中很多游戏机制都是以区块或者子区块为单位的更多的信息可以参考[Minecraft Wiki上的区块页面](https://zh.minecraft.wiki/w/%E5%8C%BA%E5%9D%97)。

View File

@@ -0,0 +1,31 @@
---
front: https://nie.res.netease.com/r/pic/20211104/69055361-2e7a-452f-8b1a-f23e1262a03a.jpg
hard: 入门
time: 10分钟
---
# 实体、生物和弹射物
本节中,我们将一起学习实体,了解实体的组成和分类,为以后自定义实体打下概念基础。
## 生物和实体
在一个存档中,除了方块之外,和玩家接触最密切的便是**生物****Mob**了。在世界中猪、牛、羊等有好生物僵尸、骷髅、末影人等敌对生物还有末影龙、凋灵等Boss都是生物的一员。然而生物并不是这个世界的非方块造物的全部。比如我们经常使用盔甲架摆放物品、做出造型有时还拿它加入红石电路制作一些高级的机械。而我们刚刚提到的盔甲架便不是生物。它属于一个更上层的概念那便是**实体****Entity**)。
![盔甲架](./images/2.2_armor_stand.png)
实体也称为**活动对象****Actor**),是一种拥有各种形状、各种行为的可交互的物体。与方块不同,实体拥有生命值,可以遭到攻击。当然,有时候有些实体也可以攻击他人,和玩家一样破坏一些方块。**玩家****Player**)本质上也是实体的一种。
![实体和方块](./images/2.2_entity_and_block.png)
一般来说,实体分为生物和**非生物实体****Non-mob Entity**但是这两种实体其实并没有非常严格的界定。一般人们认为拥有AI的的实体都被称为生物。在我们自定义实体时我们也可以给予该实体一些**AI意向****AI Goal**),使其富有生命活力。
![村民的AI意向](./images/2.2_villager_aigoals.png)
## 弹射物
**弹射物****Projectile**)是一种典型的非生物实体,他是一类可以被玩家抛出或发射器发射出去的实体,往往在空中运行一定的轨迹后击中某个方块或实体,然后触发一定的效果。箭、雪球、鸡蛋、末影珍珠、末影之眼等都是弹射物的一种。
![抛出的末影珍珠](./images/2.2_thrown_ender_pearl.png)
弹射物一般拥有和其他实体不同的运动计算方式,而且一般和其对应的物品共享同一个纹理贴图,是一种非常特殊的实体。

View File

@@ -0,0 +1,37 @@
---
front: https://nie.res.netease.com/r/pic/20211104/69055361-2e7a-452f-8b1a-f23e1262a03a.jpg
hard: 入门
time: 10分钟
---
# 方块、物品和物品实体
在本节中,我们将一起进一步学习方块,学习物品和物品实体的区别。
## 方块
**方块****Block**,又称作**Tile**)是世界的基本组成单位,是玩家和这个世界交互的重要途径。方块可以被玩家拿在物品栏里,也可以被放置在世界中。当方块被放置在世界中时,大部分方块将在世界中占据一个块状的位置,阻止玩家和其他生物从此处通过,这被称作方块的**碰撞箱****Collision Box**)。并非所有的方块都有碰撞箱,如草、告示牌和火把都没有碰撞箱,玩家可以直接从其中穿过。
有些方块具有发光的能力,会使周围的亮度大为提升,如火把和荧石。而有些方块则会阻挡光的前进,减少或消除光照的等级,如会完全阻挡光线的石头和会部分阻挡光线的冰。不同光照属性的方块使世界中的**亮度****Lighting**)系统丰富多彩。
![火把和荧石的发光](./images/2.3_torch_and_glowstone.png)
方块有着不同的**材料****Material**)和**形状****Shape**)。方块的材料决定了其固液性质、开采性质和在地图上的颜色表现,而方块的形状则决定了其碰撞箱的造型、视觉的形状和渲染效果。
水和岩浆等方块属于**液体****Liquid**),他们也是方块的一种。只不过,他们有着一种特殊的传播方式。水和岩浆的流动本质上属于在其周围特定的位置放置一个新的方块,只不过新方块的碰撞体积会表现得要么更小一些(向四周流动),要么是整个方块(向下流动)。
## 物品
**物品****Item**,又称作**Icon**)是出现在玩家或其他实体的手上或物品栏中的物体。物品往往具有一些和方块或实体的交互性。例如,拿着名为剪刀的物品对着绵羊按下使用键,就可以将绵羊身上的毛剪落。有一些物品的图标是一个方块,放置后也可以在世界上生成一个方块,这种物品便是**方块物品****Block Item**),方块被破坏后被玩家收集到物品栏中的便是方块物品。广义上讲,方块物品也是物品的一种,只不过他们都是和方块一一对应的,因此大部分人也不区分方块物品和方块的关系,将其混淆使用,统一称呼为方块。此时,剩下的非方块物品便被称呼为狭义的物品。
很多物品可被**堆叠****Stack**)。堆叠后的物品会在物品的右下角显示一个数字,代表其目前的堆叠数目。有些物品可以被使用,使用后往往会减少其堆叠数目。但是,有一类特殊的物品的使用并不会减少堆叠数目,相反,他们会损失一种被称作**耐久****Durability**)的属性,这种特殊的物品往往是一种**武器****Weapon**)、**工具****Tool**)或**盔甲****Armor**。当然一般来说这种特殊物品的最大堆叠数目是1不过他们却可以使用相当多的次数而不消失。
![使用了一半的盔甲](./images/2.3_half-used_armor.png)
## 物品实体
**物品实体****Item Entity**)其实便是我们常说的**掉落物****Drop Item**)。破坏方块、击杀生物都有可能会产生掉落物,即物品实体。顾名思义,物品实体本质上是一种实体,但是其被渲染成了一个或一组物品的样子,并且可以自动与玩家交互——被靠近的玩家拾获。所以物品实体其实并不是物品,只不过他们存储了物品的数据,拥有物品的外观,并且可以在被玩家拾获变成玩家物品栏内的物品。
![一个物品实体](./images/2.3_drop_item.png)
为了使大家对概念更加地明晰,我们可以考虑如下场景:世界中存在一个草方块,它是一个方块。我破坏了草方块,他掉落了一块泥土,这个泥土其实是一个物品实体。更精确地说,它是一个方块物品的物品实体。我拾起了泥土,它变成了我物品栏中真真正正的物品。不过,这个物品是一个方块物品。在我对着地面放置这个物品后,它再次变成了方块,变成了世界中某处的一个泥土方块。

View File

@@ -0,0 +1,53 @@
---
front: https://nie.res.netease.com/r/pic/20211104/69055361-2e7a-452f-8b1a-f23e1262a03a.jpg
hard: 入门
time: 15分钟
---
# 模型、纹理和动画
在本节中,我们将一起学习我的世界中的模型,了解模型的本质和分类。进一步了解纹理和动画对于模型的依赖性和重要性。
## 模型
在我的世界中,不论是方块、物品还是实体,他们本质上都是由一些具有体积的更基础的元素构成的,比如,绵羊是由头部的长方体、身体的长方体和四个代表着四肢的竖直长方体构成的。我们通常将这种具有一定体积的一个由多种基本元素构成的几何形状称为一个**模型****Model**)。
在我的世界中每种生物由具备一个模型。我们可以轻松地在游戏中通过观察看出每种生物模型的形状。每种方块也有一个应用在它身上的模型不过在游戏中很多方块可能会共用一个模型。比如全体的1×1×1的完整方块他们共用一个被称作`block`的模型,代表着标准正方体。
![不同的模型](./images/2.4_some_models.png)
开发者也可以在自己的模组中自定义生物和方块的模型。我的世界中国版支持两种模型格式,一种是微软开发支持的**原版模型**格式,使用该格式编写的模型作品被称为**几何****Geometry**),另一种是网易开发支持的**骨骼模型**格式,使用该格式得到的作品被称作**骨架****Skeleton**)。在我的世界开发工作台中,我们可以通过外部文件导入这两种模型。根据这两种模型的制作工具和格式的不同,又分别称作**BlockBench模型**`*.bbmodel`)和**FBX模型**(`*.fbx`)。
### 原版模型
**原版模型**本质上是一个按照国际版的[几何JSON模式Geometry JSON Schema](https://docs.microsoft.com/en-us/minecraft/creator/reference/content/schemasreference/schemas/minecraftschema_geometry_1.16.0)编写的JSON文件。开发者可以使用低多边形风格的编辑器Blockbench中可以通过可视化编辑的形式来创建原版模型几何然后通过我的世界开发工作台导入到模组中。在下一章中我们将重点介绍该编辑器的使用方法。
原版模型可以直接挂接在实体上,稍加修改后也可以挂接到方块上,为我们自定义模型提供了很大的便利。通过挂接在**附着物****Attachable*****挂件***上后还可以通过和物品配合实现3D物品模型的制作。但是原版模型也有相当大的缺点。最重要的一点就是原版模型只支持低多边形风格即我们俗称的方块像素风格。这导致我们最多实现至四边形网格而无法实现曲线和曲面。同时由于模型的局限性我们也无法在原版模型的基础上实现动态的纹理。因此通过网易开发组的努力我们实现了骨骼模型的支持。
### 骨骼模型
**骨骼模型**本质上也是一个JSON文件但是它是可以由FBX格式文件导入而生成的因此具备几乎所有原FBX模型的性质。因此骨骼模型支持各种高级的模型特性比如可以创造曲线和曲面。同时由于我的世界中国版的支持骨骼模型还可以加载模型贴图序列帧动画、绑定各种高级特效从而使模组玩法和外观更加丰富。
不管是原版模型还是骨骼模型,模型中的基本部件都被称作是一个**骨骼****Bone**)。每个骨骼有着自己特定的形状和位置,而骨骼与骨骼之间又相对独立,这有助于模型更好地完成预期的操作。
## 纹理
**纹理****Texture**,旧译**材质**是指覆盖在模型上的一层贴图文件也是我们在游戏中最能直观感受到的一个事物。不管是方块、物品还是实体他们都是以特定的纹理展示到玩家的镜头前的。比如在工作台方块上我们看到工作台顶部有一块桌布桌布上有一个3×3网格而侧面则摆放着锯子、齿轮等工具。这些外观贴图其实就是纹理而工作台本身就是在一个1×1×1的立方体模型的6个面上分别贴上了特定的纹理而得到的方块。实体亦然只不过由于实体的模型较为复杂我们看到的纹理贴图也稍微有些复杂。
![工作台的六个面](./images/2.4_workbench_texture.png)
![史蒂夫的纹理](./images/2.4_steve_texture.png)
## 动画
一个模型如果仅仅是一个模型,那么它便只能是静态的,好似一个假人。为了让模型更加逼真,实现各种运动或姿态的需要,**动画****Animation**)是必不可缺的一部分。一个动画就是一个和模型中的各个骨骼相绑定,然后通过**动画控制器****Animation Controller**)来使各个骨骼进行相对运动的过程。玩家的奔跑,生物的攻击,鱼儿的游泳,乃至潜影贝盖子旋转打开,这些都是动画。有了动画,我们的游戏内容才会更加生动形象。
潜影贝的动画行为,其中盖子旋转打开时,盖子所对应的骨骼进行了旋转变换和平移变换:
![潜影贝动画](./images/2.4_shulker_shooting.gif)
动画并不是实体独有的,只要游戏引擎支持,所有的模型都可以配以动画。比如,通过中国版的自定义方块实体功能,便可以为方块模型添加动画,以达到和实体模型动画相同的效果。
## 序列帧动画
在我的世界中一提到动画,人们往往想起的是“模型的动画”,也就是我们刚才介绍的动画。但是,还有一种“动画”存在于游戏中,它便是**序列帧动画****Frame Animation**)。序列帧动画是一种“纹理的动画”,又称**逐帧动画**,其原理是在“连续的关键帧”中分解动画动作,在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。所以,这种动画非常类似于我们小时候玩的翻页书,在微软的开发文档中又称作**翻书动画****Flipbook Animation**)。大家口中经常说的动态纹理或动态贴图,便是指的序列帧动画。

View File

@@ -0,0 +1,35 @@
---
front: https://nie.res.netease.com/r/pic/20211104/69055361-2e7a-452f-8b1a-f23e1262a03a.jpg
hard: 高级
time: 15分钟
---
# 游戏界面和特效粒子
在本节中,我们将一起认识游戏界面,了解什么是特效和粒子。
## 游戏界面
每当我们打开我的世界游戏时,我们都能看到一个界面展现在我们面前,上面有着按钮与文字。当我们通过按钮与界面交互时,我们可能会看到弹窗或新的界面。我们进入游戏的世界后,除了眼前的立体的方块世界之外,我们也能看到屏幕下方的物品栏,如果是手机游玩,还能看到屏幕上的方向按键、跳跃键和顶部的暂停键等按钮。这些所有的按钮、文字、窗口等元素都属于游戏界面的一部分,我们统称为**UI****用户界面****User Interface**,又译作**用户接口**)。顾名思义,用户界面就是用户与机器之间交互的接口。在计算机显示屏上,用户与机器交互的接口都是图形化的,因此**GUI****图形用户界面****Graphical User Interface**一词在游戏中与UI一词并无分别。
![游戏内界面](./images/2.5_in-game_UI.png)
我的世界的UI是一套工业化的JSON控制系统通过控件来添加屏幕元素同时通过绑定来事先逻辑功能。我的世界工作台提供了一套简便的可视化UI编辑器省去了繁杂的JSON数据编写的过程为我们提供了极大地方便我们将在下一章中介绍该功能。
## 粒子与特效
**粒子****Particle**是除了UI之外另一种非常重要的可视化效果同时也是一个玩家经常遇到但是又容易忽视的效果。但是细心的玩家依旧能够注意到在我的世界中处处都有着粒子的存在。粒子是一个颗粒状的始终面向玩家的平面面片贴图根据种类不同有着不同的存在时间和运动状态。破坏方块的时候出现的碎屑、玩家从高空掉在地上是激起的扬尘、火把和熔炉燃烧时产生的火焰、一脚踏进水里溅起的水花这些本质上都是粒子效果。基岩版内置的粒子效果在玩家客户端中并没有办法通过命令调出这种粒子称为**旧版粒子****Legacy Particle**),以上我们举的例子都是旧版粒子。为了让玩家和开发者在游戏中更好地使用粒子,国际版引入了一种“新版”的粒子功能,并直接在游戏中称之为**粒子**。
![粒子](./images/2.5_particles.png)
### 粒子
国际版的粒子可以通过一个JSON文件来定义。按照国际版的[粒子JSON的文件格式](https://docs.microsoft.com/en-us/minecraft/creator/reference/content/particlesreference/)便可以定义出一个粒子。这种粒子本质上是一个**粒子发射器****Particle Emitter**),是一种可以在世界中移动的能够根据预先设置好的规则源源不断地发射出单个粒子的虚拟物体。最终展现给玩家的效果只有其发射出的粒子,玩家本身是看不到粒子发射器的。因此,粒子发射器可以实现比单纯召唤出一个粒子更多的功能,这也给了开发者们进行创作时更多的可能。
### 特效
中国版的**特效****Effect**)是中国版开发组在旧版粒子系统的基础上独立于国际版的粒子而创做出的新的粒子系统。通过与骨骼模型的配合,开发者甚至可以快速地将其挂接到骨骼模型上,实现模型和粒子效果的紧密结合。
中国版的特效分为**粒子特效Particle Effect**和**序列帧特效Frame Effect**。粒子特效本质上也是一个粒子发射器,通过不断发射多个不同大小规模的单个粒子,来达到一种特定的效果。序列帧特效也是在游戏中展现一个平面面片贴图,但是其允许纹理贴图具备动态效果,也就是在贴图上播放序列帧动画,使其成为“动态的粒子效果”。因此,序列帧特效往往更加具备开发价值,也能使模组的模型或内容展现得更加丰富。
到此为止,我们在本章中对于我的世界概念的学习就先告一段落。如果有些内容并没有看懂,也并不用担心。因为,我们后面还会讲到这些内容的制作。届时,我们将能够通过各种操作和代码进一步加深这些概念的理解!