first commit

This commit is contained in:
boybook
2025-03-17 13:24:39 +08:00
commit 9a0334ee84
6410 changed files with 221907 additions and 0 deletions

View File

@@ -0,0 +1,197 @@
---
front:
hard: 入门
time: 分钟
---
# <span id="我的世界基础概念"></span>我的世界基础概念
<span id='世界'></span>
## 世界
表示游戏的单位,单个游戏存档、单个网络服务器等都是一个世界。
<span id='区块'></span>
## 区块
区块是世界里一个大小为16×256×16的部分是游戏地图加载卸载的基本单位。
当玩家第一次出现在世界时会在其周围生成区块,随着玩家对世界的探索,相邻的区块也会被生成。
区块的X坐标Floor(X坐标 / 16)区块的Z坐标Floor(Z坐标 / 16)Floor意为向下取整。
一个区块(X, Z)中坐标最小点的坐标为(X * 16, 0, Z * 16),坐标最大点的坐标为(X * 16 + 15, 255, Z * 16 + 15)。
<span id='实体'></span>
## 实体
具有可区别性的物体,不一定是物理存在的实体。
包括服务端运算的,会保存到存档的生物实体、物品实体、方块实体、抛射物实体等
以及纯客户端表现,退出游戏后就销毁的特效实体(粒子实体、序列帧实体)、文字面板实体等。
<span id='生物'></span>
## 生物
指游戏世界中有生命的,可移动的一类实体。其中玩家也属于生物的一种。
<span id='玩家'></span>
## 玩家
玩家所控制的实体对象,同时也属于生物的一种。包括本地玩家和其他玩家,在游戏中,由玩家自己控制的称为本地玩家,否则为其他玩家。
<span id='物品'></span>
## 物品
物品栏中具有使用属性的物品、地面上的掉落物等都称为物品。其中掉落物也是实体的一种。
<span id='物品信息字典'></span>
## 物品信息字典
也叫itemDict。是python事件与接口中获取物品信息以及生成物品时使用的dict类型的变量。
该字典的内容如下
| 关键字 | 数据类型 | 说明 |
| -------------- | ----------------------------- | ------------------------------------------------------------ |
| newItemName | str | 必须设置物品的identifier即"命名空间:物品名" |
| newAuxValue | int | 必须设置,物品附加值 |
| itemName | str | 废弃1.22及以前版本的旧identifier详见<a href="../13-模组SDK编程/2-Python脚本开发/99-1.23版本物品id变更.html">1.23版本物品id变更</a> |
| auxValue | int | 废弃1.22及以前版本的旧物品附加值,详见<a href="../13-模组SDK编程/2-Python脚本开发/99-1.23版本物品id变更.html">1.23版本物品id变更</a> |
| count | int | 必须设置物品数量。设置为0时为空物品 |
| showInHand | bool | 可选是否显示在手上默认为True |
| enchantData | list(tuple(EnchantType, int)) | 可选附魔数据tuple中<a href="../../../mcdocs/1-ModAPI/枚举值/EnchantType.html" rel="noopenner"> EnchantType </a>为附魔类型int为附魔等级 |
| modEnchantData | list(tuple(str, int)) | 可选自定义附魔数据tuple中str为自定义附魔idint为自定义附魔等级 |
| customTips | str | 可选物品的自定义tips |
| extraId | str | 可选,物品自定义标识符。可以用于保存数据, 区分物品 |
| userData | dict | 可选物品userData用于灾厄旗帜、旗帜等物品请勿随意设置该值 |
| durability | int | 可选,物品耐久度,不存在耐久概念的物品默认值为零 |
customTips 设置支持自定义格式:包含四种自带格式:
| 格式字符串 | 说明 |
| --------------- | -------- |
| %name% | 物品名 |
| %category% | 物品类型 |
| %enchanting% | 附魔属性 |
| %attack_damage% | 攻击伤害 |
自带格式可以与自定义文本自由组合,顺序可以打乱,物品的自定义格式的文本不存在时不予显示。
自带格式的字符串采用原版的显示格式,物品名前面不带换行符,物品类型、附魔属性前面自带一个换行符,攻击伤害前面自带两个换行符。
举个例子:`head%name%after%category%%enchanting%\nnewline%attack_damage%\n\nend`,效果如下:
![customTips自定义格式示例](./picture/customtips_example.png)
<span id='方块'></span>
## 方块
游戏中场景的基本组成单位长宽高均为1单位长度的立方体网格不同的方块具有不同的材质。
<span id='方块信息字典'></span>
## 方块信息字典
也叫blockDict。是python事件与接口中获取方块信息以及生成方块时使用的dict类型的变量。
该字典的内容如下
| 关键字 | 数据类型 | 说明 |
| ------ | -------- | ------------------------------------------------------------ |
| name | str | 必须设置方块identifier包含命名空间及名称如minecraft:air |
| aux | int | 方块附加值可缺省默认为0 |
* 原版方块的identifier可以查看[官方wiki](https://minecraft-zh.gamepedia.com/基岩版数据值)
<span id='方块状态'></span>
## 方块状态
一种方块可能存在多种方块状态例如不同颜色的羊毛。一个auxvalue实际上也是对应一种方块状态只是相比于用int来表示的auxvalue方块状态更为可读。
例如橙色羊毛的identifier为minecraft:woolauxvalue为1而用方块状态则表示为
```json
{
"name": "minecraft:wool",
"states": {
"color": "orange"
}
}
```
可以在游戏内使用GetBlockStates将方块状态打印出来。
也可以在[Block_states页面](https://minecraft.gamepedia.com/Block_states)中查阅,一些没有的可以在方块的页面找到,例如[羊毛](https://minecraft.gamepedia.com/Wool#Block_states)与[泥土](https://minecraft.gamepedia.com/Dirt#Block_states)。注意要使用基岩版及Bedrock Edition里的内容。不排除wiki上有遗漏或错误
<span id='方块基本信息字典'></span>
## 方块基本信息字典
也叫blockBasicDict。是python事件与接口中获取方块基本信息时使用的dict类型的变量。
该字典的内容如下
| 关键字 | 数据类型 | 说明 |
| ------ | -------- | ------------------------------------------------------------ |
| blockLightAbsorption | int | 方块透光率, 具体见[官方wiki](https://minecraft.fandom.com/zh/wiki/%E4%BA%AE%E5%BA%A6)
| blockLightEmission | int | 方块亮度, 具体见[官方wiki](https://minecraft.fandom.com/zh/wiki/%E4%BA%AE%E5%BA%A6)|
| breathability | int | 方块的<a href="../../../mcdocs/1-ModAPI/枚举值/BlockBreathability.html" rel="noopenner"> 可呼吸性 </a>(只有定义了"minecraft:breathability"组件的方块有数据,其余默认为solid的枚举值)(需要开启假日创造者功能)|
| explosionResistance | float | 方块爆炸抗性|
| loot | str | loot table控制掉落物(只有定义了"minecraft:loot"组件的方块有数据,其余默认为空字符串"")|
| mapColor | str | 用十六进制颜色定义该方块在地图上显示的颜色(只有定义了"minecraft:map_color"组件的方块以及部分原版方块有数据,其余默认为"#0")|
| unwalkable | bool | 生物是否可在上方行走,默认为false(只有定义了"<a href="../../../mconline/20-玩法地图教程/第07章使用实验玩法增加自定义内容/课程01.接触新自定义方块.html#minecraft-unwalkable">minecraft:unwalkable</a>"组件的方块有数据,其余默认为false)|
| tier | dict/None | 与挖掘相关的属性,具体见<a href="../../20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">挖掘属性</a>(只有定义了"netease:tier"组件的方块有数据,其余默认为None)|
| renderLayer | int | 方块渲染时使用的<a href="../../../mcdocs/1-ModAPI/枚举值/RenderLayer.html" rel="noopenner"> 材质 </a>|
| solid | bool | 方块是否为实心方块,影响生物在方块内是否受到窒息伤害|
| pathable | bool | 游戏内AI在进行寻路时方块是否被当作障碍物(只有定义了"netease:pathable"组件的方块有数据,其余默认为false)|
| fireResistant | bool | 方块是否防火(只有定义了"netease:fire_resistant"组件的方块有数据,其余默认为false)|
| creativeCategory | int | 方块所在<a href="../../../mcdocs/1-ModAPI/枚举值/ItemCategory.html" rel="noopenner"> 创造栏目录 </a>|
| destroyTime | float | 方块摧毁时间|
<span id='抛射物'></span>
## 抛射物
受外力被抛射空中飞行的实体,受重力与摩擦力影响,例如游戏中射出的箭。
<span id='生物群系'></span>
## 生物群系
游戏中生成的世界被划分为一个个不同的自然环境,例如森林、丛林、沙漠和针叶林等,这些都是不同的生物群系。
<span id='模型'></span>
## 骨骼模型
与基岩版原版的基于cube搭建的模型不同是使用3dmax等建模软件搭建的模型。游戏中的大部分生物都可以被替换为骨骼模型进而实现不同的表现效果。
<span id='序列帧'></span>
## 序列帧
通过一帧帧的图片不断进行切换形成的动画效果,在游戏中为一个平面面片。
<span id='粒子'></span>
## 粒子
通过不断发射多个不同大小规模的平面面片形成的特效效果,通过替换贴图材质等可以模拟丰富的表现。
<span id='文字面板'></span>
## 文字面板
本质上为序列帧的文字面板,功能上与文本类似,在游戏中包括伤害飘字,实体头顶名称等内容。
<span id='UI'></span>
## UI
UI界面游戏和用户之间进行交互和信息交换的界面。玩家可以通过触发UI来控制对应的游戏逻辑。

View File

@@ -0,0 +1,554 @@
---
front:
hard: 入门
time: 分钟
---
# Vector3
- 描述
用于表示 3D 向量和点。
可以使用该结构保存与计算 3D 位置和方向。 此外,它还包含用于执行常见向量操作的函数。
MC中使用的是右手坐标系如下图所示。后文中的上下前后左右均是以steve面向z轴正方向得出来的。MC中东西方向为X坐标轴其中X轴正方向为东X轴负方向为西南北方向为Z坐标轴其中Z轴正方向为南Z轴负方向为北。即左西右东前南后北。
![LeftHandRuleDiagram](./picture/RightHand.jpg)
## 构造函数
### Vector3(x, y, z)
- 描述
用于构造一个向量或者3维点坐标。
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :------- | :---------- |
| x | float | 向量的x分量 |
| y | float | 向量的y分量 |
| z | float | 向量的z分量 |
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------- |
| Vector3 | 返回Vector3(x, y, z) |
- 示例
```python
from common.utils.mcmath import Vector3
newOne = Vector3(1, 2, 3)
```
### Vector3(vecTuple)
- 描述
用于构造一个向量或者3维点坐标。
- 参数
| 参数名 | 数据类型 | 说明 |
| -------- | :------------------------- | :----------------- |
| vecTuple | tuple(float, float, float) | 长度为3的tuple数组 |
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------------------------------------- |
| Vector3 | 返回Vector3(vecTuple[0], vecTuple[1], vecTuple[2]) |
- 示例
```python
from common.utils.mcmath import Vector3
import client.extraClientApi as clientApi
comp = clientApi.CreateComponent(entityId, "Minecraft", "pos")
entityFootPos = comp.GetFootPos() # 通过位置组件获取实体位置
posVec = Vector3(entityFootPos) # 直接将该位置tuple转换成Vector3以便后续计算
```
## 静态方法
可以直接通过Vector3.MethodName()调用的静态方法,无需创建实例。
### One
- 描述
用于编写 Vector3(1, 1, 1) 的简便方法。
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------- |
| Vector3 | 返回Vector3(1, 1, 1) |
- 示例
```python
from common.utils.mcmath import Vector3
newOne = Vector3.One()
```
### Up
- 描述
用于编写 Vector3(0, 1, 0) 的简便方法。
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------- |
| Vector3 | 返回Vector3(0, 1, 0) |
- 示例
```python
from common.utils.mcmath import Vector3
newOne = Vector3.Up()
```
### Down
- 描述
用于编写 Vector3(0, -1, 0) 的简便方法。
- 返回值
| 数据类型 | 说明 |
| :------- | :-------------------- |
| Vector3 | 返回Vector3(0, -1, 0) |
- 示例
```python
from common.utils.mcmath import Vector3
newOne = Vector3.Down()
```
### Left
- 描述
用于编写 Vector3(-1, 0, 0) 的简便方法对应MC中的西面。
- 返回值
| 数据类型 | 说明 |
| :------- | :-------------------- |
| Vector3 | 返回Vector3(-1, 0, 0) |
- 示例
```python
from common.utils.mcmath import Vector3
newOne = Vector3.Left()
```
### Right
- 描述
用于编写 Vector3(1, 0, 0) 的简便方法对应MC中的东面。
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------- |
| Vector3 | 返回Vector3(1, 0, 0) |
- 示例
```python
from common.utils.mcmath import Vector3
newOne = Vector3.Right()
```
### Forward
- 描述
用于编写 Vector3(0, 0, 1) 的简便方法对应MC中的南面。
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------- |
| Vector3 | 返回Vector3(0, 0, 1) |
- 示例
```python
from common.utils.mcmath import Vector3
newOne = Vector3.Forward()
```
### Backward
- 描述
用于编写 Vector3(0, 0, -1) 的简便方法对应MC中的北面。
- 返回值
| 数据类型 | 说明 |
| :------- | :-------------------- |
| Vector3 | 返回Vector3(0, 0, -1) |
- 示例
```python
from common.utils.mcmath import Vector3
newOne = Vector3.Backward()
```
### Dot
- 描述
两个向量的点积。
点积是一个浮点值,它等于 将两个向量的大小相乘,然后乘以向量之间角度的余弦值。
对于 normalized 向量如果它们指向完全相同的方向Dot 返回 1 如果它们指向完全相反的方向,返回 -1如果向量彼此垂直则 Dot 返回 0。
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :------- | :---- |
| a | Vector3 | 向量a |
| b | Vector3 | 向量b |
- 返回值
| 数据类型 | 说明 |
| :------- | :------------- |
| float | 两个向量的点积 |
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(1, 2, 3)
b = Vector3(0, 3, 1)
c = Vector3.Dot(a, b) # 1 * 0 + 2 * 3 + 3 * 1 = 9
```
### Cross
- 描述
两个向量的叉积。
两个向量的叉积生成第三个向量, 该向量垂直于两个输入向量。结果的大小等于: 将两个输入的大小相乘,然后乘以输入之间角度的正弦值。 可以使用“右手定则”确定结果向量的方向。用右手的四指先表示向量a的方向然后手指朝着手心的方向摆动到向量b的方向大拇指所指的方向就是向量c的方向。
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :------- | :---- |
| a | Vector3 | 向量a |
| b | Vector3 | 向量b |
- 返回值
| 数据类型 | 说明 |
| :------- | :------------- |
| float | 两个向量的点积 |
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(1, 2, 3)
b = Vector3(0, 3, 1)
c = Vector3.Cross(a, b)
```
## 成员方法
### Length
- 描述
返回该向量的长度。
向量长度为 `(x*x+y*y+z*z)` 的平方根。
如果只需要比较一些向量的大小, 则可以使用LengthSquared()函数比较它们的平方数(计算平方数更快)。
- 返回值
| 数据类型 | 说明 |
| :------- | :--------------- |
| float | 该向量长度的平方 |
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
print a.Length() # 打印 5.0
```
### LengthSquared
- 描述
返回该向量的长度的平方。
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------- |
| float | 该向量标准化后的向量 |
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
print a.LengthSquared() # 打印 25.0
```
### ToTuple
- 描述
返回该向量的tuple形式(x, y, z),便于玩家转换后作为其他事件的参数进行传递。
- 返回值
| 数据类型 | 说明 |
| :------- | :----------------------------- |
| tuple | 返回该向量的tuple形式(x, y, z) |
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
print a.ToTuple() # 打印 (3, 4, 0)
```
### Normalized
- 描述
返回长度为 1 时的该向量。
进行标准化时,向量方向保持不变,但其长度为 1.0。
请注意,当前向量保持不变,返回一个新的归一化向量。如果 要归一化当前向量请使用Normalize函数。
如果向量太小而无法标准化,则返回零向量。
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------- |
| Vector3 | 该向量标准化后的向量 |
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
print a.Normalized() # 打印结果(0.6, 0.8, 0)
print a # 打印结果(3, 4, 0)a并没有发生变化
```
### Normalize
- 描述
使该向量标准化,向量方向保持不变,但其长度变为 1.0。
请注意该函数无返回值仅改变当前向量如果要返回当前向量的标准化值且不改变该向量请使用Normalized函数。
如果向量太小而无法标准化,则设置为零向量。
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
a.Normalize()
print a # 打印结果(0.6, 0.8, 0)a被标准化
```
### Set
- 描述
设置该向量的值
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :------- | :---------- |
| x | float | 向量的x分量 |
| y | float | 向量的y分量 |
| z | float | 向量的z分量 |
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
a.Set(1, 2, 3)
print a # 打印结果(1, 2, 3)
```
## 成员变量
- 描述
可以直接通过`.`运算符访问向量的x、y、z分量。也可以通过`[]`直接获取0、1、2分别对应x、y、z。但不能直接通过该方法对各个分量进行设置只能通过Set方法来进行设置。
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 5)
print a.x # 3
print a.y # 4
print a.z # 5
print a[0] # 3
print a[1] # 4
print a[2] # 5
```
## 运算符
### operate +
- 描述
向量加法,两向量相加等于各分量之和。向量与常数相加等于各分量分别加上该常数。
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
b = Vector3.One()
print a + 5 # 打印结果(8, 9, 5)
print a + b # 打印结果(4, 5, 1)
```
### operate -
- 描述
向量减法,两向量相加等于各分量之差。向量与常数相减等于各分量分别与该常数求差。
向量求反,返回相反方向的向量
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
b = Vector3.One()
print a - 2 # 打印结果(1, 2, -2)
print 2 - a # 打印结果(-1, -2, 2)
print a - b # 打印结果(2, 3, -1)
print -a # 打印结果(-3, -4, 0)
```
### operate \*
- 描述
向量乘法两向量相乘等于各分量相乘相加即向量点积等价于Vector3.Dot(a, b)。向量与常数相乘等于各分量分别乘以该常数。
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
b = Vector3.Up()
print a * 2 # 打印结果(6, 8, 0)
print a * b # 打印结果4
```
### operate /
- 描述
向量除法,仅支持向量与常数相除,等于各分量分别除以该常数。
- 示例
```python
from common.utils.mcmath import Vector3
a = Vector3(3, 4, 0)
b = Vector3.One()
print a / 2 # 打印结果(1.5, 2, 0)
```
### operate ==
- 描述
判断两个向量是否相等当各分量均相等时返回True
### operate !=
- 描述
判断两个向量是否不等当各分量均相等时返回False

View File

@@ -0,0 +1,413 @@
---
front:
hard: 入门
time: 分钟
---
# Quaternion
- 描述
四元数用于表示旋转。
它们结构紧凑,不受万向锁影响。
它们基于复数,不容易理解。 您几乎不会有机会访问或修改单个四元数分量x、y、z、w
您可以使用乘法对旋转进行旋转,或对向量进行旋转。
## 构造函数
### Quaternion(x, y, z, w)
- 描述
用于构造一个旋转。
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :------- | :------------------------------------ |
| x | float | 四元数的x分量 |
| y | float | 四元数的y分量 |
| z | float | 四元数的z分量 |
| w | float | 四元数的 w 分量。请勿直接修改四元数。 |
- 返回值
| 数据类型 | 说明 |
| :--------- | :------------------------- |
| Quaternion | 返回Quaternion(x, y, z, w) |
- 示例
```python
from common.utils.mcmath import Quaternion
q = Quaternion(1, 2, 3, 4)
```
### Quaternion(vecTuple)
- 描述
用于构造一个旋转。
- 参数
| 参数名 | 数据类型 | 说明 |
| -------- | :-------------------------------- | :----------------- |
| vecTuple | tuple(float, float, float, float) | 长度为4的tuple数组 |
- 返回值
| 数据类型 | 说明 |
| :--------- | :----------------------------------------------------------- |
| Quaternion | 返回Quaternion(vecTuple[0], vecTuple[1], vecTuple[2], vecTuple[3]) |
- 示例
```python
from common.utils.mcmath import Quaternion
a = (0, 0, 0, 1)
q = Quaternion(a)
```
## 静态方法
可以直接通过Quaternion.MethodName()调用的静态方法,无需创建实例。
### AngleAxis
- 描述
创建一个围绕 `axis` 旋转 `angle` 度的旋转
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :------- | :------- |
| angle | float | 旋转角度 |
| axis | Vector3 | 旋转轴 |
- 返回值
| 数据类型 | 说明 |
| :--------- | :-------------------------------- |
| Quaternion | 围绕 `axis` 旋转 `angle` 度的旋转 |
- 示例
```python
from common.utils.mcmath import Quaternion
newQuaternion = Quaternion.AngleAxis(45, Vector3.Up()) # 创建一个围绕y轴旋转45°的旋转
```
### Euler
- 描述
创建一个先围绕 Z 轴旋转 z 度、再围绕 X 轴旋转 x 度、最后围绕 Y 轴旋转 y 度的旋转注意顺序。注意如果该欧拉旋转出现万向节锁会导致四元数返回的EulerAngle异常
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :------- | :---------------- |
| x | float | 围绕x轴旋转的角度 |
| y | float | 围绕y轴旋转的角度 |
| z | float | 围绕z轴旋转的角度 |
- 返回值
| 数据类型 | 说明 |
| :--------- | :----------------------------------------------------------- |
| Quaternion | 先围绕 Z 轴旋转 z 度、再围绕 X 轴旋转 x 度、最后围绕 Y 轴旋转 y 度的旋转 |
- 示例
```python
from common.utils.mcmath import Quaternion
newQuaternion = Quaternion.Euler(30, 15, 45) # 创建一个先围绕z轴旋转45°、再围绕x轴旋转30°、最后围绕y轴旋转45°的旋转
```
### Dot
- 描述
两个旋转的点积。
点积是一个浮点值,它等于两个旋转对应分量之积求和。
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :--------- | :---- |
| a | Quaternion | 旋转a |
| b | Quaternion | 旋转b |
- 返回值
| 数据类型 | 说明 |
| :------- | :------------- |
| float | 两个向量的点积 |
- 示例
```python
from common.utils.mcmath import Quaternion
a = Quaternion(1, 2, 3, 1)
b = Quaternion(0, 3, 1, 1)
c = Quaternion.Dot(a, b) # 1 * 0 + 2 * 3 + 3 * 1 + 1 * 1 = 10
```
### Cross
- 描述
两个旋转格拉瑟曼积Cross(a, b)表示旋转a后再旋转p的合成旋转。也可以直接通过a * b得到。
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :--------- | :---- |
| a | Quaternion | 旋转a |
| b | Quaternion | 旋转b |
- 返回值
| 数据类型 | 说明 |
| :--------- | :------------------- |
| Quaternion | 两个向量的格拉斯曼积 |
- 示例
```python
from common.utils.mcmath import Quaternion
a = Quaternion(1, 2, 3, 1)
b = Quaternion(0, 3, 1, 1)
c = Quaternion.Cross(a, b)
```
### Conjugate
- 描述
返回该旋转的共轭旋转其w分量不变其他分量分别取反
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :--------- | :---- |
| q | Quaternion | 旋转q |
- 返回值
| 数据类型 | 说明 |
| :--------- | :----------- |
| Quaternion | 返回共轭旋转 |
- 示例
```python
from common.utils.mcmath import Quaternion
a = Quaternion(1, 2, 3, 1)
b = Quaternion.Conjugate(a) # (-1, -2, -3, 1)
```
### Inverse
- 描述
返回该旋转的逆旋转如果旋转q的模长为1那么q*q<sup>-1</sup>将会得到零旋转(0, 0, 0, 1)
- 参数
| 参数名 | 数据类型 | 说明 |
| ------ | :--------- | :---- |
| q | Quaternion | 旋转q |
- 返回值
| 数据类型 | 说明 |
| :--------- | :---------------- |
| Quaternion | 返回旋转q的逆旋转 |
- 示例
```python
from common.utils.mcmath import Quaternion
a = Quaternion(1, 2, 3, 1)
a.Normalize() # 将a标准化
b = Quaternion.Inverse(a) # b为a的逆旋转
print a * b # 打印结果约为 (0, 0, 0, 1) 可能因为精度问题出现极小的非零数
```
## 成员方法
### Length
- 描述
返回该向量的长度。
向量长度为 `(x*x+y*y+z*z)` 的平方根。
如果只需要比较一些向量的大小, 则可以使用LengthSquared()函数比较它们的平方数(计算平方数更快)。
- 返回值
| 数据类型 | 说明 |
| :------- | :--------------- |
| float | 该向量长度的平方 |
- 示例
```python
from common.utils.mcmath import Quaternion
q = Quaternion(3, 4, 0, 0)
print q.Length() # 打印 5
```
### LengthSquared
- 描述
返回该向量的长度的平方。
- 返回值
| 数据类型 | 说明 |
| :------- | :------------------- |
| float | 该向量标准化后的向量 |
- 示例
```python
from common.utils.mcmath import Quaternion
q = Quaternion(3, 4, 0, 0)
print q.LengthSquared() # 打印 25
```
### ToTuple
- 描述
返回该向量的tuple形式(x, y, z, w),便于玩家转换后作为其他事件的参数进行传递。
- 返回值
| 数据类型 | 说明 |
| :------- | :-------------------------------- |
| tuple | 返回该向量的tuple形式(x, y, z, w) |
- 示例
```python
from common.utils.mcmath import Quaternion
q = Quaternion(0, 0, 0, 1)
print q.ToTuple() # 打印 (0, 0, 0, 1)
```
### Normalized
- 描述
返回该四元数,并且量值为 1。
进行归一化时,四元数方向保持不变,但其量值为 1.0。
请注意,当前四元数保持不变,返回一个新的归一化四元数。如果 要归一化原始四元数请改用Normalize方法。
如果四元数太小而无法归一化,则会返回(0, 0, 0, 1),表示零旋转。
- 返回值
| 数据类型 | 说明 |
| :--------- | :--------------------- |
| Quaternion | 该向量标准化后的四元数 |
- 示例
```python
from common.utils.mcmath import Quaternion
q = Quaternion(3, 4, 0, 0)
print q.Normalized() # 打印结果(0.6, 0.8, 0, 0)
print q # 打印结果(3, 4, 0, 0)q并没有发生变化
```
### Normalize
- 描述
使该向量标准化,向量方向保持不变,但其长度变为 1.0。
请注意该函数无返回值仅改变当前向量如果要返回当前向量的标准化值且不改变该向量请使用Normalized函数。
如果向量太小而无法标准化,则设置为零向量。
- 示例
```python
from common.utils.mcmath import Quaternion
q = Quaternion(3, 4, 0, 0)
q.Normalize()
print q # 打印结果(0.6, 0.8, 0, 0)q被标准化
```
### EulerAngles
- 描述
返回围绕 z 轴旋转 euler.z 度、围绕 x 轴旋转 euler.x 度、围绕 y 轴旋转 euler.y 度按此顺序的旋转。可以从四元数中读取欧拉角。注意如果该欧拉旋转出现万向节锁会导致四元数返回的EulerAngle异常
- 示例
```python
from common.utils.mcmath import Quaternion
q = Quaternion.Euler(30, 15, 45) # 创建一个先围绕z轴旋转45°、再围绕x轴旋转30°、最后围绕y轴旋转45°的旋转
print q.EulerAngles() # 打印结果(30, 15, 45)
```
## 运算符
### operate *
- 描述
旋转乘法两个旋转相乘表示先旋转运算符左侧的旋转再旋转运算符右侧的旋转。等价于Quaternion.Cross(a, b)。不满足乘法交换律,即`a*b != b*a`
### operate ==
- 描述
判断两个旋转是否相等只有当各分量均相等时返回True

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -0,0 +1,92 @@
---
front: https://nie.res.netease.com/r/pic/20210727/1e450bb1-ee50-4e6c-b614-7fbd6a00b4e7.png
hard: 入门
time: 5分钟
---
# 实体预设
## 基础介绍
EntityPreset实体预设是一类绑定MC的某类实体的特殊预设通过它可以很方便的使用零件进行一些实体相关逻辑的编程。
实体预设除了预设所具有的基本属性外,额外提供一个"关联实体ID"的属性可将实体预设和某个identifier的实体绑定起来如"猪""minecraft:pig"。此时下方会自动显示所关联的实体的json文件内容但当关联的文件不在个人存档内时编辑是无效的如MC原生的资源
![image-20210709172014742](./images/image-20210709172014742.png)
注意在修改所关联实体的json文件内容后若实际表现与显示属性不符需要点击刷新所有属性按钮进行更新。或尝试重启编辑器。
![image-20210709172800619](./images/image-20210709172800619.png)
此时可从资源管理器或预设库中拖到场景内进行实例化,就可以在地图上看到具体的实体了。
![image-20210709172941828](./images/image-20210709172941828.png)
特别注意实体预设绑定实体ID后所生成的所有该ID的实体均会同时绑定一个实体预设具备预设所具有的所有属性。
当你使用新建文件向导创建实体预设的时候,会附带创建一个实体配置,你也可以先创建一个配置,再通过配置来创建与之绑定的实体预设。更多关于配置的信息请详见[配置](../../15-自定义游戏内容/0-配置.md)。
## 设置属性
> 此部分内容在我的世界中国版2.1版本上线后才能在正式游戏环境生效。
上面介绍了实体预设的通用和实体(关联实体ID的json文件内容)两个属性栏,除此之外我们还提供了数十个无法在json文件直接进行定义和修改的实体属性如实体的重力因子和状态效果等根据功能存放在多个属性栏中如图所示
![entitysettingattr](./images/entitysettingattr.png)
> 设置实体属性的本质是`将之前在代码里调用API才能设置的属性挪到属性面板进行可视化编辑并在实体初始化时根据属性面板的设置数据调用对应的接口并生效。`比如物理这一栏的重力因子属性实际是调用实体对象EntityObject下的SetGravity接口。
实体目前具有以下几种设置属性:
在我的世界中,实体是一个范围非常广的定义,不管是掉落物,生物还是抛射物都可以称之为实体,但下面列出的某些属性,实际上只对部分类型的实体有效,例如,生命值实际上只针对生物有效,对火球、弓箭等实体设置生命值没有意义,也不会生效,请开发者在使用下列属性时,注意甄别自己所选择的实体是否支持设置该属性。
### 实体属性:同时设置实体的几种基础属性的当前值和最大值。
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 生命值 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#sethealth" rel="noopenner">SetHealth</a>和<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setmaxhealth" rel="noopenner">SetMaxHealth</a>接口,设置实体的最大和当前生命值。 |
| 速度 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setspeed" rel="noopenner">SetSpeed</a>和<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setmaxspeed" rel="noopenner">SetMaxSpeed</a>接口,设置实体的最大和当前速度。 |
| 攻击力 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setdamage" rel="noopenner">SetDamage</a>和<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setmaxdamage" rel="noopenner">SetMaxDamage</a>接口,设置实体的最大和当前攻击力。 |
| 岩浆里的移速 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setlavaspeed" rel="noopenner">SetLavaSpeed</a>和<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setmaxlavaspeed" rel="noopenner">SetMaxLavaSpeed</a>接口,设置实体在岩浆里的最大和当前移速。 |
> 注意此处的设置属性会先设置最大值再设置当前值如给自定义牛设置生命值为10则其最大生命值为10当前生命值也为10。
### 物理:设置实体物理相关属性值,如重力因子、是否可推动等
| 属性 | 描述 |
| ---------- | ------------------------------------------------------------ |
| 重力因子 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setgravity" rel="noopenner"> SetGravity</a>接口,设置实体的初始重力因子,该值为负数。 |
| 是否可推动 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setpushable" rel="noopenner">SetPushable</a>接口设置实体是否可被推动默认为True。 |
### 氧气:设置实体氧气相关的属性值,如氧气储备值和恢复氧气时间等
| 属性 | 描述 |
| ---------------- | ------------------------------------------------------------ |
| 氧气储备值 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setcurrentairsupply" rel="noopenner">SetCurrentAirSupply</a>和<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setmaxairsupply" rel="noopenner">SetMaxAirSupply</a>接口,同时设置实体的氧气储备值的当前值和最大值。 |
| 恢复最大氧气时间 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setrecovertotalairsupplytime" rel="noopenner">SetRecoverTotalAirSupplyTime</a>接口,设置实体恢复最大氧气量的时间,单位秒。 |
### 状态与物品:设置实体的初始状态效果和物品
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 添加状态效果 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#addeffect" rel="noopenner">AddEffect</a>接口,为实体添加指定的初始的状态效果。 |
| 生物物品 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setitem" rel="noopenner">SetItem</a>接口,为实体设置初始的物品。 |
### 行为属性设置实体的行为逻辑属性值如是否屏蔽原始AI是否免疫伤害等
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 是否免疫伤害 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setimmunedamage" rel="noopenner">SetImmuneDamage</a>接口,设置实体是否免疫伤害,该属性存档。 |
| 保留原生AI | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setblockcontrolai" rel="noopenner">SetBlockControlAi</a>接口设置是否保留实体原生AI屏蔽后实体无法移动不受重力影响不会被推动。 |
| 是否持久化 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setpersistence" rel="noopenner">SetPersistence</a>接口设置实体是否会在卸载区块和退出游戏时存档默认为True。 |
### 渲染设置:设置实体的渲染与显示属性,如是否渲染实体等
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 关闭实体渲染 | 等同于实体对象EntityObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/实体对象EntityObject.html#setnotrender" rel="noopenner">SetNotRender</a>接口设置是否关闭实体渲染默认为False。 |

View File

@@ -0,0 +1,91 @@
---
front: https://nie.res.netease.com/r/pic/20210727/1e450bb1-ee50-4e6c-b614-7fbd6a00b4e7.png
hard: 入门
time: 5分钟
---
# 玩家预设
## 基础介绍
PlayerPreset玩家预设是一类特殊的实体预设玩家预设与玩家实体进行绑定。
每个AddOn编辑器作品只允许创建一个玩家预设。
在预设编辑器,通过菜单栏=>创建预设=>玩家预设我们可以创建一个玩家预设。
![image-20210705160027132](./images/image-20210705160027132.png)
如果玩家预设选项已经灰化,说明你的组件内已经存在一个玩家预设。
通过玩家预设,我们可以给玩家赋予一些炫酷的功能。
> 在编辑器保存时,玩家预设的实例不会保存在预设存档中,如果需要修改,请在预设编辑器中直接修改玩家预设
## 挂接特效
我们把刚才创建的变换动画特效挂接到玩家预设身上,回到关卡编辑器,将变换动画零件的关键帧属性按下图进行修改。
![image-20210707162041367](./images/image-20210707162041367.png)
修改过后变换动画零件的效果变成了特效在前两秒扩大到原来的5倍后两秒恢复为原来的大小。
点击运行,进入游戏后,切换视角可以看到,这个特效已经挂接在玩家身上,并呈现不断缩放的效果。
![scale](./images/scale.gif)
## 设置属性
> 此部分内容在我的世界中国版2.1版本上线后才能在正式游戏环境生效。
玩家预设除了通用的属性之外,还提供了多种属性的设置,这些属性会在玩家被初始化时设置生效,如设置玩家的经验等级、饥饿度与健康值等等,根据功能存放在多个属性栏中,如图所示:
![playersettingattr](./images/playersettingattr.png)
> 设置玩家属性的本质是`将之前在代码里调用API才能设置的属性挪到属性面板进行可视化编辑并在玩家初始化时根据属性面板的设置数据调用对应的接口并生效。`比如经验等级这一分栏内的增加等级属性实际是调用预设的AddPlayerLevel接口。
玩家预设目前具有以下几种设置属性:
### 经验等级:设置玩家的等级相关属性
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 增加玩家等级 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#addlevel" rel="noopenner">AddLevel</a>接口,修改玩家等级,可为负数。|
### 饥饿与健康:设置玩家的饥饿度和健康值相关属性
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 健康临界值 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#sethealthlevel" rel="noopenner">SetHealthLevel</a>接口设置设置玩家健康临界值当饥饿值大于等于健康临界值时会自动恢复血量开启饥饿值且开启自然恢复时有效原版默认值为18 |
| 饥饿度 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#sethunger" rel="noopenner">SetHunger</a>接口,设置玩家饥饿度 |
| 饥饿临界值 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setstarvelevel" rel="noopenner">SetStarveLevel</a>接口设置玩家饥饿临界值当饥饿值小于饥饿临界值时会自动扣除血量开启饥饿值且开启饥饿掉血时有效。原版默认值为1 |
| 开启饥饿掉血 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setnaturalstarve" rel="noopenner">SetNaturalStarve</a>接口,设置是否开启玩家饥饿掉血,当饥饿值小于饥饿临界值时会自动扣除血量,开启饥饿值且开启饥饿掉血时有效.原版默认开启 |
| 饥饿掉血速度 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setstarvetick" rel="noopenner">SetStarveTick</a>接口,设置玩家饥饿掉血速度,当饥饿值小于饥饿临界值时会自动扣除血量,开启饥饿值且开启饥饿掉血时有效 |
| 开启自然恢复 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setnaturalregen" rel="noopenner">SetNaturalRegen</a>接口,设置是否开启玩家自然恢复 |
| 自然恢复速度 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#sethealthtick" rel="noopenner">SetHealthTick</a>接口,设置玩家自然恢复速度 |
| 最大消耗度 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setmaxexhaustionvalue" rel="noopenner">SetMaxExhaustionValue</a>接口,设置玩家最大消耗度(maxExhaustion) |
### 运动:设置玩家运动相关的属性
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 最大台阶高度 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setstepheight" rel="noopenner">SetStepHeight</a>接口,设置玩家前进非跳跃状态下能上的最大台阶高度, 默认值为0.56251的话表示能上一个台阶。 |
| 玩家飞行状态 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#changeflystate" rel="noopenner">ChangeFlyState</a>接口,勾选则给予飞行能力并进入飞行状态,不勾选则进入非飞行状态。 |
| 是否可跳跃 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setjumpable" rel="noopenner">SetJumpable</a>接口,设置玩家是否可跳跃 |
| 是否可移动 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setmovable" rel="noopenner">SetMovable</a>接口,设置玩家是否可移动 |
### 行为设置:设置玩家行为逻辑相关的属性
| 属性 | 描述 |
| -------------- | ------------------------------------------------------------ |
| 死亡不掉落物品 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#enablekeepinventory" rel="noopenner">EnableKeepInventory</a>接口,设置玩家死亡不掉落物品 |
| 拾取物品范围 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setpickuparea" rel="noopenner">SetPickUpArea</a>接口,设置玩家的拾取物品范围 |
### 渲染设置
| 属性 | 描述 |
| -------------- | ------------------------------------------------------------ |
| 原版自定义皮肤 | 等同于玩家对象PlayerObject下的<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/玩家对象PlayerObject.html#setskin" rel="noopenner">SetSkin</a>接口,更换玩家原版模型的自定义皮肤,会覆盖原有皮肤,但会被骨骼模型覆盖。 |

View File

@@ -0,0 +1,26 @@
---
front: https://nie.res.netease.com/r/pic/20210727/1e450bb1-ee50-4e6c-b614-7fbd6a00b4e7.png
hard: 入门
time: 5分钟
---
# 方块预设
BlockPreset方块预设可与某个位置的方块绑定起来然后通过方块预设进行一些与方块相关的编程如利用预设的生命周期在特定时刻摧毁指定位置的方块等一般需要配合一个合适的零件实现。
在编辑器中新建方块预设,选中该预设文件对其进行编辑时,除了预设的公共属性外,可额外指定方块预设所绑定的方块的类型,支持原生的方块类型与存档内的自定义方块两类。与实体预设不同的是:若方块预设选择"泥土"进行绑定,也**只会**绑定到使用此方块预设生成的那些泥土方块上,而**不会**绑定到直接生成或已存在地图上的那些泥土方块上。
![image-20210707174815752](./images/image-20210707174815752.png)
注意:如果自定义方块内容有更新,需要在自定义方块属性中点击刷新所有属性。对自定义方块的编辑可参考[配置](../../15-自定义游戏内容/0-配置.md)。
![image-20210707175538979](./images/image-20210707175538979.png)
设置好方块预设的属性后,即可将方块预设拖拽至场景中达到在指定位置放置特定方块的目的了。这样一来,在启动开发包进行测试时,就会发现对应的位置放置了一个指定的方块。
![image-20210707175917988](./images/image-20210707175917988.png)
如果需要添加一些自定义的逻辑,可制作零件,或使用编辑器内置的一些零件,将其挂接到方块预设预设上即可。
![image-20210714103404594](./images/image-20210714103404594.png)

View File

@@ -0,0 +1,38 @@
---
front: https://nie.res.netease.com/r/pic/20210727/1e450bb1-ee50-4e6c-b614-7fbd6a00b4e7.png
hard: 入门
time: 5分钟
---
# 特效预设
EffectPreset特效预设是一类绑定特效资源的预设目的是给特效赋予特定的功能而非制作特效。
有关特效制作的相关知识,请参阅[特效编辑器](../../../16-美术/9-特效/0-基本介绍.md)的相关文档。
我们提供了内置特效预设,它无需创建既可使用,通过菜单栏=>添加预设=>特效预设进行添加。
![image-20210713180249148](./images/image-20210713180249148.png)
特效预设提供特效文件和自动播放属性,你需要通过特效编辑器创建一个粒子/序列帧特效,设置特效文件后方能预览。
![image-20210705150419306](./images/image-20210705150419306.png)
如果不勾选自动播放属性,则需要通过零件代码在合适的时机调用播放/停止接口进行手动控制。
你也可以通过菜单栏=>创建预设=>特效预设来创建自己的自定义特效预设。
这里我们选择官方制作好的一个变换动画特效模板来展现自定义特效预设可以实现什么样的效果。
通过菜单栏=>创建预设=>模板预设=>变换动画特效我们可以添加这个模板预设。
![image-20210708160109528](./images/image-20210708160109528.png)
创建好的特效预设可以很方便的从资源管理器或预设库中拖到场景内进行实例化,通过预览,我们可以把特效拖到我们希望放置的位置上。
![image-20210708160408781](./images/image-20210708160408781.png)
点击运行,进入开发包后,我们可以看到这些变换动画特效已经在世界里动了起来。
![effect](./images/effect.gif)

View File

@@ -0,0 +1,50 @@
---
front: https://nie.res.netease.com/r/pic/20210727/1e450bb1-ee50-4e6c-b614-7fbd6a00b4e7.png
hard: 入门
time: 5分钟
---
# 界面预设
UIPreset界面预设是一类绑定UI资源的预设目的是给UI赋予预设的属性如能使UI随着预设的出现而出现、销毁而销毁等。和使用modsdk接口创建UI一样使用界面预设需要一个UI编辑器制作的UIJson文件和一个继承自ScreenNode的脚本文件。
有关UI制作的相关知识请参阅[界面编辑器](../../../18-界面与交互/1-界面编辑器使用说明.md)的相关文档。
在预设编辑器,通过菜单栏=>创建预设=>界面预设我们可以创建一个界面预设。
![image_20210805195951](./images/image_20210805195951.png)
在编辑器中新建界面预设选中该预设文件对其进行编辑时界面预设除了特有的可编辑属性外公共属性类似空预设。界面预设提供相当多的属性编辑它们共同决定了界面预设绑定的UI最终展示的属性。
首先需要设置界面预设绑定的UI画布。该设置需要选择想打开的UIJson文件以及该文件中的画布名称。
![image_20210805202301](./images/image_20210805202301.png)
第二步需要设置界面预设所绑定的继承自ScreenNode的脚本文件以及脚本类名使用新建文件向导创建的ScreenNode类其脚本类名默认和脚本文件名相同。
![image_20210806100252](./images/image_20210806100252.png)
这两步设置完成后该界面预设就能够成功创建出UI界面。若没有成功创建请检查界面文件或ScreenNode脚本文件是否有损坏。
后续的设置定义了所打开UI的属性。
![image_20210806101021](./images/image_20210806101021.png)
![image_20210806102954](./images/image_20210806102954.png)
![image_20210806103002](./images/image_20210806103002.png)
| 属性 | 说明 |
| :--- | :--- |
| 当前命名空间 | 当前作品的命名空间,不可编辑 |
| UI名称 | 在当前命名空间中需唯一 |
| 自动激活 | 在界面预设创建完成后是否自动创建UI若勾选则自动创建反之则不会自动创建。该设置在预设编辑器内不会生效界面会被自动激活 |
| 显示方式 | 创建UI的显示方式有CreateUI和PushScreen两种方式。若选择PushScreen打开UI则后续属性不可设置也不会生效 |
| 绑定父预设实体 | 是否绑定预设实体当父预设为生物预设或玩家预设等有实体的预设时勾选该属性UI会被绑定到该实体上。当勾选后可设置绑定UI的偏移和自动缩放属性但HUD属性不可设置 |
| HUD |该界面是否允许游戏操作。勾选为允许,不勾选则屏蔽游戏操作 |
| 绑定UI偏移 | 修改与绑定实体之间的偏移量 |
| 绑定UI自动缩放 | 设置已绑定实体的UI是否根据绑定实体与本地玩家间的距离动态缩放 |
| 编辑器内预览 | 在编辑器内设置控制界面预设所绑定UI的显示隐藏。该属性在非编辑器平台无效。 |
设置好属性后,将该界面预设拖拽至场景中,界面就能显示出来了。
![image_20210806152438](./images/image_20210806152438.png)

View File

@@ -0,0 +1,92 @@
---
front: https://nie.res.netease.com/r/pic/20210727/1e450bb1-ee50-4e6c-b614-7fbd6a00b4e7.png
hard: 入门
time: 5分钟
---
# 文字面板预设
> 目前仅在开发测试中生效正式服预计在2.2版本上线,请开发者合理安排开发节奏。
## 基础介绍
TextBoardPreset文字面板预设是一类绑定**文字面板**的特殊预设,目的是能够快速创建、编辑和使用文字面板。
> 对于文字面板的概念,开发者可以参阅为[文字面板的定义](../../../20-玩法开发/10-基本概念/1-我的世界基础概念.md#文字面板)以及<a href="../../../../mcdocs/3-PresetAPI/预设对象/预设/文字面板对象TextboardObject.html" rel="noopenner"> 文字面板预设相关接口 </a>
## 创建与添加
我们分别提供了内置文字面板预设和可供创建的普通文字面板预设。
### 添加内置文字面板预设
内置文字面板预设无需创建,即可使用,通过菜单栏=>添加预设=>文字面板预设(来自内置预设)进行添加,如下图所示。
![添加内置文字面板预设](./images/addtextboard.png)
### 创建普通文字面板预设
普通文字面板预设不同于内置的预设,开发者需要通过新建文件向导=→预设分页=→找到文字面板预设=→创建,如下图所示
![创建](./images/createtextboard.png)
## 文字面板属性
文字面板预设除了预设所具有的基本属性外,额外提供了文字面板特有的属性,如下图所示
![面板属性](./images/textboardattr.png)
| 属性 | 说明 |
| :--- | :--- |
| 文本内容| 文字面板上所显示的文字内容,支持[样式代码](https://minecraft-zh.gamepedia.com/%E6%A0%B7%E5%BC%8F%E4%BB%A3%E7%A0%81)|
|始终面向相机| 默认开启,勾选后文字面板会随着相机移动而改变朝向,始终保持正面朝向相机 |
| 深度测试 | 默认开启,勾选后文字面板会按照正常的前后顺序进行遮挡或显示 |
| 文本颜色 | 文字面板上文本内容的颜色 |
| 文本透明度 | 文字面板上文本内容的透明度,范围[0,1],值越小越透明。 |
| 背景颜色 | 文字面板自身的颜色。 |
| 背景透明度 | 文字面板自身的透明度,范围[0,1],值越小越透明。 |
## 挂接实体与玩家
文字面板预设既可以直接放置到世界的任意坐标位置,也可以绑定到实体或者玩家的相对位置,我们只需要将文字面板预设挂接到实体或玩家预设下,相比未挂接的情况,我可以看到实体和玩家预设下的文字面板预设多出了一栏坐标变换属性,此时调整这里的属性就是调整相对于父级预设的相对位置,如下图所示。
![挂接关系](./images/textboardattached.png)
## 操作示例
这里我们做一个基础的案例演示:
功能需求:
1. 在世界坐标0650放置一个文字面板内容为“你好我的世界”
2. 为一个牛的实体预设挂接一个文字面板,显示内容“我是一头牛”。
实现步骤:
1. 首先对于第一个功能我们直接在关卡编辑器将预设库中内置的文字面板预设拖动到场景舞台中并修改其坐标为0650如下图所示
![拖动内置预设](./images/textboard_1.gif)
2. 对于第二个功能,我们先分别创建一个使用了牛的模板的实体预设
![创建实体预设](./images/textboard_2.gif)
3. 再创建一个文字面板预设,并将其挂接到实体预设下
![挂接](./images/textboard_3.gif)
4. 调整位置和属性(位置、旋转、缩放可直接使用拖柄调整)
![调整属性](./images/textboard_4.gif)
5. 在关卡编辑器内将该实体预设拖动到场景舞台上
![拖动到场景](./images/textboard_5.gif)
6. 运行测试,看到最终效果如下图
![最终效果](./images/textboard-6.png)
7. 如果我们进一步调整预设的面板属性,并充分利用[样式代码](https://minecraft-zh.gamepedia.com/%E6%A0%B7%E5%BC%8F%E4%BB%A3%E7%A0%81),就能创造出更丰富的效果。
![高级效果](./images/textboard-7.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 787 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1,27 @@
---
front: https://nie.res.netease.com/r/pic/20210727/76bfa7be-0be4-4e27-91a3-b5268695f359.png
hard: 入门
time: 20分钟
---
# 触发器
TriggerPart触发器零件包含一个长方体的区域可以使用触发器零件对进出区域的实体进行检测。
![image-20210710181419000](./images/parts001.png)
点击触发器,可以在他的属性面板中看到以下属性:
- 区域,用于指定触发器的区域
- 维度:用于指定这个区域在哪个维度
- 监听,影响触发器的事件发送
![image-20210710181656492](./images/parts002.png)
点击区域页签旁边的定位按钮,可以将触发器的区域显示出来(如下图),之后可以通过挪动坐标系整体移动区域的位置,或者使用鼠标对触发器区域的每一个面进行拖拽。
> 区域的坐标是相对于触发器的坐标,拖动触发器同样可以改变区域的整体位置。
![parts003](./images/parts003.gif)
>如果需要在游戏中使用脚本调用此零件,可以参考<a href="../../../../mcdocs/3-PresetAPI/预设对象/零件/触发器零件TriggerPart.html" rel="noopenner"> 触发器零件的API接口文档 </a>

View File

@@ -0,0 +1,23 @@
---
front: https://nie.res.netease.com/r/pic/20210727/76bfa7be-0be4-4e27-91a3-b5268695f359.png
hard: 入门
time: 20分钟
---
# 玩家基础属性
PlayerBasicPart玩家基础属性零件是一种只能挂接到玩家预设下的内置零件。
![image-20210708144908833](./images/image-20210708144908833.png)
通过挂接玩家基础属性零件,我们能够对所有玩家的基础属性进行相应的修改。
![image-20210708150124638](./images/image-20210708150124638.png)
点击运行进入游戏我们可以看到自身的血量上限有40可以透视到其他玩家的名字。
![image-20210708150107248](./images/image-20210708150107248.png)
>如果需要在游戏中使用脚本调用此零件,可以参考<a href="../../../../mcdocs/3-PresetAPI/预设对象/零件/玩家基础属性零件PlayerBasicPart.html" rel="noopenner"> 玩家基础属性零件的API接口文档 </a>

View File

@@ -0,0 +1,18 @@
---
front: https://nie.res.netease.com/r/pic/20210727/76bfa7be-0be4-4e27-91a3-b5268695f359.png
hard: 入门
time: 20分钟
---
# 世界属性零件
使用时挂在空预设下即可。并且尽量保证这个预设在场景中有且仅有一个实例。
![parts004](./images/parts004.png)
世界选项与旧版关卡编辑器的世界属性组件相同。
![parts005](./images/parts005.png)
>如果需要在游戏中使用脚本调用此零件,可以参考<a href="../../../../mcdocs/3-PresetAPI/预设对象/零件/世界属性零件WorldPart.html" rel="noopenner"> 世界属性零件的API接口文档 </a>

View File

@@ -0,0 +1,52 @@
---
front: https://nie.res.netease.com/r/pic/20210727/76bfa7be-0be4-4e27-91a3-b5268695f359.png
hard: 入门
time: 20分钟
---
# 相机轨迹零件
相机轨迹零件CameraTrackPart是一个用于制作相机移动和旋转轨迹动画的零件。
为了便于查看效果,这里我们添加一个货摊素材作为参照物,如下图所示。
![parts006](./images/parts006.png)
点击相机轨迹零件,我们可以在属性面板看到其有如下属性:
![parts006](./images/parts007.png)
这里重点解释一下相机轨迹这部分属性:
1. 预览路径:用于控制是否开启预览路径,预览路径就是用线条和箭头在预设场景中显示相机动画的轨迹路线,即上面示意图中的部分。
2. 播放:勾选则在预设场景中播放当前相机轨迹动画。
3. 轨迹:即相机轨迹动画中的每个轨迹点的信息,可以理解为关键帧动画中的某一帧,代表相机在某个时间点须将自身的位置旋转等信息变换到这个轨迹点所代表的状态上。相机轨迹零件的作用就是让玩家能够自由编辑相机的轨迹点信息,从而构成相机动画。可以通过轨迹右侧的"+"按钮新增轨迹点,每个轨迹点的属性如下:
>偏移:该轨迹点相对于整个相机轨迹零件的位置偏移量
>
>旋转:该轨迹点摄像机相对于正北方向的旋转弧度(上下弧度,左右弧度)
>
>Pitch俯仰角顺向控制上下方向的顺逆
>
>Yaw偏航角顺向控制左右方向的顺逆
>
>时间:上一个轨迹点到当前轨迹点所需时间,越长,相机变换的速度越缓慢
4. 轨迹点操作方式:
![parts009](./images/parts009.png)
1. 轨迹点顶部按钮,可以快捷执行删除轨迹点、上移轨迹点、下移轨迹点、上方新建轨迹点四种操作。
2. 轨迹点的偏移和旋转属性右侧提供了记录当前摄像头信息和定位的快捷操作按钮
>记录当前摄像头信息:将预设场景界面的摄像头信息记录在当前轨迹点,当前支持记录位置和旋转两种信息。
>
>定位:在预设场景展示该轨迹点的坐标,并提供坐标轴供玩家进行可视化操作来调整轨迹点的位置信息。
充分熟悉上述操作方式后,我们能够更快速和便捷地进行相机轨迹动画的创作,并随时进行路径的预览和播放,如下图所示
![cameratrack](./images/cameratrack.gif)
>如果需要在游戏中使用脚本调用此零件,可以参考<a href="../../../../mcdocs/3-PresetAPI/预设对象/零件/相机轨迹CameraTrackPart.html" rel="noopenner"> 相机轨迹零件的API接口文档 </a>

View File

@@ -0,0 +1,40 @@
---
front: https://nie.res.netease.com/r/pic/20210727/76bfa7be-0be4-4e27-91a3-b5268695f359.png
hard: 入门
time: 20分钟
---
# 实体零件
## 实体组合
实体零件EntiyBasePart用于在预设下管理多个实体预设。
在[预设组装的挂接规则](../../14-预设玩法编程/1-深入理解预设/1-组装预设.md)中,我们知道空预设下是无法挂载实体预设的,为了让开发者更便捷地管理多个实体,我们提供了实体零件。使用时只需在空预设下挂载此零件,再从属性面板选择对应的实体类型,就能够间接地达成预设下挂载实体的目标。实体零件属性的如下图所示:
![custommonster](./images/custommonster.png)
- 自动创建是否在零件初始化时自动创建关联实体ID如果不勾选则需要手动调用零件的API创建关联实体ID可以参考<a href="../../../../mcdocs/3-PresetAPI/预设对象/零件/实体零件EntityBasePart.html" rel="noopenner"> 实体零件API接口文档 </a>。
- 实体类型:实体零件所绑定的实体类型,这里支持原版实体和未绑定预设的实体配置。
>注意:实体类型不支持实体预设
这里举一个实用例子,对于含有刷怪事件的玩法,开发者可以将每波刷出的怪物制作成一个怪物阵型,从而对每波怪物进行统一的管理,这里就需要用到实体零件,
通过复制或新建,在预设下创建多个该零件,便能构建出一个怪物阵型,如下图所示:
![monsterFormation](./images/monsterFormation.png)
## 注意事项
- 实体零件**只能挂接在空预设**下
- 实体类型属性,**不能选择已经有对应实体预设的类型**,否则创建出来的是实体预设,不受实体零件管理
- 实体零件创建出来的实体,**不会保存到地图**中,在预设卸载,保存退出等时机会自动清除相关实体,在下次预设加载时再重新创建
- 注意避免组合大量实体零件构建怪物阵型,这可能造成加载时卡顿,尤其在低配手机上
- 实体零件进行缩放时,是**xyz轴同步缩放**但它的父节点可以设置xyz轴分别为不同缩放以**x轴的最终缩放**为准,尽量避免实体零件的父节点的缩放不一致
- 实体零件进行旋转时,**只支持xy轴旋转**且只在实体生成时有效此后由怪物AI控制如果前面把父节点的缩放设为不一致旋转实体可能导致x轴的缩放系数发生变化导致实体缩放突变。
>如果需要在游戏中使用脚本调用此零件,可以参考<a href="../../../../mcdocs/3-PresetAPI/预设对象/零件/实体零件EntityBasePart.html" rel="noopenner"> 实体零件的API接口文档 </a>

View File

@@ -0,0 +1,33 @@
---
front: https://nie.res.netease.com/r/pic/20210727/76bfa7be-0be4-4e27-91a3-b5268695f359.png
hard: 入门
time: 20分钟
---
# 导航路径零件
导航路径零件NavPointsPart用于创建一条可视化的路径并进行路径点的可视化添加和编辑点击该零件我们在属性面板可以看到其拥有以下属性
![parts010](./images/parts010.png)
这里着重讲一下巡逻路径属性,巡逻路径的本质就是一组有顺序的位置坐标数据。巡逻路径有两个属性:
1. 预览路径:用于控制是否开启预览路径,预览路径就是用线段和箭头将所有巡逻点连接起来,让玩家在编辑路径时能够直观地看到每个点之间的位置和顺序关系。
2. 路径:即巡逻路径上的每个巡逻点的信息,通过右侧的""按钮可以新建巡逻点,巡逻点下包含该点的位置坐标。
3. 路径操作方式每个巡逻点上方的菜单下图中A框可以进行巡逻点的删除、上移、下移和上方新建四种快捷操作。右侧的记录摄像机位置下图中B框和定位按钮下图中C框可以让你更为便捷地进行路径点的可视化选取和移动。
![parts011](./images/parts011.png)
熟练上述操作后能够帮助你快速搭建导航路径,如下图所示:
![navpointssample](./images/navpointssample.gif)
这里举一个运用导航路径零件的例子:在塔防游戏中,我们希望怪物出生后按照一定的路径进行移动巡逻,比如从起始点开始,走向第二个巡逻点,再走向第三个巡逻点,以此类推,形成一条巡逻路径。那么如何快速进行路径的可视化编辑呢?
为了达到这个效果,我们可以在编辑器内使用导航路径零件,提前构造好巡逻路径点,然后在脚本中使用本零件的接口(<a href="../../../../mcdocs/3-PresetAPI/预设对象/零件/导航路径零件NavPointsPart.html" rel="noopenner"> GetNavigationPoints </a>)快速获得所有巡逻点的数据,再调用寻路接口(<a href="../../../../mcdocs/1-ModAPI/接口/实体/行为.html" rel="noopenner"> SetMoveSetting </a>)让怪物依次在各个点之间移动,以此达到怪物移动巡逻的效果。
>这里只是一个简单使用案例,导航路径零件主要帮助开发者可视化编辑路径/位置数据,具体使用还需要开发者根据实际需要灵活运用哦~
关于导航路径零件的接口,可以参考<a href="../../../../mcdocs/3-PresetAPI/预设对象/零件/导航路径零件NavPointsPart.html" rel="noopenner"> 导航路径零件的API接口文档 </a>

View File

@@ -0,0 +1,78 @@
---
front: https://nie.res.netease.com/r/pic/20210727/76bfa7be-0be4-4e27-91a3-b5268695f359.png
hard: 入门
time: 20分钟
---
# 后处理零件
后处理零件PostProcessPart用于快速设置并在游戏中使用渐晕、镜头污渍、模糊等后处理效果。
以往开发者想要使用后处理效果,需要手动在零件代码中调用后处理相关的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/索引.html" rel="noopenner"> ModAPI</a>接口步骤繁琐且需要先了解python和SDK框架对新开发者不够友好此次将后处理效果封装成一个零件正是为了帮助不会代码的开发者用上后处理的效果让自己开发的组件达到更高的品质。
> 后处理零件只能挂载在已经勾选预加载的空预设上。
点开零件属性,我们可以看到后处理零件拥有以下属性。
![postprocesspart-1](./images/postprocesspart-1.png)
接下来我们逐一介绍后处理零件的几种效果属性。
### 渐晕:效果如下图
![postprocesspart](./images/postprocesspart-2.png)
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 开启屏幕渐晕 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/渐晕.html#setenablevignette" rel="noopenner">SetEnableVignette</a>接口设置是否开启屏幕渐晕Vignette效果开启后玩家屏幕周围将出现渐晕。 |
| 渐晕中心位置 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/渐晕.html#setvignettecenter" rel="noopenner">SetVignetteCenter</a>接口设置渐晕Vignette的渐晕中心位置可改变屏幕渐晕的位置。 |
| 渐晕颜色 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/渐晕.html#setvignettergb" rel="noopenner">SetVignetteRGB</a>接口设置渐晕Vignette的渐晕颜色可改变屏幕渐晕的颜色。 |
| 渐晕半径 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/渐晕.html#setvignetteradius" rel="noopenner">SetVignetteRadius</a>接口设置渐晕Vignette的渐晕半径半径越大渐晕越小玩家的视野范围越大。 |
| 渐晕模糊系数 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/渐晕.html#setvignettesmoothness" rel="noopenner">SetVignetteSmoothness</a>接口设置渐晕Vignette的渐晕模糊系数模糊系数越大则渐晕边缘越模糊模糊的范围也越大。 |
### 模糊:效果如下图
![postprocesspart](./images/postprocesspart-3.png)
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 开启高斯模糊 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/模糊.html#setenablegaussianblur" rel="noopenner">SetEnableGaussianBlur</a>接口,设置是否开启高斯模糊效果,开启后玩家屏幕周围被模糊。 |
| 模糊半径 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/模糊.html#setgaussianblurradius" rel="noopenner">SetGaussianBlurRadius</a>接口,设置高斯模糊效果的模糊半径,半径越大,模糊程度越大,反之则模糊程度越小。 |
### 色彩校正:效果如下图
![postprocesspart](./images/postprocesspart-4.png)
| 属性 | 描述 |
| ---------------- | ------------------------------------------------------------ |
| 开启色彩校正 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/色彩.html#setenablecoloradjustment" rel="noopenner">SetEnableColorAdjustment</a>接口,设置是否开启色彩校正效果,开启后可进行屏幕色彩调整 。|
| 色彩亮度 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/色彩.html#setcoloradjustmentbrightness" rel="noopenner">SetColorAdjustmentBrightness</a>接口,调整屏幕色彩亮度,亮度值越大,屏幕越亮,反之则越暗。|
| 色彩对比度 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/色彩.html#setcoloradjustmentcontrast" rel="noopenner">SetColorAdjustmentContrast</a>接口,调整屏幕色彩对比度,屏幕对比度值越大,色彩差异则越明显,反之则色彩差异越小。|
| 色彩饱和度 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/色彩.html#setcoloradjustmentsaturation" rel="noopenner">SetColorAdjustmentSaturation</a>接口,调整屏幕色彩饱和度,屏幕饱和度值越大,色彩则越明显,反之则越灰暗。|
| 色调 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/色彩.html#setcoloradjustmenttint" rel="noopenner">SetColorAdjustmentTint</a>接口,调整屏幕色彩的色调,根据输入的色调和强度来调整屏幕色彩,当强度越大时,屏幕整体颜色越偏向输入的色调。|
### 景深效果:效果如下图
![postprocesspart](./images/postprocesspart-5.png)
| 属性 | 描述 |
| ---------------- | ------------------------------------------------------------ |
| 开启景深效果 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setenabledepthoffield" rel="noopenner">SetEnableDepthOfField</a>接口,设置是否开启景深效果,开启后屏幕出现景深效果,根据焦点距离呈现远处模糊近处清晰或者近处模糊远处清晰的效果。 |
| 模糊半径 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setdepthoffieldblurradius" rel="noopenner">SetDepthOfFieldBlurRadius</a>接口,调整景深效果模糊半径,模糊半径越大,模糊程度越大,反之则越小。 |
| 远景模糊大小 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setdepthoffieldfarblurscale" rel="noopenner">SetDepthOfFieldFarBlurScale</a>接口,调整景深效果远景模糊大小,远景模糊大小越大,远景的模糊程度越大,反之则越小。注意,远景模糊程度的调节依赖于焦点距离,如果焦点处于较远的距离,那么此时远景处于较清晰的状态,模糊程度大小调节不会很明显。 |
| 近景模糊大小 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setdepthoffieldnearblurscale" rel="noopenner">SetDepthOfFieldNearBlurScale</a>接口,调整景深效果近景模糊大小,近景模糊大小越大,近景的模糊程度越大,反之则越小。注意,近景模糊程度的调节依赖于焦点距离,如果焦点处于较近的距离,那么此时近景处于较清晰的状态,模糊程度大小调节不会很明显。 |
| 屏幕中心聚焦模式 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setdepthoffieldusecenterfocus" rel="noopenner">SetDepthOfFieldUseCenterFocus</a>接口,设置景深效果是否开启屏幕中心聚焦模式,开启后聚焦距离将被自动设置为屏幕中心所对应的物体所在的距离。在第一人称视角下,聚焦距离将被自动设置为屏幕准心所对应的物体与相机的距离,即自动聚焦准心所对应的物体。在第三人称视角下,由于屏幕中心总是对应着玩家,因此聚焦距离将被自动设置为玩家与相机的距离,即自动聚焦在玩家自己。 |
| 焦点距离 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setdepthoffieldfocusdistance" rel="noopenner">SetDepthOfFieldFocusDistance</a>接口,调整景深效果焦点距离,距离越小,则远处模糊,近处清晰;距离越大,则远处清晰,近处模糊。该距离为实际距离,即以玩家相机为起点的世界坐标距离。 |
### 镜头污迹:效果如下图
![postprocesspart-6](./images/postprocesspart-6.png)
| 属性 | 描述 |
| ------------ | ------------------------------------------------------------ |
| 镜头污迹效果 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setenablelensstain" rel="noopenner">SetEnableLensStain</a>接口,设置是否开启镜头污迹效果,开启后镜头出现污迹效果,可改变使用的污迹贴图及污迹颜色。 |
| 镜头污迹强度 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setlensstainintensity" rel="noopenner">SetLensStainIntensity</a>接口,调整镜头污迹强度,强度越大,污迹越明显,反之则越透明。 |
| 镜头污迹贴图 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setlensstaintexture" rel="noopenner">SetLensStainTexture</a>接口,开启镜头污迹效果后,污迹效果使用的为系统默认贴图。该接口可改变镜头污迹所使用的贴图。注意贴图最好使用透明背景,否则屏幕将被贴图覆盖。 |
| 镜头污迹颜色 | 等同于调用ModAPI下的<a href="../../../../mcdocs/1-ModAPI/接口/后处理/镜头效果.html#setlensstaincolor" rel="noopenner">SetLensStainColor</a>接口,调整镜头污迹颜色,根据输入的颜色和强度来调整污迹色彩,当强度越大时,污迹颜色越偏向输入的颜色。 |

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

View File

@@ -0,0 +1,187 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/level001.3939b19d.png
hard: 入门
time: 30分钟
selection: true
---
# 关卡编辑器
## 重做概述
关卡编辑器是主编辑器,其关卡编辑器的功能主要是
- 对地图(场景)的展示
- 在场景中放置实例,即将预设进行实例化
- 实例的显示和坐标变换的调整
- 实例的属性编辑
![level001](./images/level001.png)
## 舞台
> 此文章仅关注预设的放置和管理,关于生物的,请查看[放置和管理生物](./4-放置和管理生物.md)
舞台中显示当前场景中存在的所有实例,舞台条目与实例一一对应。
实例的父子关系通过左右层次和折叠展现出来,与预设编辑器的层次面板相同。
> 当前在舞台中不支持挂接关系和顺序的调整。
不同种类的实例使用不同的图标。
![level002](./images/level003.png)
你可以在舞台上执行如下操作:
- 单击条目,在舞台和预览窗中同时选中这一条目,并且关卡编辑器的属性窗口也显示这一条目的属性。
- 双击条目,选中。并且预览窗中相机飞行至该条目的实例附近。
- 键入关键字并搜索,显示匹配的条目。(包括这个条目的各级父节点)
![level002](./images/level004.png)
右键舞台的预设条目(目前仅支持第一个层级的条目,不支持子条目),会出现如下的菜单:
- 复制:复制这个条目的实例
- 粘贴:在舞台中粘贴复制的实例
- 创建副本:在舞台中创建这个实例的副本
- 重命名:对这个实例进行重命名
- 删除:删除这个实例
- 在资源管理器中定位:资源管理器打开这个实例对应的预设的路径,并选中预设
- 编辑对应预设:打开预设编辑器并编辑这个实例对应的预设
![image-20210712194339546](./images/preset006.png)
## 预览窗
目前4个编辑器均包含预览窗预览窗是针对编辑器进行过特殊改动的《我的世界》关卡编辑器的预览窗与最终的效果最为接近。
为了区分预设实例和MC地图本身所有的实例都会显示黄色的描边。
> 事实上,所有的实体都会显示描边,即使没有绑定预设。
### 修改实例的坐标变换
当选中实例时会显示这个实例的坐标变换拖柄。使用主键盘区的123来切换变换拖柄的功能。
#### 1位置拖柄
位置拖柄的3个轴与预览窗右上角的轴向的方向相同。
![level002](./images/level005.png)
使用鼠标拖拽某个箭头,可以让实例沿着这个方向移动。
移动的时候,你可以在属性面板中发现,这个实例的位置属性也在改变。
![录制_2021_07_12_16_26_04_696](./images/level006.gif)
> 对于素材来说由于MC的方块只能位于整数位置所以在移动停止的时候素材的位置会自动取整。
>
> 如果一个空预设下,或者空预设的子预设下有挂接素材,那么这个空预设的位置也会取整。
>
> 上述取整的规则无论是坐标系拖拽还是在属性面板输入数值,都会生效。
![level009](./images/level009.png)
#### 2旋转拖柄
按2切换到旋转拖柄会显示3个扇环拖拽扇环进行角度的修改。
![level007](./images/level007.gif)
素材只能以90°作为步长旋转如下图。
![level010](./images/level010.gif)
#### 3缩放拖柄
按3切换到缩放拖柄拖拽缩放拖柄来实现各个轴向的缩放。目前还不支持通过拖柄进行整体缩放
![level008](./images/level008.gif)
素材并不适合使用这种方式进行缩放,对于素材的缩放,您仍然可以使用类似地图编辑器的选区的方式。
> 注意素材在编辑器中当前任何情况下实际的缩放值都不会小于0.01。
![level011](./images/level011.gif)
## 在场景中放置实例
实例只有放置在场景中才会生效。
当前有两种方式可以在场景中放置预设以生成实例。
### 资源管理器拖拽
资源管理器找到常用目录的Presets目录。
将想要实例化的预设拖拽至场景中即可。
![level012](./images/level012.gif)
### 预设库拖拽
预设库是新版编辑器中新增的一个面板。
所有您创建的预设,以及编辑器内置的预设都可以在这个地方看到。
你可以通过下图的方式,直接将预设拖拽到场景中进行实例化。
如果你的关卡编辑器中没有显示预设库,你可以通过编辑器的顶部菜单-窗口-预设库,打开这一面板。
预设库与舞台一样支持搜索功能。
![level013](./images/level013.gif)
## 功能区
关卡编辑器顶部的功能区目前支持6个功能分别是
- 撤销:移除上一次操作造成的影响,目前支持无限次的撤销,当切换编辑器后,不再记录之前的操作。
- 重做:重新进行上一次撤销的操作。
- 零件热更:当修改零件代码后,零件会自动热更,此按钮仅供自动热更由于某些原因不生效时使用。
- 保存:保存当前的地图和预设存档。由于保存地图的时间较长,所以仅当需要保存地图时才会保存地图。
- 备份:在启动器的作品库中生成一份当前作品的拷贝。
- 运行:保存所有编辑器的内容,并进行开发测试。
> 在编辑器保存时,玩家预设的实例不会保存在预设存档中,如果需要修改,请在预设编辑器中直接修改玩家预设
![level014](./images/level014.png)
## 如何继续使用组件?
新版编辑器目前不再支持组件的属性编辑(你可以看到关卡编辑器中已经没有组件面板了)。
使用组件的作品在升级到新版编辑器之后,组件的逻辑仍然是生效的,仅编辑器不再支持。
我们会逐渐使用预设架构和配置代替当前的组件。
### 目前无需处理,可以转化为配置的组件
- 生物
- 物品 - 普通物品
- 物品 - 武器和工具
- 物品 - 盔甲
- 方块
- 配方
### 建议删除并替换为零件的组件
- 世界 - 基础属性建议删除行为包目录下的script_World文件夹并使用WorldPart零件。
- 玩家 - 基础属性建议删除行为包目录下的script_Player文件夹并使用PlayerBasicPart零件。
注意,这一步最好在刚刚升级作品后。
当前创建新零件时会在第一个script_xxx目录下生成零件文件的链接。如果在这之后想要删除组件文件夹可以先通过新建文件向导创建一个ModMain然后把Parts目录移动到新创建的script_xxx中然后再删除需要删除的路径。
其他组件我们会在后续的更新中逐步支持。

View File

@@ -0,0 +1,90 @@
---
front:
hard: 入门
time: 10分钟
selection: true
---
# 放置和管理生物
## 放置生物
关卡编辑器支持在地图中放置生物。
- 对于地图组件来说,放置的生物会直接保存在地图存档中
- 对于AddOn来说你仍然可以放置生物但是只能在编辑器中预览放置的结果因为AddOn不包括地图存档
放置生物的方法
1. 在功能区点击放置生物按钮,开启该功能
2. 功能启用后,功能区的下方会新增一栏,在这里选择希望放置的生物类型
3. 将鼠标放置到内嵌游戏中,可以发现,会自动生成一个生物预览
4. 单击鼠标,可以放下一个生物
5. 使用键盘的Esc键或者再次点击放置生物按钮退出放置生物的状态
![放置生物](./images/fzsw.gif)
除了功能区的放置生物功能之外,对于自定义生物,可以在配置中右键希望放置的生物,在菜单中点击放置生物,来放置这个生物。
![配置放置](./images/pzfz.png)
> 注意:新建的自定义生物直接放置在地图中,显示可能不正常,你可以重启编辑器,或者使用功能区的重载地图。
![重载地图](./images/czdt.png)
放置生物支持的类型
- 原版生物
- 自定义生物(指当前作品的自定义配置的生物)
如果放置的生物类型已经绑定了预设,在放置生物的时候,会直接生成这个生物的预设。
> 如下图thnjl:entity这个自定义生物被绑定到了实体预设Entity0上
![实体预设绑定](./images/stysbd.png)
## 通过舞台管理生物
### 舞台简介
舞台分为上下两个区域,两个区域分别是:
- 上:预设,这里显示所有地图中的预设实例
- 下:生物,这里显示地图中的生物(仅包括已经加载的)
> 对于已经绑定实体预设的生物,只会显示在预设区域中
可以使用鼠标上下拖拽两个区域中间的横条,来修改两个区域占据的比例。
![舞台](./images/wt.gif)
对于下方的生物分区,同类生物会聚合到一个分组,分组可以展开折叠。
舞台中显示如下的信息,以下图羊驼举例:
- 生物和分组的名称,即下图中的羊驼
- 生物的实体IdEntity Id即下图中的-17179869151
- 如果你放置的某类生物有持久化的属性,也会在生物分组中显示
![舞台生物名称](./images/wtswmc.png)
> 如果一类生物是持久化的,那么在卸载区块和退出游戏时,该生物会存档。使用编辑器创建的自定义生物,会默认添加持久化属性。有一些原生生物是持久化的,比如羊驼。
![持久化保存](./images/cjh.png)
### 舞台生物操作
舞台中的生物支持查看/修改属性和删除两种操作。
1. 点击生物,可以在右侧的属性面板中查看这个生物的属性
![生物属性](./images/swsx.png)
> 灰色的属性暂时不支持修改
2. 舞台中右键生物/生物组或者选中他们之后点击键盘的delete键可以删除这些生物
### 内嵌游戏中调整生物
可以通过类似调整预设的方式,在内嵌游戏中对生物的坐标变换进行调整。
> 使用小键盘的1、2、3或者预览窗右上角的按钮切换拖柄的模式。
目前缩放无法保存到地图存档中,只能在编辑器中预览。如果需要保存缩放,当前可以使用实体预设
![调整生物变换](./images/tzswbh.gif)

View File

@@ -0,0 +1,216 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/level_image001.96d8db0b.png
hard: 入门
time: 40分钟
---
# 关卡编辑器(旧版)使用说明
## 基本介绍
关卡编辑器是配置和管理附加包Add-ons的中心能够自定义维度、生物、物品、方块、配方等内容通过组合这些游戏元素形成自己独特的玩法。
对于不同的开发者来说,使用关卡编辑器的推荐方式也不一样。
- 新手阶段:通过组件来搭建玩法,熟悉各种自定义游戏元素。
- 熟手阶段通过关卡编辑器的资源管理了解Addon的文件构成研究组件的功能实现原理在组件的基础上尝试做一些文件级别的修改。
- 高手阶段:使用关卡编辑器快速搭建玩法原型,之后做深度的文件修改。
建议先跟着下面的视频进行学习哦。
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=5f3a56335655da63cc2c6c39" height="600" width="800" allow="fullscreen" />
下面简单介绍各个模块的作用,详细介绍可以在后面相应的章节中找到。
<img src="./images/level_image001.png" />
- 菜单栏“作品”中可设置Add-on的命名空间“脚本”中可安装Mod SDK的脚本提示库“窗口”中可设置不同分项窗口的可见性。
- 工具栏:目前仅有“添加组件”按钮,用于添加组件到作品中;
- 组件:配置自定义的游戏元素,比如物品、生物、方块等等;通过不同的组件搭配形成玩法。
- 属性:当选择“组件”中的内容时,在属性面板中会显示相应的组件属性。
- 游戏区域:游戏区域运行着《我的世界》,可配合进行生物、坐标等的编辑。
- 舞台:显示当前游戏区域中的生物。
- 资源管理:管理作品内的文件, 文件格式转换的入口也都在这里。
- 常用操作:包含“保存”、“备份”、“运行”等按钮。
## 组件
### 添加组件
点击工具栏的“添加组件”按钮,然后选择某个组件,即可添加组件,如下图。在组件窗口中右键也可添加组件。
![img](./images/level_image001n.png)
在组件上点击右键,可以查看组件的简介,了解组件的大致功能。
![img](./images/level_image008n.png)
在属性面板上,将鼠标移到配置框上,稍等一会就会显示说明文字。
![img](./images/level_image009n.png)
### 基础组件简介
由于鼠标悬浮在组件的配置项上时都会显示介绍,因此这里主要介绍组件中较难理解的属性。
#### 世界->基础属性 组件
组件列表中,在“世界”上右键,添加“基础属性”组件。
组件列表中点击“基础属性”,可以在属性面板中看到可配置的属性。
![img](./images/level_image003.png)
世界的配置项和游戏内的设置基本相同,下面是部分配置项的说明:
- 游戏难度:如果设置为“和平”,那么游戏中无法放置僵尸等攻击型生物。当无法在游戏区域放置生物时,记得先检查是否把游戏难度设置为和平了。
- 随机刻速度:这个值会影响小麦生长、冰雪融化等事件,具体可参考链接:[我的世界中文Wiki-刻](https://minecraft-zh.gamepedia.com/刻)[我的世界英文Wiki-tick](https://minecraft.gamepedia.com/Tick)
- 逻辑:如果想实现一些比较特殊的流程,比如当玩家走到某个区域时,世界时间变为黑夜,那就需要用逻辑文件来实现。创建逻辑文件需使用逻辑编辑器,具体使用说明见[逻辑编辑器说明文档](../12-可视化编程/50-旧版逻辑编辑器使用说明/95-旧版逻辑编辑器使用说明.md)。下图中,左侧按钮表示新建一个逻辑文件,中间按钮表示选择一个逻辑文件,右侧按钮为清空逻辑配置。玩家、物品、生物中也可配置逻辑文件,后面不再赘述。
![img](./images/level_image004.png)
需要注意的是,世界基础属性中的设置是在玩家进入游戏再设置的,因此,如果基础属性中设定为生存模式,即使玩家进入存档前设定为冒险模式,进入游戏后也会被修改为生存模式。
#### 玩家->基础属性 组件
在“玩家”上右键,添加“基础属性”组件。点击“基础属性”,可以在属性面板中看到玩家可配置的属性。
下面说明部分配置项的意义:
- 是否锁定饥饿值:如果锁定的话,玩家的饥饿值在游戏过程中不会变化。
- 名字是否透视:是否能够透过障碍看到玩家头顶的名字。如果要设计一个捉迷藏的游戏,玩家的名字就不应该透视。
- 逻辑文件:可关联逻辑编辑器制作的.ets文件具体请查阅[逻辑编辑器使用说明](../12-可视化编程/50-旧版逻辑编辑器使用说明/95-旧版逻辑编辑器使用说明.md)。
#### 生物 组件
点击生物组件右侧的“+”号,可以添加自定义生物。
单击组件列表中的某个生物,可以在属性面板中配置其属性。 下面说明部分配置项的意义:
- 名字配置生物的ID和游戏内名字等内容。如果勾选“是否覆盖原有生物”那么生成的生物配置会覆盖原版的配置。
- 模型动作:目前支持选择原版的生物模型资源作为自定义生物的模型。在游戏内生物的碰撞都是按一个一个的长方体来计算的,这个长方体就是碰撞盒。
- 移动:这里的属性决定了生物如何移动和寻路。
- 战斗配置生物的攻击和血量等基础战斗数值以及生物的索敌方式和攻击方式。如果是想配置商人、对话NPC等无需战斗的NPC可以不勾选“是否可战斗”。
- 行为:目前只支持配置“看向玩家”和“随机闲逛”两项行为,更多的行为可查看[基岩版实体组件文档](https://minecraft-zh.gamepedia.com/%E5%9F%BA%E5%B2%A9%E7%89%88%E5%AE%9E%E4%BD%93%E7%BB%84%E4%BB%B6%E6%96%87%E6%A1%A3),然后在文件中手动添加更多的行为。
- 经济:配置生物的死亡掉落和交易表,需和经济中的掉落组件以及交易组件配合使用。
- 逻辑:可关联逻辑编辑器制作的.ets文件具体请查阅[逻辑编辑器使用说明](../12-可视化编程/50-旧版逻辑编辑器使用说明/95-旧版逻辑编辑器使用说明.md)。
自定义生物配置好之后,点击生物右侧的放置图标,会进入放置生物的操作状态,如下图。
![img](./images/level_image003n.png)
然后鼠标移到游戏区域中点击鼠标就能把生物放置到指定位置上。连续单击可连续放置生物按ESC可以取消放置生物的操作。
<img src="./images/level_image015.png" alt="img" style="zoom:67%;" />
在舞台中,会显示当前玩家附近已经加载的区域内的所有生物。其中“原有内容”表示这次开启编辑器时就已经存在的生物,“新增生物”表示开启编辑器后新添加进来的生物。在舞台中点击生物,游戏区域内相应的生物会显示为选中状态。
<img src="./images/level_image017.jpg" alt="img" style="zoom:67%;" />
双击舞台中的生物时,会跳转到该生物所在的坐标。
**附注**:关卡编辑器中镜头移动方式与地图编辑器中相同。
#### 物品->基础物品 组件
在“物品”上右键,添加“基础物品”组件。点击基础物品组件右侧的“+”号,可以添加自定义物品。
点击列表中的物品,可在属性面板中配置属性。下面是部分配置项的意义:
- 自定义IDID需为英文和数字的组合在游戏内用指令添加物品时/give @s item_id用到的就是这个ID。
- 贴图物品显示在物品栏中的图标需为PNG格式的图片。将资源管理窗口中的资源包/textures/items路径下的图片拖动到贴图栏即可完成设置。
- 特殊类型:这里可以选择物品的特殊类型,如“食物”或“生物蛋”。若为食物,则在游戏中能够食用并回复饥饿值,和原版食物一致;若为生物蛋,则在游戏中可以召唤生物,和原版生物蛋一致。值得注意的是,自定义生物时会自动生成生物蛋,如非必要,无需再为自定义生物配置生物蛋。
### 组件的搭配使用
组件目前分为以下大类:
![img](./images/level_image010n.png)
- 世界:包括相机和地形改变相关的组件;
- 维度:包括生物群系、自定义特征、生物生成规则等维度相关的功能;
- 玩家:包括技能、排行榜等和玩家相关的功能;
- 生物:用于添加自定义生物;
- 物品:用于添加食物、工具、装备、武器等自定义物品;
- 方块:用于添加自定义方块;
- 配方:用于添加自定义配方;
- 队伍:用于添加队伍配置;
- 经济:可配置掉落、交易、商店等物品流通相关的功能;
- 剧情:可配置对话和任务;
- 流程:包括开始游戏、结束游戏等控制游戏流程的组件;
- 玩法元素:包括塔防、起床战争等特定玩法所需的组件。
这些组件互相配合能够创造出完整的玩法,下面以“任务链模板”为例来说明组件如何配合。
任务链模板实现了一组任务,玩家可以一个接一个的做完所有任务,大致流程如下:
1. 玩家来到一个乡村,和村民对话后,接到一个任务去找到守卫士兵;
2. 士兵告知玩家怪物从地底冒出来了,让玩家去杀怪,杀怪会掉落装备;
3. 完成杀怪任务后,士兵让玩家去找火焰祭司,寻找封住地底裂隙的方法。
这是一个很简单的任务链,我们看看组件是如何配合实现这样的任务链的:
![img](./images/level_image011n.png)
- 任务中涉及到的对话NPC和怪物均为自定义生物由生物组件配置
- 对话功能,由对话组件配置;
- 任务功能,由任务组件配置;
- 击杀怪物会掉落战利品,由掉落组件配置战利品,在自定义生物中关联对应的掉落;
- 模板为冒险模式,由世界的基础属性组件控制。
除了“任务链模板”外,“对战玩法模板”、“塔防模板”也是由组件拼搭而成,可以参考学习。
### 组件的实质
每个组件都会生成相应的文件到作品中,编辑组件的属性,其实就是在修改这些文件。关卡编辑器通过组件的形式包装了这个修改过程,让修改变得可视化。
当对组件非常熟悉时,可能会有更加深入的需求,比如希望“开始流程”组件的界面更炫酷一点,比如希望给自定义生物添加更多属性,这个时候就可以直接去修改对应的文件,而无需拘泥于组件在属性面板中提供的属性。
**需要注意的是,目前编辑器的组件对手动修改的兼容还不完善,部分手动修改的内容在使用编辑器保存后会被覆盖。**
## 其他功能
### 常用操作
常用操作中有保存、备份、运行。
![img](./images/level_image030.png)
- 保存:保存当前关卡编辑器中的所有配置。
- 备份地图类型的作品可备份为Addon或地图若备份为Addon则会去掉其中的地图数据Addon类型的作品则只能备份为Addon。备份作品会显示在启动器的作品列表中。当准备对关卡进行较大的修改时建议先备份。
![img](./images/level_image031.png)
- 运行运行游戏时当前的所有配置都会生效用于综合测试游戏效果。运行会拉起独立的游戏客户端Mod PC开发包**在运行游戏时可以按下F11切换操作模式让鼠标可以自由移动**。
### 输出窗口
输出窗口中会显示编辑器运行的即时信息,是我们了解编辑器运行状况的帮手。各个窗口的输出信息有所区别:
- MC窗口在调试模式下会输出逻辑编辑器中“打印信息”节点中的信息用于辅助调试逻辑。
- All窗口编辑器运行所有的信息都会显示在这里。
- Warning窗口一些警告类信息会显示在这里。
- Error窗口报错信息显示在这里如果编辑器出现问题一般会在这里有报错信息。
## 如何提升开发能力
绝大部分的开发者都是我的世界深度玩家这为开发我的世界Addon打下了良好的基础。不过从玩家转变为开发者仍然会碰到几个挑战
- 如何快速的做出可以玩的作品,给自己持续的正向激励,避免在过长的学习周期中丧失热情;
- 游戏内常见的物品、配方等游戏元素,在背后是如何做到的,需要理解大量的新概念;
- 希望学习代码,如何找到现成的例子来辅助学习,而不是靠自己一点点摸索;
- Mod SDK接口非常非常的多怎么知道用哪些接口来实现自己的设计。
组件是解决以上问题的一个重要方式。
通过修改已有的模板,能够快速生成特定的玩法。组件基本为可视化配置,结合属性的注释,能够了解游戏元素的基础属性有哪些。
前面提到修改组件其实就是在修改作品中的文件。那么通过研究组件文件的变化能够知道Addon中不同文件的作用。
例如,我们修改自定义生物的名字为“演示生物”,如下图:
![img](./images/level_image012n.png)
在作品文件夹中搜索“演示生物”可通过VS Code打开作品文件夹后搜索会发现这个配置实际是改到了zh_CN.lang文件如下图
![img](./images/level_image013n.png)
这样我们就知道zh_CN.lang是语言文件而生物的名字是通过entity.生物ID.name的方式来定义的。
其他的配置也可以通过类似的方式来熟悉。当对作品的文件结构有了更深入的了解后,则可以通过[我的世界中文Wiki-附加包](https://minecraft-zh.gamepedia.com/%E9%99%84%E5%8A%A0%E5%8C%85)来学习更多的Addon知识。有了前面的基础再来看wiki就不会觉得难度太大了。
除了原版Addon已经支持的配置外我的世界中文版还提供了Python代码写Mod逻辑的方式也就是[Mod SDK](../13-模组SDK编程/2-Python脚本开发/0-脚本开发入门.md))通过Python代码能够实现很多丰富的玩法。
通过组件我们能够学习到游戏内通用的功能是如何用代码实现的。以相机组件为例在添加相机组件后作品文件夹中会增加一个script_Sight的文件夹。
![img](./images/level_image014n.png)
这个脚本文件夹实现的就是调整相机视角的功能。其中的editorConfig对应的就是属性面板中的配置。文件中的“VIEW_MODE”就对应属性窗口中的模式。
![img](./images/level_image015n.png)
![img](./images/level_image016n.png)
通过搜索“VIEW_MODE”我们能够定位到这个组件的核心实现代码通过研读这部分代码了解到用了哪些接口实现功能。
![img](./images/level_image017n.png)
总的来说,我们可以通过组件,先看效果,再去研究原理,理解原理后,再利用这些原理来打造更好的作品,从而实现开发能力的提升。

View File

@@ -0,0 +1,111 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/preset002.1e5e0e6f.png
hard: 入门
time: 30分钟
---
# 预设编辑器
## 什么是预设?
预设Preset就是预先设定的意思。即开发者们可以将方块、素材、实体、特效以及玩法逻辑拼装成一个预设。
预设作为文件被保存在行为包的Preset目录中如下图在资源管理器的常用目录中可以找到Preset文件夹。
![new004](./images/new004.png)
在使用时,一个预设作为一个整体被放置在游戏中,被放置到游戏中的预设被称为实例。
预设的后缀是.preset如果你对预设到底是什么感兴趣可以使用文本编辑器打开预设文件查看它的结构。
关于预设架构的使用,请查看[第一个预设Mod](../14-预设玩法编程/0-第一个预设Mod/0-创建新版作品.md)。
## 基本介绍
打开预设编辑器的方式有两种:
- 通过顶部的编辑器切换页签进行切换
- 在资源管理器中双击预设文件xxx.preset
预设编辑器主要用于预设的拼装,预览和属性编辑。如下图所示:
- 层级面板:用于显示预设的结构。
- 中间的预览窗:用于预设的预览,以及对每个对象进行坐标变换的拖拽调整。
- 属性面板:用于显示当前选中的层级条目的属性以及对其进行修改。
![preset001](./images/preset001.png)
注意,预设编辑器是对某一个预设的编辑,不能同时编辑多个预设。
## 层级与预设拼装
预设编辑器的层级面板用于显示当前正在编辑的预设的层级结构,通过树形图的方式显示他们的父子关系。
![image-20210712192542842](./images/preset003.png)
层级面板支持搜索,如下图。与关卡编辑器的舞台一样,搜索结果也会显示与它相关的树形结构。
![image-20210712193004090](./images/preset004.png)
层级面板,在根节点上右键,弹出如下菜单:
- 在资源管理器中定位:资源管理器打开这个预设的路径
- 打开目录在windows的资源管理器中打开这个预设对应的文件夹
- 添加素材:给预设添加素材
- 添加零件:给预设添加零件,二级菜单为可以添加的零件
- 添加预设:给预设添加子预设,二级菜单为可以添加的预设
> 当前不能改动子预设的层级
![image-20210712195437292](./images/preset008.png)
在除了根节点之外的条目上右键,弹出如下菜单:
- 复制:复制这个条目
- 粘贴:在层级中粘贴这个条目
- 创建副本:在层级中创建这个条目的副本
- 重命名:对这个条目进行重命名
- 删除:删除这个条目
- 在资源管理器中定位:资源管理器打开这个条目对应的路径,并选中预设
- 打开目录在windows的资源管理器中打开这个条目对应的文件夹
![image-20210712195358870](./images/preset007.png)
预设编辑器的功能区按钮,与预设拼装相关的如下:
- 添加预设:给预设添加子预设,弹出菜单为可以添加的预设
- 添加零件:给预设添加零件,弹出菜单为可以添加的零件
- 添加素材:给预设添加素材
![image-20210712193244943](./images/preset005.png)
## 预览窗
预设编辑器的预览窗里,除了天空之外只会渲染当前正在编辑的预设。
你可以在预览窗中对预设条目的坐标变换进行操作。参考[关卡编辑器](./3-关卡编辑器.md)的预览窗。两个编辑器的预览窗的坐标变换操作基本相同。
> 当你在进入预览窗时实际上会被传送至当前作品的出生点。预览窗仍然是我的世界同样存在256的高度限制这意味着你无法控制相机抵达过高或者过低的位置。
![image-20210712191544186](./images/preset002.png)
## 其他功能区按钮
- 撤销:移除上一次操作造成的影响,目前支持无限次的撤销,当切换编辑器后,不再记录之前的操作。
- 重做:重新进行上一次撤销的操作。
- 创建预设:与资源管理器常用目录 - Presets的“+”按钮的功能相同,参考[新版文件结构与资源管理](../../15-资源管理/2-文件结构.md)。
- 创建零件:与资源管理器常用目录 - Parts的“+”按钮的功能相同,参考[新版文件结构与资源管理](../../15-资源管理/2-文件结构.md)。
- 文件位置:资源管理器打开这个条目对应的路径,并选中当前正在编辑的预设。
- 保存:保存当前预设文件。
- 备份:在启动器的作品库中生成一份当前作品的拷贝。
- 运行:保存所有编辑器的内容,并进行开发测试。
![image-20210712193244943](./images/preset005.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Some files were not shown because too many files have changed in this diff Show More