diff --git a/mcguide/10-新内容/1-开发工作台/944-1.1.25.md b/mcguide/10-新内容/1-开发工作台/944-1.1.25.md
new file mode 100644
index 0000000..7d17631
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/944-1.1.25.md
@@ -0,0 +1,34 @@
+---
+front: https://nie.res.netease.com/r/pic/20241204/2be8612f-e92e-4324-9102-82b59dbf186c.jpg
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+
+
+# 2024.12.5 版本1.1.25
+
+## 作品管理
+
+1. 作品标签支持拖动排序。
+
+
+
+2. 作品导出配置优化,移除无用文件:导出附加包时,移除world_behavior_packs.json,world_icon.jpeg,world_resource_packs.json等文件。导出地图时,移除level.dat_old,world_icon.jpeg等文件。
+
+
+
+
+
+## 工具箱
+
+1. 工具箱新增安装sdk补全库功能。
+
+
+
+
+
+## 其他
+
+1. 修复账号注销后Mod标签消失的问题。
diff --git a/mcguide/10-新内容/1-开发工作台/945-1.1.24.md b/mcguide/10-新内容/1-开发工作台/945-1.1.24.md
new file mode 100644
index 0000000..19b28ed
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/945-1.1.24.md
@@ -0,0 +1,40 @@
+---
+front: https://nie.res.netease.com/r/pic/20241120/c1626194-9cfd-4cde-99ca-d95a83b20ac6.jpg
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+
+
+# 2024.11.21 版本1.1.24
+
+## 作品管理
+
+1. 云端列表新增试玩模组角标展示。
+
+
+
+2. 新增默认作品标签“未分类”。
+
+
+
+
+
+## 界面编辑
+
+1. StackPanel支持为其子控件的size设置fill属性。详情可参考[UI说明文档](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/18-界面与交互/30-UI说明文档.html)。
+
+
+
+
+
+## 属性编辑
+
+1. 物品icon贴图支持选择textures目录下的任意贴图。
+
+
+
+2. 新建物品、方块,默认勾选“游戏内名字”、“创造栏显示”特性。
+
+
diff --git a/mcguide/10-新内容/1-开发工作台/946-1.1.22.md b/mcguide/10-新内容/1-开发工作台/946-1.1.22.md
new file mode 100644
index 0000000..941ac5e
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/946-1.1.22.md
@@ -0,0 +1,22 @@
+---
+front: https://nie.res.netease.com/r/pic/20241106/43011801-73e9-46d4-b9e0-b75e233e2faa.jpg
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+
+
+# 2024.11.06 版本1.1.22
+
+## 界面编辑器
+
+1. 新增颜色渐变控件gradient_renderer,支持渐变效果UI。详情参考[UI说明文档](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/18-界面与交互/30-UI说明文档.html)。
+
+
+
+## 资源管理器
+
+1. 删除逻辑优化,改为移动到回收站。
+
+
diff --git a/mcguide/10-新内容/1-开发工作台/947-1.1.21.md b/mcguide/10-新内容/1-开发工作台/947-1.1.21.md
new file mode 100644
index 0000000..c1d7108
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/947-1.1.21.md
@@ -0,0 +1,27 @@
+---
+front: https://nie.res.netease.com/r/pic/20241022/133cc440-90eb-4c50-8ffa-bfb37d751855.jpg
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+
+
+# 2024.10.24 版本1.1.21
+
+## 界面编辑器
+
+1. 新增显示原生UI勾选框,支持显示原生UI效果。
+
+
+
+## 逻辑编辑器
+
+1. 蓝图节点选中状态特殊边框表现效果优化。
+2. 蓝图节点引脚图标优化,引脚展示效果随连接状态变化。
+
+
+
+## 其他
+
+1. 修复了3.0ModPC包中,动态加载实体交易表失效问题。
diff --git a/mcguide/10-新内容/1-开发工作台/948-1.1.20.md b/mcguide/10-新内容/1-开发工作台/948-1.1.20.md
new file mode 100644
index 0000000..8aa0c26
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/948-1.1.20.md
@@ -0,0 +1,195 @@
+---
+front: https://nie.res.netease.com/r/pic/20241008/4c4536cb-61fc-4de6-9fd0-8752d98e9ebe.jpg
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+
+
+# 2024.10.10 版本1.1.20
+
+## 配置编辑
+
+1. 补充了升级版本后,编辑器中缺失的一些实体配置条目,添加了以下81个新组件。
+
+ - minecraft:admire_item
+
+ - minecraft:anger_level
+
+ - minecraft:area_attack
+
+ - minecraft:attack_cooldown
+
+ - minecraft:barter
+
+ - minecraft:behavior.admire_item
+
+ - minecraft:behavior.avoid_block
+
+ - minecraft:behavior.barter
+
+ - minecraft:behavior.celebrate
+
+ - minecraft:behavior.celebrate_survive
+
+ - minecraft:behavior.croak
+
+ - minecraft:behavior.defend_trusted_target
+
+ - minecraft:behavior.dig
+
+ - minecraft:behavior.drink_milk
+
+ - minecraft:behavior.eat_carried_item
+
+ - minecraft:behavior.eat_mob
+
+ - minecraft:behavior.emerge
+
+ - minecraft:behavior.equip_item
+
+ - minecraft:behavior.fertilize_farm_block
+
+ - minecraft:behavior.find_cover
+
+ - minecraft:behavior.go_and_give_items_to_noteblock
+
+ - minecraft:behavior.go_and_give_items_to_owner
+
+ - minecraft:behavior.hold_ground
+
+ - minecraft:behavior.investigate_suspicious_location
+
+ - minecraft:behavior.jump_to_block
+
+ - minecraft:behavior.move_outdoors
+
+ - minecraft:behavior.move_to_block
+
+ - minecraft:behavior.move_to_lava
+
+ - minecraft:behavior.move_to_liquid
+
+ - minecraft:behavior.move_towards_dwelling_restriction
+
+ - minecraft:behavior.move_towards_home_restriction
+
+ - minecraft:behavior.nap
+
+ - minecraft:behavior.nearest_prioritized_attackable_target
+
+ - minecraft:behavior.play_dead
+
+ - minecraft:behavior.ram_attack
+
+ - minecraft:behavior.random_hover
+
+ - minecraft:behavior.random_look_around_and_sit
+
+ - minecraft:behavior.rise_to_liquid_level
+
+ - minecraft:behavior.roar
+
+ - minecraft:behavior.sniff
+
+ - minecraft:behavior.sonic_boom
+
+ - minecraft:behavior.stalk_and_pounce_on_target
+
+ - minecraft:behavior.stay_near_noteblock
+
+ - minecraft:behavior.stroll_towards_village
+
+ - minecraft:behavior.swim_idle
+
+ - minecraft:behavior.swim_with_entity
+
+ - minecraft:behavior.work_composter
+
+ - minecraft:block_climber
+
+ - minecraft:block_sensor
+
+ - minecraft:boss
+
+ - minecraft:buoyant
+
+ - minecraft:celebrate_hunt
+
+ - minecraft:combat_regeneration
+
+ - minecraft:conditional_bandwidth_optimization
+
+ - minecraft:custom_hit_test
+
+ - minecraft:drying_out_timer
+
+ - minecraft:entity_sensor
+
+ - minecraft:equip_item
+
+ - minecraft:exhaustion_values
+
+ - minecraft:experience_reward
+
+ - minecraft:flocking
+
+ - minecraft:game_event_movement_tracking
+
+ - minecraft:group_size
+
+ - minecraft:grows_crop
+
+ - minecraft:heartbeat
+
+ - minecraft:home
+
+ - minecraft:hurt_on_condition
+
+ - minecraft:inside_block_notifier
+
+ - minecraft:instant_despawn
+
+ - minecraft:is_pregnant
+
+ - minecraft:mob_effect
+
+ - minecraft:movement.hover
+
+ - minecraft:movement_sound_distance_offset
+
+ - minecraft:navigation.hover
+
+ - minecraft:out_of_control
+
+ - minecraft:physics
+
+ - minecraft:pushable
+
+ - minecraft:suspect_tracking
+
+ - minecraft:trail
+
+ - minecraft:variable_max_auto_step
+
+ - minecraft:vibration_damper
+
+
+
+2. 现在在关卡编辑器中对方块配置进行修改之后,重载地图之后就可以实时生效(在地图编辑器中的材质选择界面中出现),无需再重启编辑器了。
+
+
+
+
+
+## 启动器工程组件记录
+
+1. 开发者启动器的编辑地图界面中,会记录当前地图使用的附加包和材质光影信息,每次打开此界面时,启用的内容将会自动被勾选。
+
+
+
+## 其他
+
+1. 逻辑编辑器中,补充了3.0SDK的相关节点内容。
+2. 修复了3.0PC包中,使用联机地图创建多人房间后关闭游戏时的崩溃问题。
diff --git a/mcguide/10-新内容/1-开发工作台/949-1.1.19.md b/mcguide/10-新内容/1-开发工作台/949-1.1.19.md
new file mode 100644
index 0000000..da5d77a
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/949-1.1.19.md
@@ -0,0 +1,35 @@
+---
+front: https://nie.res.netease.com/r/pic/20240904/128beae6-ecef-43e6-88b0-d0b009739499.jpg
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2024.9.5 版本1.1.19
+
+## 地图编辑器
+
+1. 地图编辑器基础操作优化,新增智能识别物体功能,快速框选建筑结构,生成指定包围盒。
+
+
+
+2. 保存结构时,现在可以记住上次的配置。例如:勾选 **去除空气** 并记住该配置后,下次保存结构时无需重复选择同类选项。减少重复操作,提升开发效率。
+
+
+
+
+
+## 配方配置功能更新
+
+1. 配方保存逻辑优化,去除了应用按钮,调整配方时,点击清空/确定后自动保存配方内容。
+
+
+
+
+
+## 其他
+
+1. 修复设备名称出现中文或特殊字符时,新版调试工具无法连接的问题。
+1. 编辑器内嵌游戏、ModPC升级到64位包体。
+1. 修复自定义方块配置中,方块实体组件的tips描述错误的问题。
+1. 修复游戏模式下部分快捷键会触发编辑器对应功能的问题。
diff --git a/mcguide/10-新内容/1-开发工作台/950-1.1.17.md b/mcguide/10-新内容/1-开发工作台/950-1.1.17.md
new file mode 100644
index 0000000..b137ed4
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/950-1.1.17.md
@@ -0,0 +1,36 @@
+---
+front: https://nie.res.netease.com/r/pic/20240821/4b503721-081d-4c43-a32a-4d06fe350422.jpg
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2024.8.22 版本1.1.17
+
+## 关卡编辑器
+
+1. 自定义方块碰撞盒支持以数组为形式的实体碰撞盒与射线碰撞盒
+
+
+
+
+
+## 调试工具
+
+1. 在调试输出界面中增加报错信息跳转机制,点击报错信息直接打开对应的代码文件。
+
+ ::: danger 注意
+
+ 需要开发测试或编辑器内启动ModPC开发包,直接启动ModPC开发包或在开发测试过程切换存档会导致跳转失败。
+
+ :::
+
+
+
+
+
+## 其他
+
+1. 修复关卡编辑器编辑硬度属性导致游戏报错的问题。
+1. 修复修复自定义方块贴图写入错误的问题。
+1. 修复测试存档数据丢失的问题。
diff --git a/mcguide/10-新内容/1-开发工作台/951-1.1.16.md b/mcguide/10-新内容/1-开发工作台/951-1.1.16.md
new file mode 100644
index 0000000..6763ab0
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/951-1.1.16.md
@@ -0,0 +1,35 @@
+---
+front: https://nie.res.netease.com/r/pic/20240807/b84424e1-7ff1-49ec-9fe2-f549693d2170.jpg
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2024.8.8 版本1.1.16
+
+## 自定义编辑器快捷键
+
+
+
+1. 作品设置新增快捷键分页,包含7组快捷键:全局、关卡、预设、地图、界面、特效、逻辑。
+2. 支持修改、清除、重置快捷键,并及时反馈到编辑器内对应的功能入口。
+3. 保存与加载:快捷键设置在同一台电脑上共享。
+4. 冲突检测:全局快捷键会检测所有快捷键,其余各编辑器内仅检测全局和当前编辑器的快捷键。
+5. 启动检测:编辑器启动时检测所有快捷键是否存在冲突,有冲突时将弹窗提示,关闭弹窗后将自动打开 **作品设置** 并跳转至 **快捷键** 分页。
+
+
+
+
+
+## 地图编辑器
+
+1. 地形植被工具添加新版本的植树特征,含樱花树、红树及其变种等。
+
+
+
+## 其他
+
+1. 修复MC Studio无法自测认证的问题
+2. 补充逻辑编辑器新版接口翻译。
+3. 修复地图编辑器无法撤回已放置的杜鹃花叶、盛开的杜鹃花叶、樱花树叶与红树树叶等问题。
+4. 修复地图编辑器复制方块可能随机丢失选取方块的问题。
diff --git a/mcguide/10-新内容/1-开发工作台/952-1.1.13.md b/mcguide/10-新内容/1-开发工作台/952-1.1.13.md
new file mode 100644
index 0000000..481027c
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/952-1.1.13.md
@@ -0,0 +1,69 @@
+---
+front: https://nie.res.netease.com/r/pic/20240723/795e8036-1921-436c-b474-e58a9d260812.png
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2024.7.25 版本1.1.13
+
+
+
+## 关卡编辑器
+
+1. **布局优化** : **作品** 入口与下拉选单功能现已合并至 **关卡编辑器** 二级工具栏的 **作品设置** 中。也可以在 **关卡编辑器** 、 **预设编辑器** 与 **地图编辑器** 的预览窗右上方点击 **设置** 进入。
+
+- **旧** :
+
+- **新** :
+
+ 
+
+2. **作品设置** :
+
+ 1. 现在可以一键修改并同步 **内嵌游戏** 、 **编辑器内运行游戏** 与 **实际作品** 的作弊模式选项与游戏设置选项。不包括开发测试。
+
+ 部分设置与模式在编辑器内嵌游戏中不会生效,但会在游戏自测、作品导出或上传至开发者平台生效。
+
+ ::: danger 注意
+
+ 作弊模式选项与游戏设置选项页签目前仅在地图的作品设置面板中显示。
+
+ :::
+
+ 
+
+ 2. **命名空间** 修改后,无需再次进行确认。如果新导入的作品已经有了命名空间,系统会自动读取已存在的命名空间。如果作品有多个附加包,系统会随机选取其中一个附加包的命名空间作为作品的命名空间。
+
+ 
+
+ 3. **内嵌游戏** 、**其他** 功能保留不变。
+
+
+
+
+## 地图编辑器
+
+1. **基础操作优化** :
+
+ 1. **选取模式** 支持框选单个区域后直接框选下个区域。另外,点击空气区域现在即可取消上次选区的包围盒。减少步骤操作,提升操作体验。
+
+ 
+
+ 2. **选取模式** 下右键包围盒即可快速保存结构或素材。取消原先保存结构和素材的冗余操作。
+
+ 
+
+ 3. **编辑模式** 下,现在放置的素材与结构可以直接应用旋转、缩放与镜像操作。
+
+ 
+
+ 4. **编辑模式** 的包围盒显示为黄色,提升视觉反馈。
+ 5. 生成后保留编辑过的选取包围盒,方便进行二次编辑。
+ 6. **编辑模式** 快捷键由`Crtl+K`更换至`Q`。
+
+
+
+## 其他
+
+1. 修复了在地图编辑器中保存结构时,勾选【去除空气选项】无效的问题。
diff --git a/mcguide/10-新内容/1-开发工作台/953-1.1.12.md b/mcguide/10-新内容/1-开发工作台/953-1.1.12.md
new file mode 100644
index 0000000..bd44388
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/953-1.1.12.md
@@ -0,0 +1,40 @@
+---
+front: https://nie.res.netease.com/r/pic/20240710/00b1bbb0-3feb-4b3e-807a-42efe2edb40b.jpg
+hard: 入门
+time: 5分钟
+selection: 23
+---
+
+# 2024.7.10 版本1.1.12
+
+
+
+## 关卡编辑器
+
+1. **预设配置文件** :优化关卡编辑器`preset.json`的数据结构,由一行格式转换为多行格式,提高可读性的同时,避免了多人协作过程中提交冲突的情况,提升多人协作效率。
+
+
+
+
+
+
+
+## 特效编辑器
+
+1. **时间轴:** timeline最大时长扩展至50秒,同时切换动作时将根据动作的播放时长自适应调整时间轴,提高动作制作上限,优化用户体验。
+
+
+
+
+
+## ModPC开发包
+
+1. **BUG修复:** 修复UI界面update函数每秒执行次数不足30次的问题。
+
+
+
+
+
+## 其他
+
+1. **1.20.1Java版客户端外放** :现在可以自测并提审47.3.0(Forge版本)及以上的Java作品。
diff --git a/mcguide/10-新内容/1-开发工作台/954-1.1.11.md b/mcguide/10-新内容/1-开发工作台/954-1.1.11.md
new file mode 100644
index 0000000..21e0b48
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/954-1.1.11.md
@@ -0,0 +1,40 @@
+---
+front: https://nie.res.netease.com/r/pic/20240619/2baa0e0c-8a8f-4ae4-81c8-2d6a288a0dce.jpg
+hard: 入门
+time: 5分钟
+selection: 23
+---
+
+# 2024.6.20 版本1.1.11
+
+
+
+## 实体预设新增
+
+1. 添加悦灵、监守者实体预设。现在您可以复用悦灵、监守者的内容创建自定义实体,亦或是覆写原有的实体资源和行为。
+
+ > 由于原生游戏的限制,自定义实体无法复用骆驼、嗅探兽的部分原版组件。我们在本次更新中暂时屏蔽了这两种实体的预设模板。将在未来整包更新时放出。
+
+
+
+
+
+## 地图编辑器
+
+1. 方块材质库补充了1.19到1.20.10的新方块。
+
+
+
+
+
+## 界面编辑器
+
+1. 现在按下Del键删除控件名称不会再一并删除UI控件。
+
+
+
+
+
+## 其他
+
+1. 其他体验优化和问题修复
diff --git a/mcguide/10-新内容/1-开发工作台/955-1.1.8.md b/mcguide/10-新内容/1-开发工作台/955-1.1.8.md
new file mode 100644
index 0000000..c5e713b
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/955-1.1.8.md
@@ -0,0 +1,79 @@
+---
+front: https://nie.res.netease.com/r/pic/20240114/12069454-01dc-4b70-8614-f1398bd9f0f8.png
+hard: 入门
+time: 5分钟
+selection: 23
+---
+# 2024.4.11 版本1.1.8
+
+## AI知识助理迭代
+1. 支持指定搜索范围。
+2. 支持流式返回,提高返回速度。
+3. 支持保留最近三次对话连续问答。
+4. 支持渲染代码块和一键复制。
+5. 返回参考链接带上锚点,更精准的指向目标文章的目标段落。
+
+详情参考[AI知识助理](../../12-入门教程/25-AI知识助理.md#进阶用法)。
+
+
+
+## 内容库全新升级
+1. 合并资源包、作品模板、其他三个分页,提高搜索效率。
+2. 搜索功能支持搜索详情页文字。
+3. 增加收藏功能,标记你最需要的资源。
+4. 新增评分功能,为你喜欢的资源打个满分吧!
+5. 增加下载量的显示,了解最受开发者欢迎的资源。
+6. 增加排序功能,支持按照下载量,评分和更新时间排序。
+
+详情参考[内容库](../../15-资源管理/11-内容库.md)。
+
+
+
+
+
+
+
+## 启动器组件管理优化
+1. 支持标签管理
+你是否在为组件库中上百个作品烦恼,现在组件库支持为作品打上标签,支持按照标签筛选功能,快来为你的组件分类管理吧!
+
+
+
+
+2. 支持批量删除组件
+现在在组件库的右上角新增批量删除功能,点击后,你可以快速查看和删除所有本地作品!
+> 注意:删除操作不可撤销,请谨慎操作!
+
+
+
+
+
+## 新增天空盒零件
+1. 编辑器新建文件向导中,新增了天空盒零件,支持在编辑器中快速设置和调试天空盒相关参数,如雾气颜色,范围,天空颜色,贴图等等,详情参考[天空盒零件](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/11-内置零件/07-天空盒零件.md)。
+
+
+
+## 支持新建材质及模板
+新建文件向导新增材质,可选择指定模板快速创建对应材质。
+
+
+
+
+## 其他
+
+1. 地图编辑器右下角的玩家位置从头部位置修改为脚底坐标
+
+
+
+
+2. 地图编辑器小地图支持显示选中位置的生物群系
+
+
+
+
+
+3. 方块配置支持配置最大堆叠数和燃烧时长,详见[自定义方块](../../20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.md)。
+
+
+
+
diff --git a/mcguide/10-新内容/1-开发工作台/956-1.1.7.md b/mcguide/10-新内容/1-开发工作台/956-1.1.7.md
new file mode 100644
index 0000000..36c4529
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/956-1.1.7.md
@@ -0,0 +1,66 @@
+---
+front: https://nie.res.netease.com/r/pic/20240114/12069454-01dc-4b70-8614-f1398bd9f0f8.png
+hard: 入门
+time: 5分钟
+selection: 23
+---
+# 2024.1.18 版本1.1.7
+## AI知识助理开启beta测试!
+我的世界开发工作台全新推出AI知识助理,它是一个基于大模型训练的生成式AI问答助手,熟知开发者官网内的所有文档,你可以向它询问任意模组开发的问题,它会竭尽所能为你一一解答,详情请参考[AI知识助理使用文档](../../12-入门教程/25-AI知识助理.md)。
+
+
+
+
+
+## 特效编辑器
+
+1. 支持显示和修改steve(史蒂夫)的皮肤贴图,可参考[这篇文档](../../16-美术/9-特效/50-预览功能.md#修改和预览steve皮肤贴图),如图所示
+
+
+
+2. 骨骼模型和bb模型支持右键删除指定动作,可参考[这篇文档](../../16-美术/9-特效/10-模型导入.md#5删除单个模型动作),如图所示:
+
+
+
+3. 支持显示某个骨骼动画的关键帧信息,可参考[这篇文档](../../16-美术/9-特效/50-预览功能.md#预览模型动画关键帧信息),如图所示:
+
+
+
+4. 支持调整和预览窗口分辨率,可参考[这篇文档](../../16-美术/9-特效/50-预览功能.md#调整预览窗口的分辨率),如图所示:
+
+
+
+
+## 关卡编辑器
+1. 方块配置新增方块实体的客户端tick字段,字段含义可参考[自定义方块实体](../../20-玩法开发/15-自定义游戏内容/2-自定义方块/4-自定义方块实体.md#添加自定义方块实体),如图所示:
+
+
+
+
+
+## 界面编辑器
+1. 原版纸娃娃和网易纸娃娃控件支持【超出父控件区域后是否裁剪】属性,属性含义可参考[UI控件说明文档](../../18-界面与交互/30-UI说明文档.md#paperdoll),如下图所示:
+
+> 注意,该属性需要父控件开启裁剪内容(clip_children)选项方可生效。
+
+
+
+## 逻辑编辑器
+1. 延迟节点支持修改参数类型,如下图:
+
+
+
+## 其他
+
+1. 支持编辑器设置fov并保持各子编辑器fov一致。
+
+> 关卡、预设、地图编辑器修改位置
+>
+> 
+>
+> 特效编辑器修改位置:
+> 
+
+2. 物品配置的贴图属性支持递归搜索子文件夹的贴图。
+3. 资源管理器筛选功能仅针对左侧选中目录生效。
+4. Apollo引擎版本选择按照版本号排序。
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/957-1.1.4.md b/mcguide/10-新内容/1-开发工作台/957-1.1.4.md
new file mode 100644
index 0000000..81d7ade
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/957-1.1.4.md
@@ -0,0 +1,56 @@
+---
+front: https://nie.res.netease.com/r/pic/20231115/cdd80319-3ec4-422f-abbb-0f4e8a597fbd.png
+hard: 入门
+time: 5分钟
+selection: 23
+---
+
+# 2023.11.16 版本1.1.4
+
+
+## 关卡编辑器
+方块配置-自定义箱子组件增加是否被实心方块阻挡字段,详见[方块配置](../../20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.md#netease-block-chest)。
+
+
+
+## 特效编辑器
+
+1. 编辑器新增重载材质按钮,修改shader或材质文件后,可以点击该按钮进行重载刷新,详见[重载材质](../../16-美术/9-特效/10-模型导入.md#3-重载材质),如下图:
+
+
+
+
+2. 支持骨骼模型主副手手持物品的绑定到指定骨骼,详见[预览手持物品绑定](../../16-美术/9-特效/50-预览功能.md#预览手持物品绑定位置)。
+
+
+
+
+3. 支持一次性导入多个骨骼模型动作,可以直接多选fbx动作文件,如下图:
+
+
+
+4. 支持配置骨骼模型多pass材质,详见[配置多pass材质](../../16-美术/9-特效/10-模型导入.md#配置多pass材质)。
+
+
+
+
+## 资源管理器
+
+资源管理器现在支持在完整模式下切换当前编辑的行为包和资源包了。
+
+
+> 注意:切换编辑包体会影响文件创建、导入、保存的初始路径。
+
+
+
+
+## 逻辑编辑器
+
+新增延迟节点和字符串转义节点
+
+
+
+
+## 其他
+1. 优化了网络服分页的加载速度。
+2. 修复了编辑器更新时文件占用的异常问题。
diff --git a/mcguide/10-新内容/1-开发工作台/958-1.1.2.md b/mcguide/10-新内容/1-开发工作台/958-1.1.2.md
new file mode 100644
index 0000000..78d5d9e
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/958-1.1.2.md
@@ -0,0 +1,61 @@
+---
+front: https://nie.res.netease.com/r/pic/20230904/612c4203-ab6f-4f23-807e-ebf2f4086bf1.png
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2023.09.07 版本1.1.2
+
+# 界面编辑器
+1. 图片控件支持配置旋转角度和旋转锚点,详情参考[图片控件属性](../../18-界面与交互/30-UI说明文档.md#image)。
+
+
+
+
+# 关卡编辑器
+1. 方块配置支持颜色渐变图(colormap),可让一个方块在不同维度的不同群系叠加不同的颜色,详情参考[自定义方块群系颜色](../../20-玩法开发/15-自定义游戏内容/2-自定义方块/2-功能.md#自定义方块及自定义方块模型的群系颜色)
+
+> 配置示例:
+
+
+> 效果:
+
+
+
+2. 物品配置支持盔甲韧性和击退抗性,属性请参考[自定义盔甲](../../20-玩法开发/15-自定义游戏内容/1-自定义物品/3-自定义盔甲.md#json组件)
+
+
+
+
+# 特效编辑器
+
+1. 支持导入材质
+
+
+
+
+2. 中国版粒子特效支持自定义材质
+
+> 注意,不同类型的着色器(shader)可能不支持用于中国版粒子特效,请参考[内置材质清单](../../16-美术/7-材质与着色器/2-内置材质清单.md#particles-material-材质文件)使用着色器。
+
+
+
+
+
+
+3. 支持骨骼模型的挂点快捷偏移到包围盒的各面中心点,详情参考[骨骼模型挂点偏移](../../16-美术/9-特效/10-模型导入.md#3骨骼模型挂点偏移),如图所示:
+
+
+
+
+
+4. 支持骨骼模型更换材质,包括模型整体的材质和按照骨骼分别配置材质,详情参考[骨骼模型的使用](../../16-美术/6-模型和动作/04-骨骼模型的使用.md)
+
+
+
+
+# 启动器
+内容库资源展示列表改为按照分页展示,如图所示:
+
+
diff --git a/mcguide/10-新内容/1-开发工作台/959-1.1.0.md b/mcguide/10-新内容/1-开发工作台/959-1.1.0.md
new file mode 100644
index 0000000..6a070af
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/959-1.1.0.md
@@ -0,0 +1,74 @@
+---
+front: https://nie.res.netease.com/r/pic/20230626/b2a4745a-0348-4e1c-8d36-dc3eec5abc44.png
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2023.06.27 版本1.1.0
+
+## 性能监测工具
+启动器→工具箱新增一个性能监测工具,用于帮助开发者监测开发包运行时的实时帧率、内存、CPU占用等性能指标,帮助开发者评估模组的性能情况,详情使用请参考文档[性能监测工具](../../30-测试/5-性能监测与调试工具.md)。
+> 该工具仅支持在2.7稳定版及以上的ModPC开发包使用,不支持低版本或者上线测试的正式客户端。
+
+
+
+## 特效编辑器
+1. 中国版粒子新增拖尾属性,支持配置粒子拖尾效果,具体属性详情参考[中国版粒子拖尾属性](../../16-美术/9-特效/70-中国版特效属性详细说明.md#粒子拖尾效果属性说明)。
+
+
+
+2. 中国版粒子特效新增实例属性,用于在场景中实时地编辑粒子的发射路径,详情参考[中国版粒子发射路径](../../16-美术/9-特效/70-中国版特效属性详细说明.md#tips如何可视化编辑发射路径)。
+
+
+
+3. 中国版粒子支持随机发射间隔和摄像机偏移量
+
+
+
+4. 序列帧和粒子特效的动态属性栏默认展开,不再自动收起。
+
+
+## 关卡编辑器
+1. 添加属性窗口支持鼠标悬浮提示。
+
+
+
+2. 部分配置ICON更新。
+
+
+
+3. 自定义书本支持展示全部配套的目录和章节文件。
+
+
+
+4. 方块配置支持五个自定义特殊方块的字段,如自定义工作台、自定义箱子等等,详情参考[方块配置](../../20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.md#neteaseblockrandomoffset)。
+
+
+
+
+
+## 地图编辑器
+1. 新增拼图方块笔刷与大型结构地形工具,用于帮助开发者快速配置自定义大型特征的结构,详情参考[自定义大型特征](../../20-玩法开发/15-自定义游戏内容/4-自定义维度/6-自定义大型特征.md)。
+
+
+
+
+
+2. 小地图功能支持自定义绘制高度。
+
+
+
+> 注意:范围[-60,320],默认为0代表当前区块最高高度。
+
+3. 编辑工具的旋转和伸缩新增应用按钮,需点击按钮才能生效。
+
+
+
+## 界面编辑器
+
+1. 新增轮盘控件,支持开发者自定义轮盘内径、外径、切片数量等属性,详情使用请参考[轮盘控件](../../18-界面与交互/10-控件和控件属性.md#控件简介)。
+
+
+
+2. 界面编辑器的点击面板控件新增【是否吞噬点击事件】属性。
diff --git a/mcguide/10-新内容/1-开发工作台/960-1.0.32.md b/mcguide/10-新内容/1-开发工作台/960-1.0.32.md
new file mode 100644
index 0000000..4815fcb
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/960-1.0.32.md
@@ -0,0 +1,83 @@
+---
+front: https://nie.res.netease.com/r/pic/20230526/4620bdd0-d50d-43b2-bb07-72672a7f1fa6.png
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2023.05.30 版本1.0.32
+
+## 内容库支持开发者平台投稿
+1. 内容库现已支持在开发者平台进行提审和上架发布,目前正在限量测试中,我们将会尽快优化体验,开放给所有开发者使用,感谢您的耐心等待!
+2. 内容库新增【我的资源】分页,用于存放开发者账号投递的内容库资源,可以类比为基岩版组件的云端测试分页。
+
+对于内容库投递相关问题可以参考文档[内容库投递指南](../../35-上架与入驻/课程15-内容库资源投递指南.md)。
+
+
+
+## 作品默认使用新版编辑器启动
+从本版本开始,我们将不包含旧版特有组件的所有作品都默认识别为新版作品,默认使用新版编辑器打开,旧版编辑器已不再进行功能更新和维护,请开发者使用新版编辑器进行模组开发。
+> 如需使用旧版编辑器打开特定作品,可在作品的配置界面修改该作品的编辑器版本,如下图:
+
+
+
+
+## 启动器优化
+1. 开发测试界面支持完整的作弊选项
+将原有的作弊复选框修改为【作弊选项】按钮,开发者可以在此定义游戏内的所有作弊选项,方便设置测试环境,如下图:
+
+
+
+2. 地图类的测试存档支持转为新作品,开发者可以将在测试时的微调保存到一个新作品副本中,如下图:
+
+
+
+
+## 关卡编辑器
+1. 交易表补充了最大交易次数、是否奖励经验、交易员经验三个属性,如下图:
+
+
+
+2. 自定义维度配置中的群系源属性支持列表的移动和插入操作,如下图:
+
+
+
+3. 新增自定义书本配置,关于自定义书本,可以参考[自定义书本](../../20-玩法开发/15-自定义游戏内容/5-自定义书本/01-自定义基础书本.md)。
+
+
+
+
+> 受限于书本配置结构,无法自动识别此前已存在的书本配置,开发者需要在书本的每个json内新增一个`editor_identifier`字段,并将值统一写为改书本的最外层文件夹名称,即可被编辑器正常识别,如下图:
+
+
+
+1. 新增大型特征生成和结构池配置,用于支持自定义大型特征的生成,详情参考[自定义大型结构特征](../../20-玩法开发/15-自定义游戏内容/4-自定义维度/6-自定义大型特征.md)
+
+
+
+
+> 目前对于拼图方块的编辑仅支持通过give指令获取,并在地图编辑器的游戏模式下进行填写,我们将在后续更新2.7稳定包时,在地图编辑器支持通过笔刷的方式放置结构池和拼图方块,敬请关注!
+```
+指令:
+/give @s jigsaw 64
+```
+## 地图编辑器
+1. 小地图界面支持导出为图片、支持隐藏区块线框,如下图:
+
+
+
+2. 镜头设置增加视野(fov)和鼠标灵敏度属性
+
+
+
+3. 保存切分结构覆盖问题优化,现在不会出现覆盖未生效的问题。
+
+
+
+
+
+## 其他优化
+1. 取色器按钮取色时将其按钮选中。
+2. 方块配置新增侧面贴图属性,支持只配置上、下、侧面三张贴图。
+3. 优化了导入作品时的选项记忆功能。
+4. 优化了界面编辑器的控件截图体验。
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/961-1.0.30.md b/mcguide/10-新内容/1-开发工作台/961-1.0.30.md
new file mode 100644
index 0000000..3c897e5
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/961-1.0.30.md
@@ -0,0 +1,62 @@
+---
+front: https://nie.res.netease.com/r/pic/20230425/bdce5df6-b35b-465c-abf1-ff531c36e97b.png
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2023.05.04 版本1.0.30
+## 地图编辑器替换窗口支持同类方块合并替换
+选取地图结构并替换时,自动合并同类不同状态方块,点击左侧展开按钮即可展开。
+1. 选中总类别方块进行替换时,则替换全部状态的同类方块。
+2. 选中子类别方块进行替换时,则只替换该状态值的方块。
+
+
+
+
+## 界面编辑器
+
+1. 颜色属性支持通过屏幕进行取色。
+2. 控件的位移,尺寸属性支持小数。
+
+## 云端列表优化
+1. 云端列表作品的最近修改时间固定为云端资源更新时间。
+2. 本地的云端作品更多菜单支持重新下载选项。
+3. 本地的云端作品有更新时通过角标提示更新。
+
+
+## 方块配置更新
+1. 新增了自定义含雪、含水方块的字段。
+2. 新增了配套文件【方块列表属性】,即资源包下的block.json,并将原有的自定义模型、剩余、贴图、贴图随机旋转等选项,一般迁移至方块列表属性下。
+3. 新增实体模型、粒子特效、序列帧特效、颜色渐变图、交叉物品模型和贴图等字段。
+
+
+
+## 配置增加数据模板
+1. **生物群系设置**:新增群系高度实现空岛示例模板。
+2. **特征生成配置**:新增主世界平原生成特征模板。
+3. **附魔配置**:新增稀有稿附魔模板。
+4. **音效配置**:新增自定义创造模式音乐模板。
+5. **自定义维度配置**:新增群系源节点示例模板。
+6. **成就配置**:新增根节点与非根节点示例模板。
+7. **方块配置**:新增红石源、红石元器件示例模板。
+
+
+
+## 其他
+1. Apollo网络服支持设置game服的人数。
+2. 实体配置勾选【自然生成属性】时,自动设置生物蛋的中文名称为游戏内名称。
+3. 附魔配置的右键菜单新增【预览设置】,支持设置预览时生成的附魔等级。
+
+
+
+4. 地图编辑器退出游戏模式时,不再重置编辑器的窗口布局。
+5. 附加包更多菜单→转换为地图时,支持选择已有地图存档。
+
+
+
+6. 逻辑编辑器的连接字符串节点增加默认输入参数。
+7. 新建插件支持开服工具2.0的客户端Mod。
+8. Mod PC包支持聊天优化,如下图,在开发者启动器的设置 - Mod PC开发包中可以找到“是否开启聊天优化”的选项,勾选表示启用聊天优化。我们建议您开启聊天优化进行模组测试。
+
+
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/962-1.0.29.md b/mcguide/10-新内容/1-开发工作台/962-1.0.29.md
new file mode 100644
index 0000000..f87126d
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/962-1.0.29.md
@@ -0,0 +1,27 @@
+---
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2023.04.18 版本1.0.29
+## 地图编辑器结构分页优化
+素材库的结构分页支持直接放置切分信息的json文件从而放置整个结构,并通过**显示切分子结构**复选框隐藏掉切分后的子结构。
+
+
+
+
+## 支持配置微软粒子发射骨骼模型
+在特效编辑器的原版粒子特效中,新增支持了发射骨骼模型的配置属性,并且支持右键快速预览,如下图:
+
+
+
+
+## 云端列表支持作品ID搜索
+在云端列表支持了按照完整作品ID搜索的功能,如下图:
+
+
+
+
+## 其他
+1. 作品创建界面,选择**超平坦**时禁用**世界种子**选项。
diff --git a/mcguide/10-新内容/1-开发工作台/963-1.0.28.md b/mcguide/10-新内容/1-开发工作台/963-1.0.28.md
new file mode 100644
index 0000000..1135e07
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/963-1.0.28.md
@@ -0,0 +1,57 @@
+---
+front: https://nie.res.netease.com/r/pic/20230404/b2c56f26-072e-4287-a79a-a78d6470ee2b.png
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2023.04.06 版本1.0.28
+## 配置编辑优化
+1. 部分配置支持快捷预览
+点击配置条目右侧的快捷按钮,可快速在ModPC包进行预览和测试,详见[这篇文档](../../20-玩法开发/11-组装简单玩法/0-关卡编辑器.md)。
+
+
+
+
+2. 配置数据模板支持导入导出
+部分配置的数据模板支持导出为dt文件,并在其他作品中导入复用,详见[这篇文档](../../15-资源管理/13-配置数据模板.md)。
+
+
+
+3. 配置属性面板新增筛选器
+
+配置属性面板新增筛选器,可以筛选当前配置的一级属性,如下图:
+
+
+
+4. 配置面板支持多种排序规则
+
+
+
+5. 配置属性面板支持记忆当前进度条所在位置。
+
+## 地图编辑器支持替换全部状态值
+当开发者需要替换不同状态的同类方块(如藤曼,楼梯),勾选此选项,即可将不同状态的同类方块聚合成同一个选项,开发者可以批量替换此类方块。
+
+
+
+当开放需要单独替换某个状态的某一类方块(红色羊毛),则只需取消勾选此选项,即可单独指定每个状态的方块的替换目标。
+
+
+
+
+
+## 导入组件功能优化
+1. 统一导入各类型本地组件的交互界面,并自动扫描并判断组件类型。
+
+2. 当选择类型和导入组件不匹配时,弹窗提示。
+
+
+
+## 其他
+
+1. 启动编辑器加载引擎时禁用地形编辑器的游戏模式。
+2. 优化了原版模型转换工具无法正常转换某些动画和贴图的问题。
+3. 内容库其他类型资源下载交互优化。
+4. 开服工具2.0服务器支持提升Mod版本。
+5. 蓝图增加新的模组SDK接口节点,包含2.6的新接口。
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/964-1.0.27.md b/mcguide/10-新内容/1-开发工作台/964-1.0.27.md
new file mode 100644
index 0000000..2ac801f
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/964-1.0.27.md
@@ -0,0 +1,47 @@
+---
+front: https://nie.res.netease.com/r/pic/20230322/9523e693-505f-44e8-adcd-3fefdda3a179.png
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2023.03.23 版本1.0.27
+
+## 原版模型转换工具
+启动器工具箱新增原版模型转换工具,可帮助开发者将作品中的原版模型转换为骨骼模型,详见[这篇文档](../../16-美术/6-模型和动作/11-原版模型转换工具.md)。
+
+
+
+## 内容库新增【其他】分页
+1. 在原有的资源包和作品模板两个分页基础上,新增【其他】分页。
+2. 此分页用于存放无法被编辑器导入或创建为作品的其他资源,如spigot插件、bbmodel格式模型、SDK示例模型等等,下载后可直接在对应目录进行查看和使用。
+
+
+
+## 内容库资源上新
+
+1. 内容库征集活动二期共计35款获奖资源上线内容库!获奖信息可前往[活动网站](https://mc.163.com/dev/nrkzj2/)查询。
+
+
+
+2. 内容库**其他**分页上线3个spigot插件和一个SDK的示例模型包,详情参考[这篇文档](../../27-网络游戏/课程10:使用Spigot开服/99-下载内容.md)。
+
+
+
+## 作品编辑与开发测试界面优化
+1. 优化编辑和开发测试界面的选项布局,调整选项之间的依赖关系,移除无效选项。
+- 编辑界面
+
+
+
+
+- 开发测试界面
+
+
+
+
+2. 导入记录功能移至作品→更多→配置界面,内部文件管理功能调整为配置界面资源包的右键菜单,调整了配置界面的功能布局与交互。
+
+
+
+
diff --git a/mcguide/10-新内容/1-开发工作台/965-1.0.26.md b/mcguide/10-新内容/1-开发工作台/965-1.0.26.md
new file mode 100644
index 0000000..5eb774f
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/965-1.0.26.md
@@ -0,0 +1,45 @@
+---
+front: https://nie.res.netease.com/r/pic/20230309/d3812038-e5b2-42c7-a499-e773d4bed148.png
+hard: 入门
+time: 10分钟
+selection: 23
+---
+
+# 2023.03.09 版本1.0.26
+
+
+## 启动器优化
+
+1. 云端列表、线上网络服分页支持按审核阶段筛选。
+
+
+
+2. 优化了发布作品界面,现在支持通过**作品名称**进行搜索。
+
+
+
+3. 优化了启动时自动清理本地不合规存档的逻辑,现在开发者手动保存的存档不会被强制清除了。
+
+
+## 关卡编辑器
+
+1. 新增**成就配置**,开发者可以在编辑器内配置成就节点,关于成就系统可以参考[这篇文档](../../20-玩法开发/15-自定义游戏内容/16-自定义成就系统.md)。
+
+
+
+2. 优化了**生物群系配置**,补充了自定义高度相关的属性字段,关于自定义地形高度,你可以参考[这篇文档](../../20-玩法开发/15-自定义游戏内容/4-自定义维度/2-群系地貌.md)。
+
+
+
+
+## 特效编辑器
+
+1. 中国版序列帧特效现已支持点滤波。
+
+## 调试工具
+
+1. 日志界面现在会展示正在测试的PE存档、联机大厅存档名称了。
+2. 在调试工具内置的指令代码输入框内,对某一行文本按下快捷键ctrl+/就能注视掉这一行代码,再按一次,就取消注释。
+3. 指令代码输入框内支持tab增加缩进、回车自动缩进。
+4. 指令代码输入框内支持ctrl+滚轮缩放字体大小。
+5. 支持在快捷指令窗口内直接新建指令,并优化了部分功能的交互体验。
diff --git a/mcguide/10-新内容/1-开发工作台/966-1.0.25.md b/mcguide/10-新内容/1-开发工作台/966-1.0.25.md
new file mode 100644
index 0000000..3c9f171
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/966-1.0.25.md
@@ -0,0 +1,105 @@
+---
+front: https://nie.res.netease.com/r/pic/20230220/7b88a6f4-3e1b-4234-bb48-52ece8c03815.png
+hard: 入门
+time: 10分钟
+selection: 22
+---
+
+# 2023.02.21 版本1.0.25
+
+## 开发者文档新增原版Json参考资料
+在开发模组时,开发者不仅需要网易版独有的Json字段,也经常需要使用《我的世界》基岩版原版的合法字段,但原版文档多为英语所著,对许多开发者的理解和使用造成了一定阻碍;
+
+为此,我的世界中国版将基岩版原版的Json参考文档整理并翻译,提供给所有需要的开发者进行查阅,详情请查看[原版参考文档](../../20-玩法开发/100-参考资料/0-索引.md)。
+
+
+
+## 关卡编辑器
+### 1. 多结构特征配置
+
+参照旧版编辑器的交互方式,在新版关卡编辑器中支持了多结构特征的配置。
+
+> **提示:**
+> 旧版作品升级为新版作品时,也会同步进行多结构特征的配置升级,如果开发者自行修改过特征或特征生成配置的Json文件名或标识符等内容,可能会导致升级失败。
+
+
+
+## 地图编辑器
+
+### 1. 【植被】工具支持范围放置
+
+现在植被工具可以在【单点放置】和【范围放置】两种模式直接切换了。【范围放置】模式下支持调整植被的生成区域大小和密度。请阅读[植被工具相关文档内容](../../14-地图制作/7-地形工具.md#7-植被)来了解具体的使用方式和注意事项。
+
+
+
+### 2. 【植被】工具支持的植物类型大幅拓展
+
+植被工具现在支持放置绝大部分原生植物了,从树木到花草、洞穴植物、水生植物,都可以直接生成。
+
+
+
+### 3. 笔刷工具直线生成规则调整
+
+过去笔刷工具的`直线生成`选项,在所选终点位置必然生成一个笔刷形状,这导致实际间距与开发者指定的间距不符。我们这次更新中修改了这一特性,直线生成的终点位置将不在强制生成笔刷形状。
+
+## 逻辑编辑器
+
+### 1. 蓝图零件变量、自定义接口支持分组
+
+开发者在编辑大型蓝图的时候可能会遇到蓝图零件变量、自定义接口的数量过多,现有的排序功能无法满足开发者整理需求的情况。因此,在这个版本,我们推出了蓝图零件变量、自定义接口的分组功能,开发者们可以在[这里](../../20-玩法开发/12-可视化编程/10-新版逻辑编辑器使用说明/40-事件、接口、变量.md)找到详细说明。
+
+默认情况下,蓝图零件变量会被存放在【蓝图零件】分组下,自定义接口会被存放在【接口】分组下。开发者如果需要添加新的分组,只需要在对应的变量/接口属性菜单中找到`变量分组`或者`接口分组`字段,修改它的名字,即可按照这个名字添加新的分类。
+
+> 在分组内仍然支持对变量、接口进行上下拖拽调整顺序。
+
+
+
+### 2. 其他优化
+
+- 对部分包含tuple类型引脚的节点进行了容错处理。
+
+## 特效编辑器
+
+### 1. 原版特效配置模板
+
+使用原版特效进行特效制作的开发者现在可以直接在编辑器中应用一些预设的粒子配置模板了。我们只需要在原版特效的属性面板中找到蓝色的【使用模板】按钮,并在弹窗中通过下拉框选择需要应用的模板,即可用该模板的数据覆盖当前原版特效的数据。
+
+
+
+### 2. 原版特效属性配置字段补充
+
+补充了`粒子更新Tick(Paticle Update)`和`粒子渲染Tick(Paticle Render)`两个字段。开发者可以在[原版特效属性详细说明文档](../../16-美术/9-特效/21-原版特效属性详细说明.md)中查看原版粒子配置的详细说明。
+
+## 调试工具
+
+### 1. 右上角新增【更多】菜单,集成常用工具
+
+我们在调试工具右上角新增了【更多】下拉菜单,存放了一些常用的版本号查看、文档跳转、清除缓存等功能,方便开发者使用。
+
+
+
+
+## 模板和内容库
+
+### 1. 模板新增
+
+- 新建作品界面新增起床战争(纯零件版)模板,并调整了各个分类的作品模板顺序。
+
+ 
+
+- 内容库新增《海滨小岛地图》和《零件界面示例》两个官网教程配套的模板。
+
+ 
+
+
+## 其他
+### 1. 编辑器内支持启用或屏蔽脚本代码逻辑
+使用MODSDK格式编写的脚本代码之前在编辑器内会强制运行生效,导致开发者在编辑器内的操作受到脚本的影响(尤其是涉及游戏模式和传送位置等逻辑时),现在将作品的脚本代码逻辑默认设为关闭,开发者可在下列两个位置进行修改:
+- 游戏预览窗→设置→其他→启用脚本代码选项,如图:
+
+ 
+
+- 编辑作品→启用脚本代码选项,如图:
+
+ 
+
diff --git a/mcguide/10-新内容/1-开发工作台/967-1.0.23.md b/mcguide/10-新内容/1-开发工作台/967-1.0.23.md
new file mode 100644
index 0000000..00a718f
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/967-1.0.23.md
@@ -0,0 +1,135 @@
+---
+front: https://nie.res.netease.com/r/pic/20230206/b02871fa-875d-487e-80f6-61404684c552.png
+hard: 入门
+time: 15分钟
+selection: 21
+---
+
+# 2023.02.07 版本1.0.23
+
+## 教程面板
+编辑器新增教程面板,可通过工具栏的教程按钮打开,如图所示:
+
+
+
+教程面板主要包含以下内容:
+1. 当前编辑器:当前打开的子编辑器简要教程,可通过切换子编辑器进行教程的切换和阅读。
+
+
+
+2. 组件开发:归纳整理了关于组件开发的全流程教程大纲,帮助新手快速定位需要了解的知识点。
+
+
+
+3. 知识库:收纳了来自开发者频道-知识库中由开发者分享的精华文章,包括【必看文章】和【优秀文章】两个系列。
+
+
+
+4. 反馈与交流:简要介绍了开发者最常用的交流和反馈渠道,包括开发者频道,官网,内容管理平台,B站,公众号等等。
+
+
+
+## 编辑器常用功能支持悬浮提示
+对各个子编辑器内常用的功能面板和按钮的悬浮提示进行了优化,你可以将鼠标悬浮在功能按钮上触发提示,如图所示:
+
+
+
+> 温馨提示:如果你已经熟练掌握编辑器的所有功能使用,希望关闭提示,可通过预览窗右上角【设置按钮】→【其他】关闭新版的悬浮提示,如图所示:
+
+
+
+## 预览窗工具栏更新
+
+本次更新,我们推出了**预览窗工具栏**功能。它位于编辑器预览窗的正上方,用于对编辑器内嵌游戏进行设置。不同编辑器下视口工具栏中可以使用的功能是不同的,具体请见[这篇文档](../../20-玩法开发/11-组装简单玩法/4-预览窗工具栏.md)
+
+
+
+## 调试工具
+
+### 1. 连接地址保存优化
+
+为了解决开发者们反馈的同一设备连续多次连接会出现多条相同的连接地址记录问题,本次更新调整了保存连接信息的数据结构。
+
+**本次更新后烦请开发者们重新输入IP地址,将移动端设备连接至调试工具。**
+
+### 2. 日志界面展示PC端正在测试的存档名称
+
+开发者在PC开发包测试组件时,日志界面调试窗口的左上角会展示当前正在测试的存档名称,方便开发者在多开状态下判断日志信息属于哪个进程。
+> 未来我们也计划添加PE测试端存档名称显示的功能,敬请期待。
+
+
+
+### 3. UI调试工具显示控件轮廓
+
+在UI调试工具的面板中,开启显示控件轮廓后,可以对UI控件轮廓进行显示,辅助进行UI控件的点选。
+详情参考[UI调试工具](../../30-测试/4-UI调试工具.md#游戏中定位控件)
+> 目前仅支持PC端的调试,未来我们也计划添加PE端支持,敬请期待。
+
+
+
+### 4. 其他调整
+
+- 屏蔽了部分引擎侧日志信息,减少无效日志打印。
+
+
+## 逻辑编辑器
+
+### 1. 支持使用逻辑编辑器开发联机大厅作品
+
+现在开发者们可以使用逻辑编辑器制作联机大厅作品了。
+
+### 2. 可缺省参数标注
+
+我们在节点的可缺省参数后添加了“(可选)”文字标注,方便开发者们按需填写。
+
+
+
+### 3. 基础运算(加减乘除)节点支持添加引脚
+
+基础运算节点现在可以点击属性面板中的“+”按钮添加更多参数了,这样可以更快捷地进行连加、连乘等操作。
+
+
+
+## 地图编辑器
+
+### 1. 蒙版工具状态值选择支持选择全部状态值
+
+- 勾选:代表选中当前方块的全部状态值。
+- 取消勾选:代表只选中当前方块的一种状态值。取消勾选后左侧状态值下拉框可编辑。
+
+
+
+### 2. 其他调整
+
+- 蒙版“更多设置”按钮位置调整到蒙版成分的左侧,以防蒙版成分方块较多时被遮挡。
+- 调整了蒙版设置中,方块删除操作的交互体验。
+
+## 特效编辑器
+
+### 1. 原版粒子特效属性配置说明
+
+为了方便开发者们直接在编辑器中创建和编辑原版粒子特效的属性信息,并实时预览,我们编写了[《原版特效属性详细说明》](../../16-美术/9-特效/21-原版特效属性详细说明.md)供大家参考。如有需要,可链接阅读。
+
+### 2. 特效编辑器开发指南文档更新
+
+我们整体翻新了开发指南中特效编辑器的说明文档,使文档内容与新版特效编辑器功能和交互保持一致。有需要的开发者可以[前往查看](../../16-美术/9-特效/00-特效编辑器简介.md)。
+
+
+
+### 3. 其他调整
+
+- 原版粒子配置涉及方向的参数标明XYZ轴向。
+
+## 内容库与模板
+
+1. 新建作品窗口新增了入门SDK脚本模板,用传统SDK的方式配置了最简单的脚本示例(行为包下的BlankScripts文件夹),注意与入门预设脚本模板区分,如图所示:
+
+
+
+2. 内容库新增商人NPC零件,资源点零件以及部分官网教程的配套模板。
+
+
+
+## 其他
+1. 支持了新版空白地图和空白附加包模板的仅创建功能
+2. 修改了新建文件向导中创建的代码文件内容,修改了导入(import)部分代码的格式,使其能够正常使用代码补全库。
diff --git a/mcguide/10-新内容/1-开发工作台/968-1.0.22.md b/mcguide/10-新内容/1-开发工作台/968-1.0.22.md
new file mode 100644
index 0000000..37c00ee
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/968-1.0.22.md
@@ -0,0 +1,88 @@
+---
+front: https://nie.res.netease.com/r/pic/20230111/d0c66e62-4974-412c-ba69-231d59513bc9.png
+hard: 入门
+time: 10分钟
+selection: 20
+---
+
+# 2023.01.11 版本1.0.22
+
+
+
+## 启动器
+启动器的作品更多菜单新增【复制】功能。
+
+
+
+## 地图编辑器
+
+### 1. 笔刷工具大更新
+
+地图编辑器笔刷工具在这个版本进行了较大改动。主要更新内容如下:
+
+- 新增**圆锥、多棱柱**笔刷形状。
+
+ 
+
+- 部分笔刷形状支持了去除底面、仅框架的结构选项,并且可以调节厚度。
+
+ 
+
+- 新增**素材笔刷**,支持直接应用素材库素材为笔刷形状。
+
+ 
+
+### 2. 开发指南文档更新
+
+[地图编辑器相关开发指南文档](../../14-地图制作/2-地图编辑器使用说明.md)更新,删除了过时的文档内容。
+
+
+
+## 逻辑编辑器
+
+### 1. 节点菜单鼠标悬停提示
+
+逻辑编辑器右键节点菜单和节点搜索结果菜单都添加了鼠标悬停提示。当开发者将鼠标悬停在某个节点上时,将通过tips提示框展示更多节点信息,省去了开发者反复查看文档确认节点用途的时间。
+
+显示的提示内容与API文档的节点描述相同。
+
+
+
+### 2. 其他功能修改
+
+- 枚举值节点名称格式修改为【英文名(中文翻译)】,方便开发者按英文名搜索相关文档。
+- 对部分旧版节点名称做出了修改。
+
+### 3. 开发指南文档更新
+
+[新版逻辑编辑器使用说明](../../20-玩法开发/12-可视化编程/10-新版逻辑编辑器使用说明/01-什么是逻辑编辑器.md)更新,删除了过时的文档内容。
+
+## 特效编辑器
+
+### 1. 微软粒子配置支持曲线可视化编辑
+
+现在可以在属性菜单的最下方找到【曲线】,点击【+】新增曲线,然后进行可视化编辑。
+
+
+
+## 调试工具
+
+### 1. 日志窗口行数限制修改
+
+现在调试工具日志窗口的默认消息行数从1000改为5000,并且新增最大行数选项10000。
+
+### 2. 游戏启动器侧日志屏蔽
+
+默认屏蔽了游戏启动器侧发送的日志,这些日志通常在开发者的组件调试过程中是不需要查看的。
+
+### 3. 客户端代码traceback打印
+
+现在调试工具可以正常打印出客户端代码的traceback了。
+
+### 4. UI调试工具的属性名称支持中英文切换
+
+## 其他
+1. MCResource自定义属性控件兼容非作品目录下的原生游戏路径,例如原版游戏的掉落表路径,贴图路径等,不再报错。
+2. PDict 自定义属性控件新增fixlist属性,用于单独控制每个子属性的添加和移除权限,[自定义属性面板](../../20-玩法开发/14-预设玩法编程/12-深入理解零件/1-自定义属性面板.md)。
+3. 调整了部分内容库资源的标签分类。
+
diff --git a/mcguide/10-新内容/1-开发工作台/969-1.0.19.md b/mcguide/10-新内容/1-开发工作台/969-1.0.19.md
new file mode 100644
index 0000000..f923963
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/969-1.0.19.md
@@ -0,0 +1,44 @@
+---
+front: https://nie.res.netease.com/r/pic/20230106/8b71d88c-16f1-437c-8863-df6f4d787c3a.png
+hard: 入门
+time: 10分钟
+selection: 19
+---
+
+# 2022.12.29 版本1.0.19
+
+## 逻辑编辑器
+
+### 1. 调用对象参数引脚说明增加
+
+为了让开发者们更清楚地了解各个节点的【调用对象】引脚应该传入什么,我们为该引脚添加了括号注释,开发者们按照注释内容进行连接即可。
+
+
+
+
+## 配置
+
+扩展[配方配置](../../20-玩法开发/15-自定义游戏内容/5-自定义配方.md),补充支持了物品耐久度,多产物配方,酿造台配方等新字段。
+
+
+
+
+## 内容库资源上新
+新增内容征集活动第一期的获奖作品资源,可通过内容库中的“征集活动作品”标签快速筛选出所有的征集活动获奖作品。
+
+
+
+
+
+## 其他
+
+1. 新建作品支持**仅创建**选项,通过此选项创建作品不会强制启动编辑器编辑,而是跳转到创作页查看该作品。
+> 创建**空白地图**时不支持该选项,必须启动一次编辑器生成地图存档。
+
+
+
+2. 创建自定义维度配置时,自动随机生成带有随机数字的合法json命名,避免因错误命名导致维度无法正常访问,如下图。
+
+
+
+3. UI调试工具的属性增加搜索功能
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/970-1.0.18.md b/mcguide/10-新内容/1-开发工作台/970-1.0.18.md
new file mode 100644
index 0000000..c3ba61d
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/970-1.0.18.md
@@ -0,0 +1,152 @@
+---
+front: https://nie.res.netease.com/r/pic/20221214/df0e7ce6-5cb8-4d48-a3a9-500577f7cc61.png
+hard: 入门
+time: 15分钟
+selection: 18
+---
+
+# 2022.12.15 版本1.0.18
+
+## 编辑器新增反馈按钮
+
+在使用编辑器时遇到了bug、闪退、功能缺失等问题?请毫不犹豫地反馈给我们!新版本编辑器顶部工具栏新增了反馈按钮,点击后会跳转至[开发者平台反馈网页](https://mcdev.webapp.163.com/#/feedbackModal?target=browser)。
+
+
+
+在填写反馈信息时,请开发者们尽可能提供:
+- **开发者账号(邮箱)**
+- **电脑系统信息、硬件配置**
+- **问题的详细描述**
+- **问题发生的时间和频率**
+
+## 编辑器维度切换
+
+### 1. 编辑器正式支持维度切换功能
+
+长期以来编辑器都只支持对主世界场景进行编辑(或者通过复杂的指令跳转到其他维度进行操作)。从现在开始,编辑器将支持对内嵌游戏维度的快速切换,从而让开发者们能够快速便捷地前往下界、末地,或其他自定义维度。有了这个功能,你可以:
+
+- [在关卡编辑器中搭建不同维度的游戏场景](../../20-玩法开发/11-组装简单玩法/0-关卡编辑器.md#关卡编辑器维度切换)
+- [在地图编辑器中编辑不同维度的地图](../../14-地图制作/2-地图编辑器使用说明.md#维度切换)
+
+
+
+## 逻辑编辑器
+
+### 1. 节点目录重新整理
+
+逻辑编辑器上线后,我们经常收到反馈说节点分类看不懂、各种名词难以理解的情况。
+
+经过这个版本的调整,我们现在将逻辑编辑器的内置节点分类,调整为**与开发者官网API文档分类一致**。这样的分类更通俗易懂,也更符合MC开发者的命名习惯。
+
+大家可以依据自己在API文档中的浏览顺序,在逻辑编辑器的节点菜单中查找节点。
+
+
+
+### 2. 广播、监听、取消监听事件节点
+
+我们对事件广播、监听、取消监听的系列节点进行了整合。在之前的版本,开发者需要记住不同情况下使用的节点名称,并在海量的节点中搜索这些节点,导致很多新手用户反馈看不懂如何在蓝图中进行事件广播和监听。
+
+现在,大家只需要在节点菜单中找到【事件广播与监听】目录,然后从中选择自己是需要【广播/通知事件】、【监听事件】,还是【取消监听事件】,即可创建对应类型的节点。
+
+
+
+具体的广播、监听、取消监听范围,开发者可以通过范围选择下拉框进行指定。我们提供了hover文本提示,以帮助各位了解自己需要使用哪一种范围。
+
+
+
+想查阅关于广播、监听、取消监听节点的更多使用指南,请看[这篇文档](../../20-玩法开发/12-可视化编程/10-新版逻辑编辑器使用说明/47-事件监听与广播.md#监听和广播自定义事件)。
+
+### 3. 富文本分组框
+
+我们在普通分组框的基础上新增了富文本分组框,以便让有需要的开发者能够直接进行富文本编辑,在分组框的展示文本中使用加粗、字体颜色、超链接等。
+
+
+
+富文本分组框通过在蓝图右键菜单选择【创建分组】-【创建富文本分组】进行创建,编辑富文本时需要右键点击富文本分组框,选择【设置富文本内容】,然后在弹出的输入框内使用 **HTML语法** 编写。
+
+
+
+### 4. 巨量节点蓝图性能优化
+
+我们优化了巨量节点蓝图的性能表现,解决了当一个蓝图存在数千个节点时可能出现的卡顿、崩溃问题。
+
+我们为开发者丰富的创造力和持之以恒的创作而赞叹,感谢各位使用逻辑编辑器做出了丰富多彩的玩法组件。与此同时,我们也希望大家可以合理地将玩法逻辑分配到多个蓝图零件中,并使用事件通信将他们串联起来,避免在同一个蓝图中使用过多节点而造成不必要的性能损耗。
+
+## 地图编辑器
+
+### 1. 地形操作新增强度参数
+
+对地形操作生效。即每秒进行的操作次数,取值范围为1~10之间的整数。
+
+
+
+### 2. 地形操作新增凹陷工具
+
+开发者们现在可以更方便地在平整的表面上挖洞了。
+
+
+
+
+## 特效编辑器
+
+### 1. 微软粒子编辑器内配置
+
+从这个版本开始,特效编辑器将支持对微软原版粒子的配置编辑。在资源管理器选中微软粒子配置文件,或在挂接面板选中一个已挂接的微软粒子实例,即可在右侧属性窗口对其配置进行修改。
+
+这个版本的配置编辑**暂不支持曲线的可视化编辑**,我们将在后续的版本补充这个功能。
+
+
+
+需要注意的是,如果你需要修改微软粒子贴图,请先在资源管理器的【导入】按钮处使用【其他贴图】类别导入,然后拖动到属性窗口的顶部的【纹理】处。
+
+
+
+## 调试工具
+
+### 1. 调试工具正式代替脚本测试日志
+
+从这个版本开始,调试工具将正式取代脚本测试日志,作为开发测试日志查看的优先拉起工具。调试工具继承了脚本测试日志的全部功能,并新增了python指令调试、客户端组件管理、免机审组件同步、UI调试工具等高级功能。如果你还不了解调试工具,请阅读[这篇文档](../../30-测试/1-使用调试工具进行手机和电脑端调试.md)。
+
+
+
+> 如果你仍希望继续使用旧版脚本测试日志,可以点击左下角的【切换到脚本测试日志】按钮。同样,在脚本测试日志窗口也可以切换使用调试工具。
+
+### 2. 调试工具支持iOS测试服日志浏览和指令调试
+
+是的,调试工具现在支持了iOS手机测试服了。开发者们可以像连接安卓测试服一样连接iOS测试服,并进行日志浏览、指令调试、组件同步等操作。
+
+### 3. 组件同步自动扫盘获取对应组件
+
+现在在进行组件同步时,有2种方式选择需要上传的组件文件:
+**1)通过下拉框直接选择Studio作品库中的作品;**
+2)像以前一样通过在资源管理器中浏览、定位文件夹的方式上传。
+
+
+
+### 4. 新增UI调试工具
+
+新增UI调试工具,用于在开发测试时对界面进行调试,包括原生界面。调试功能包括查看界面的控件结构,以及各控件的部分属性值。详情参考[UI调试工具](../../30-测试/4-UI调试工具.md)。
+
+
+
+## 配置
+
+1. 修改[方块配置](../../20-玩法开发/15-自定义游戏内容/2-自定义方块/0-自定义方块概述.md),补充大量缺失的网易版字段,如红石,流体方块、重力方块等字段。
+2. 修改[实体配置](../../20-玩法开发/15-自定义游戏内容/3-自定义生物/01-自定义基础生物.md),补充支持了实体组件组、实体事件、实体资源包配置等字段。
+3. 配置面板对任意配置右键可**复制配置**,帮助开发者快速创建大量配置副本。
+
+
+## 内容库资源上新
+1. 新增幸运方块模板。
+2. 新增3D盔甲模型、自定义箱子和箱子锁等官网文档中的示例资源。
+3. 新增内容征集活动的部分获奖作品资源。
+
+
+> 内容库资源征集活动的剩余获奖作品将在后续版本陆续放出,敬请期待。
+
+
+## 其他优化和修复
+1. 修复了启动器首页中的banner轮播方向错误的问题。
+2. 修复了实体配置无法读取entities文件夹的子文件夹下的行为包Json的问题。
+3. 修复了方块配置中无法读取texture/block的子文件夹下的图片的问题。
+4. Apollo服务器配置的更多分页,增加允许PC用户进入的选项,如果你的服务器包含PC版本,需要勾选此项。
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/971-1.0.17.md b/mcguide/10-新内容/1-开发工作台/971-1.0.17.md
new file mode 100644
index 0000000..f227ba1
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/971-1.0.17.md
@@ -0,0 +1,47 @@
+---
+front: https://nie.res.netease.com/r/pic/20221116/8885f8bd-1978-4102-8d7e-ee8768e056c2.png
+hard: 入门
+time: 10分钟
+selection: 15
+---
+
+# 2022.11.15 版本1.0.17
+
+## 逻辑编辑器
+
+1. 蓝图分组框现在可以支持文本换行,方便开发者们对节点组合添加更多的备注信息。
+
+2. 逻辑编辑器左侧【当前蓝图】窗口交互流畅度优化。
+
+## 特效编辑器
+
+1. 特效编辑器现在支持在不改变模型的情况下仅导入模型动作。
+
+
+## 内容库
+
+1. 内容库的资源卡片优化,新增新品标签及更新提示。
+2. 新增生物警卫零件,挂载实体预设下,可驱动该实体守卫指定区域,并主动攻击入侵的敌对生物
+
+3. 新增一键建筑零件,挂载空预设下,仅需简单配置建筑的名称描述和对应的结构文件,制作一键建筑类模组。
+
+
+## 配置
+
+1. 新增[自定义维度](../../20-玩法开发/15-自定义游戏内容/4-自定义维度/1-自定义维度.md)配置,用于配置每个自定义维度的属性,如世界类型,生成器,屏蔽原版特征等属性。
+2. 为部分配置替换了独一无二的图标。
+
+
+## 预设API更新
+1. 新增获取预设零件所在维度的接口,部分已有接口增加维度参数(包括逻辑编辑器节点)。更多文档请参考2.4.0版本预设API更新说明。
+
+## 其他
+
+1. 优化了调试工具代码调试窗口的输入体验。
+2. 导入/导出资源包窗口新增全选、展开全部、收起全部按钮。
+
+3. ModPC开发包的快捷菜单新增“更改菜单位置选项”
+。
+4. 原生控件支持拷贝为自定义控件。
+
+5. 其他体验优化和问题修复。
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/972-1.0.16.md b/mcguide/10-新内容/1-开发工作台/972-1.0.16.md
new file mode 100644
index 0000000..4adbad1
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/972-1.0.16.md
@@ -0,0 +1,77 @@
+---
+front: https://nie.res.netease.com/r/pic/20221031/b98ab8a9-6957-4753-875e-fd8a7d00d963.png
+hard: 入门
+time: 10分钟
+selection: 13
+---
+
+# 2022.11.1 版本1.0.16
+
+## 旧版作品编辑提示
+
+1. 在创建和编辑旧版作品时强化了升级提示。
+
+2. **旧版编辑器后续将不再支持新功能,强烈建议开发者使用新版编辑器进行模组开发。**
+
+## 界面编辑器
+
+1. 自定义控件库扩展为控件库,分为原生控件和自定义控件2个页签。
+
+
+
+2. 原生控件支持通过拖拽的方式创建到内嵌游戏中的指定位置,或者指定的控件结构层级。
+
+
+
+3. 功能区仅保留对控件的操作按钮。
+
+
+
+4. 新增滑动条控件
+
+## 逻辑编辑器支持分词搜索
+
+1. 在蓝图中搜索节点时,可以在多个关键词之间加入空格进行分词,来搜索名称中同时带有这些关键词的节点。此外,分词也支持直接输入拼音进行识别。
+
+
+
+## 联机地图作品支持PC端多人测试
+
+1. 无论是手机端还是电脑端的联机地图作品,都可在我的世界开发工作台中开启多人测试,且同时支持手机测试端和电脑测试端进入同一个房间。
+详情请参考[联机大厅作品多人测试](../../26-联机大厅/20-联机大厅调试与多人测试文档.md)。
+
+
+
+## 内容库新增作品模板分页
+
+> 详情参考[内容库使用说明](../../15-资源管理/11-内容库.md)。
+
+1. 原有资源归类到 **资源包** 分页,用于存放可直接导入到当前已有作品中的资源包文件(.mep后缀)。
+
+
+
+2. 新增 **作品模板** 分页,用于存放需要创建为新作品的模板文件,类似与新建作品窗口的模板。
+
+
+
+3. 将内容库原有资源中的示例移动至作品模板分页,开发者可直接创建为作品进行测试。
+
+
+
+## 配置
+
+1. 修改[物品配置](../../20-玩法开发/15-自定义游戏内容/1-自定义物品/1-自定义基础物品.md)配置,补充部分属性。
+
+2. 修改[群系配置](../../20-玩法开发/15-自定义游戏内容/4-自定义维度/2-群系地貌.md)配置,补充部分属性。
+
+## 其他
+
+1. 舞台及预设层级的树状结构优化。
+
+
+
+2. 调试工具指令调试窗口的右键菜单汉化完成。
+
+3. 调试工具指令调试的代码补全提示按照字母a→z的顺序排列,方便开发者定位。
+
+4. 其他体验优化和问题修复。
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/973-1.0.15.md b/mcguide/10-新内容/1-开发工作台/973-1.0.15.md
new file mode 100644
index 0000000..b0247db
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/973-1.0.15.md
@@ -0,0 +1,59 @@
+---
+front: https://nie.res.netease.com/r/pic/20221017/45eb5c29-a770-48a0-b4f5-52433c15b778.png
+hard: 入门
+time: 10分钟
+selection: 12
+---
+
+# 2022.10.18 版本1.0.15
+
+## 开服工具2.0正式外放
+
+1. 支持使用Spigot和模组SDK制作基岩版手游服务器,详情参考[开服工具2.0](../../27-网络游戏/课程10:使用Spigot开服/10-支持基岩版客户端的Java版网络游戏概述.md)
+
+## 关卡编辑器支持放置生物
+
+1. 支持放置非预设的生物,并在舞台中管理和修改生物的属性
+2. 支持放置原版生物和自定义生物,详情参考[放置和管理生物](../../20-玩法开发/11-组装简单玩法/1-放置和管理生物.md)
+
+## 逻辑编辑器
+
+1. 蓝图零件变量、自定义接口、变量允许开发者拖动修改并保存列表顺序
+
+
+
+2. 【查找】功能支持定位自定义接口图表里的节点
+
+
+
+## 模板和内容库
+
+1. 内容库新增刷怪点零件、生物升级零件、生物巡逻零件,修复代号羲和生物包详情页问题。
+
+
+
+2. 新建作品推荐页增加塔防(纯零件)模板
+
+
+
+## 配置
+
+1. 新增[音乐](../../20-玩法开发/15-自定义游戏内容/8-自定义音乐.md)配置
+
+
+
+2. [特征](../../20-玩法开发/15-自定义游戏内容/4-自定义维度/4-自定义特征.md)配置修改放置时的旋转角度
+
+
+
+## 调试工具
+
+1. 提供日志标签筛选功能,同时还支持开发者添加自定义日志标签
+
+2. 支持仅显示日志窗口或仅显示调试窗口
+
+3. 日志窗口不同类型字段的通过不同颜色的文字展示
+
+## 其他
+
+1. 其他体验优化和问题修复
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/974-1.0.14.md b/mcguide/10-新内容/1-开发工作台/974-1.0.14.md
new file mode 100644
index 0000000..a55edc7
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/974-1.0.14.md
@@ -0,0 +1,57 @@
+---
+front: https://nie.res.netease.com/r/pic/20221002/bee54b20-c93c-48e3-aaa2-61d8646d599a.png
+hard: 入门
+time: 10分钟
+selection: 10
+---
+
+# 2022.9.28 版本1.0.14
+
+## 调试工具
+
+我们推出了调试工具的全面升级!新版调试工具提升了开发者在下列流程中的体验:
+
+1. **组件同步**:自测组件时在PC端修改组件文件,直接同步到手机测试端,省去漫长的机审等待时间。
+2. **多端日志**:在电脑上查看本机和其他设备上测试游戏的日志,包括手机测试客户端和其他PC开发包的测试日志。
+3. **代码调试**:对正在进行中的游戏测试进程直接使用python代码进行调试,并且提供代码补全功能。另外开发者还能查看到调试代码的历史记录,并且可以将写好的代码保存为快捷指令,方便随时复用。
+
+关于新版调试工具的更多详情,请看[这篇文档](../../30-测试/1-使用调试工具进行手机和电脑端调试.md)。
+
+
+
+## 逻辑编辑器
+
+1. 优化了节点宽度显示,现在名称较长的节点能够完整展示名称了
+ 
+
+2. 允许开发者为自定义接口、自定义变量添加备注
+ 
+
+## 地图编辑器
+
+现在支持直接将剪贴板上的内容通过右键菜单添加至素材库了。
+ 
+
+
+## 模板和内容库
+
+1. 内容库新增季度模组西游-大闹天宫相关资源:实体物品方块配置、特效资源、结构资源、贴图资源、界面资源。
+
+
+
+2. 新建作品推荐页增加跑酷(纯零件)模板
+
+
+
+## 配置
+新增[物品分页](../../20-玩法开发/15-自定义游戏内容/13-自定义物品分页.md)、[物品分组](../../20-玩法开发/15-自定义游戏内容/12-自定义物品分组.md)、[自定义音效](../../20-玩法开发/15-自定义游戏内容/8-自定义音乐.md)三种配置
+
+
+
+
+## 其他
+
+1. 开发测试界面支持部分实验性玩法选项
+
+2. 实体预设整体模板的下拉框样式优化
+3. 其他体验优化和问题修复
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/975-1.0.13.md b/mcguide/10-新内容/1-开发工作台/975-1.0.13.md
new file mode 100644
index 0000000..be0e01c
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/975-1.0.13.md
@@ -0,0 +1,29 @@
+---
+front: https://nie.res.netease.com/r/pic/20220922/76df5e70-1f2d-4ecc-b68e-d7dca22f75c4.png
+hard: 入门
+time: 10分钟
+selection: 9
+---
+
+# 2022.9.15 版本1.0.13
+
+## 地图编辑器-蒙版
+
+地图编辑器现已支持蒙版。蒙版属于全局设定,开启后,地图编辑操作只对蒙版指定的方块生效。蒙版将应用于任何会对方块产生修改的操作。
+关于蒙版的更多信息详见[这篇文档](../../14-地图制作/92-蒙版工具说明.md)。
+
+
+
+
+## 内容库
+
+新增资源2个:代号羲和生物包、[自定义3D武器](../../20-玩法开发/15-自定义游戏内容/1-自定义物品/9-自定义3D物品/1-自定义3D物品(一).md)。
+
+
+
+## 其他
+
+1. 网络服地图下载显示存档清除的时间
+2. 协作账号实名认证弹窗,未实名协作子账号需在规定期限内完成实名,逾期未实名将影响功能正常使用。
+
+ 
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/976-1.0.12.md b/mcguide/10-新内容/1-开发工作台/976-1.0.12.md
new file mode 100644
index 0000000..c8f9908
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/976-1.0.12.md
@@ -0,0 +1,106 @@
+---
+front: https://nie.res.netease.com/r/pic/20220831/50aae489-470f-4970-afcd-4c792784dfbf.png
+hard: 入门
+time: 10分钟
+selection: 8
+---
+
+# 2022.8.31 版本1.0.12
+
+## 预设/配置
+
+1. 新增自定义状态效果配置
+
+
+
+2. 实体数据有如下新增
+
+| 特殊生物 | 末影龙,末影人,恶魂,史莱姆,岩浆怪,热带鱼,凋零 |
+| --- | --- |
+| 特殊非生物 | tnt,末影水晶,区域效果云,潜影贝 |
+| 坐骑 | 马,僵尸马,骷髅马,骡,驴,羊驼 |
+| 矿车 | 矿车,漏斗矿车,运输矿车,命令方块矿车 |
+3. 实体配置的资源包模型可以选择所有的原生模型了
+4. 支持放置方块时自动生成方块预设(在2.3版本正式生效,目前可在modpc包上测试)
+5. UI预设增加常加载选项
+
+
+
+
+
+## 启动器
+
+1. 删除正在编辑的作品时,会提示作品占用
+2. 启动ModPC包测试弹窗增加beta版链接
+
+
+
+## 地图编辑器
+
+现在地图编辑器的笔刷材质、填充、替换等工具都支持选择使用方块的状态值了!详情可参考[这篇文档](../../14-地图制作/91-方块状态值设置说明.md)。
+
+打开对应的窗口,如果选择的是可以修改状态值的方块,则在选中后右下角会有【状态值设置】选项,点击即可展开状态值选项。通过下拉框调整好状态值后,就会将该状态值的方块应用到你使用的工具上。
+
+
+
+
+
+> 注:部分方块的一些特殊状态值在wiki上可以查到,但在放置方块时由于原本方块逻辑并不能生效,故我们屏蔽了这部分的状态值,它们不会显示在状态值设置的选项里。
+
+## 特效编辑器
+
+### 特效编辑器时间轴更新
+
+我们更新了特效编辑器的时间轴,除了其本身的外观更新外,本次更新主要包括下列几点功能:
+
+1. 优化了时间轴对中国版特效播放延迟的直接控制。
+- 现在开发者可以将同一个特效文件挂接到不同挂点,并在时间轴上分别拖动修改每个挂点下特定特效的延迟。
+
+
+
+> 注:现在时间轴上调整过的延迟会记录在特效bind文件中,并覆盖原本特效文件中的延迟。如果你希望继续使用特效文件中配置的延迟,请直接在属性面板中调整,而不要调整时间轴上的拖柄。
+> 如果你希望将时间轴上的延迟数据同步到特效文件本身,请点击轨道属性窗口的【同步文件】按钮,这样就会将时间轴上的延迟数据写入特效文件配置中。
+> 
+
+
+2. 特效时间轴窗口左半部分改为【挂点名称+特效文件名】的形式,让特效之前的区分更清晰。
+
+
+
+3. 骨骼模型动作支持挂接音效。
+
+> 注:当前版本仅支持原版音效,暂不支持手动添加的音效。
+
+
+
+### 其他修改:
+- 对blockbench模型锚点的偏移、旋转调整支持按步骤撤销
+
+
+
+## UI编辑器
+
+1. 刷新属性面板时保持属性的分组和滚动条位置不变
+2. 控件结构的右键菜单中新增添加动画和播放动画的选项
+3. ui json文件现在只保存不等于默认值的属性
+4. 属性值类型错误时,显示一个红色的错误标记
+5. 优化图片控件的“默认图片”样式
+
+## 模板和内容库
+
+1. 内容库新增官方模组《三打白骨精》、任务链、跑酷相关资源共12个;
+2. 内容库更新《代号:羲和》与《史莱姆物语》相关资源的使用说明。
+
+
+
+3. 新建作品推荐页增加任务链(纯零件)模板
+
+
+
+## 其他
+
+1. 导入导出资源包弹窗支持展开和收起全部
+
+
+
+2. 其他性能和体验优化,问题修复,文档更新
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/977-1.0.11.md b/mcguide/10-新内容/1-开发工作台/977-1.0.11.md
new file mode 100644
index 0000000..e0cfa4a
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/977-1.0.11.md
@@ -0,0 +1,61 @@
+---
+front:
+hard: 入门
+time: 10分钟
+selection: 6
+---
+
+# 2022.8.2 版本1.0.11
+
+## 安装器优化
+
+- 交互和视觉优化
+
+
+## 逻辑编辑器
+
+- 新建蓝图默认左侧窗口改为“当前蓝图”
+- 新增构造物品字典,方块基础信息字典两个节点,简单应用不再需要查询文档
+- **【请注意】构造物品字典、构造方块基础信息字典节点在2.3整包上线后才会正式生效,不可用于2.2版本组件。目前仅可在modpc包上测试。**
+
+
+
+## 特效编辑器
+
+- 现可撤销对骨骼模型挂点的偏移、旋转等操作。
+- 基岩版模型动作支持音效挂接。**目前仅支持游戏内置的部分音效**,可在音效轨道属性菜单的【音效】下拉框中选择。
+
+
+## 预设、配置
+
+- 实体配置的资源包现在会自动补充render_controllers和materials
+- 禁止新建实体配置/预设时大写字母
+- 添加《洞穴与山崖》版本的实体
+
+## 地图编辑器
+
+- 支持在地图中直接摆放结构。作品中保存的结构会直接显示在【素材库】窗口的【结构】分页中,开发者可以直接像摆放素材一样,通过鼠标点击将结构摆放至场景中。
+- **需注意的是,【结构】分页仅会显示当前作品中的结构文件,并不会像素材一样可以跨作品使用。**
+
+
+## 调试工具优化
+
+- 日志字体大小设置
+- 高级搜索功能,包含正则表达式匹配,大小写敏感,全字匹配等
+- 回车搜索和高亮搜索文本
+- PC端使用调试工具支持断线重连
+
+
+## 内容库
+- 史莱姆物语方块包
+- 自定义生物示例包
+- 史莱姆物语结构包
+- 代号羲和结构素材包
+
+
+## 其他更新
+
+- 资源包导入导致的玩家预设合并,现在也会合并玩家预设的属性了
+- 导入资源包菜单优化
+- 网络服Mod选择按照字母排序
+- 其他性能和体验优化,问题修复,文档更新
diff --git a/mcguide/10-新内容/1-开发工作台/978-1.0.10.md b/mcguide/10-新内容/1-开发工作台/978-1.0.10.md
new file mode 100644
index 0000000..1146e11
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/978-1.0.10.md
@@ -0,0 +1,43 @@
+---
+front:
+hard: 入门
+time: 10分钟
+selection: 5
+---
+
+# 2022.7.19 版本1.0.10
+
+## 界面属性动画支持
+
+- 支持在编辑器中创建,编辑和预览属性动画。
+- 目前已支持位移和尺寸,透明度,裁剪,颜色,序列帧,UV动画。
+- 详情见[界面属性动画文档](../../18-界面与交互/19-控件属性动画.md)。
+
+
+
+## 逻辑编辑器
+
+- 蓝图节点默认参数支持None
+- 自定义接口支持递归
+- 自定义接口图表支持多输出节点
+
+## 特效编辑器
+
+- 支持切换循环播放/单次播放
+- 微软粒子支持在时间轴上调整延迟播放的时间
+
+## 启动器
+
+- 导入组件优化
+- addon转地图时增加是否更换uuid的功能
+- 启动器作品列表加载和搜索优化
+- 服务器在部署时,会对检测机器性能并给出建议
+
+## 其他更新
+
+- 编辑器闪退后,再次打开时,提供恢复选项
+- 舞台显示预设零件等的类型
+- 属性栏数据损坏表现优化
+- 配方的物品选择增加清除功能
+- 零件属性面板新增坐标和区域2个属性样式
+- 其他性能和体验优化,问题修复,文档更新
diff --git a/mcguide/10-新内容/1-开发工作台/979-1.0.9.md b/mcguide/10-新内容/1-开发工作台/979-1.0.9.md
new file mode 100644
index 0000000..ca31314
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/979-1.0.9.md
@@ -0,0 +1,63 @@
+---
+front:
+hard: 入门
+time: 10分钟
+selection: 4
+---
+
+# 2022.7.7 版本1.0.9
+
+## 工作台
+
+### 内容库
+
+- 启动器新增“内容库”分页,使用说明见[内容库](../../15-资源管理/11-内容库.md)
+- 以自定义资源包的形式为开发者提供了大量配置、预设零件、特效贴图等开发过程中所需要的游戏资源
+- 支持一键下载并导入到当前作品,助力开发者创作更丰富有趣的作品!
+
+
+
+### 启动器增加后台更新的功能
+
+- 打开启动器后,如果我们检测到了编辑器或者Mod PC开发包有更新,将直接弹出提示
+- 后台更新时可以进行其他操作
+
+
+
+### Mod PC开发包新增快捷操作
+详情请见[ModPC开发包开发者菜单](../../30-测试/00-ModPC开发包介绍.md#二、开发者菜单)
+- Mod PC包右上角新增一个快捷操作按钮
+- 功能包括热更,重载,新建存档并测试等
+- 可以缩短测试过程中的等待时间
+
+
+
+### 原版模型粒子更多支持
+
+- 现在可以像调整FBX模型一样调整基岩版模型的挂接的相对位置和旋转了
+- 通过时间轴控制原版粒子暂停和继续播放
+
+
+
+
+### 界面编辑器优化
+
+- 删除界面文件时提示将要被删除的自定义控件
+- 变量区图片控件图片路径只显示图片名称
+- 九宫属性恢复旧版的样式
+- 创建界面的时候新增“是否启用基类画布”的选项
+- 拖曳资源进图片控件时不会再自动设置uv_size
+
+
+
+### 其他更新
+
+- 修复部分SDK接口没有对应蓝图节点的问题
+- 新增构造Transform的蓝图节点
+- 启动器新建地图废弃“传统”地图类型
+- 编辑器设置项中添加内嵌游戏的MSAA
+- 配方配置的配方属性增加“应用”按钮
+- 云端列表样式更新
+- 内置零件可以通过新建文件向导创建了
+- 账号异常退出时提醒保存编辑器数据
+- 其他性能和体验优化,问题修复
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/980-1.0.8.md b/mcguide/10-新内容/1-开发工作台/980-1.0.8.md
new file mode 100644
index 0000000..038e884
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/980-1.0.8.md
@@ -0,0 +1,42 @@
+---
+front:
+hard: 入门
+time: 10分钟
+selection: 3
+---
+
+# 2022.6.7 版本1.0.8
+
+## 工作台
+
+### 新建文件向导优化
+
+- 增加当前选中项的简略文档,点击可跳转至官网文档
+- 搜索不再区分大小写
+- 命名框规则优化
+
+
+
+### 界面编辑器优化
+
+- 读取界面文件时增加loading状态
+- 错误操作增加弹窗提示
+- 自定义控件库增加分组,现在会按照自定义控件归属的界面文件进行分组
+- 界面文件简化,不再保存默认值
+- 变量删除增加删除并解引
+
+
+
+### 其他更新
+
+- 启动器工具箱增加脚本测试日志,不小心关闭之后,可以在这里再次拉起
+- 编辑器随机命名空间时避开敏感词
+- 带搜索栏的下拉框优化
+- 其他问题修复,体验和性能优化,文档更新
+
+## 模组SDK
+
+- 更新2.2开发包beta版,可以在开发包中的版本选择中选2.2beta来体验。
+- 更多文档请参考2.2版本ModAPI更新说明。
+
+
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/981-1.0.7.md b/mcguide/10-新内容/1-开发工作台/981-1.0.7.md
new file mode 100644
index 0000000..39628c5
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/981-1.0.7.md
@@ -0,0 +1,40 @@
+---
+front: https://nie.res.netease.com/r/pic/20220510/cb899036-bb98-4853-bc51-01bc189f8643.png
+hard: 入门
+time: 10分钟
+selection: 2
+---
+
+# 2022.5.24 版本1.0.7
+
+## 工作台
+
+### 组件打包发布优化
+
+- 在作品的“更多”菜单中新增随机生成组件UUID,提升组件版本号的功能
+- 在作品的“更多”菜单中新增将AddOn转换为地图的功能
+- 详见[组件打包发布](../../30-测试/3-组件打包发布.md)。
+
+
+
+### 界面编辑器优化
+
+- 图片控件统一
+- 管理变量时自动选中变量
+- 自定义的变量名不做翻译
+- 自定义控件支持复制
+- 可以撤销导致控件破损的操作了
+- 新增同名控件破损状态,不再会导致编辑器内嵌游戏崩溃
+- 万用控件下不再允许添加子控件
+
+### 其他更新
+
+- 实体零件支持存档
+- 微软粒子支持热刷新,不再需要重新导入特效或者重启编辑器
+- 优化接口测试零件,模板零件补充更多注释
+- 舞台各实例的展开情况会在关闭编辑器时保存
+- 资源管理器导入菜单增加“贴图”
+- 启动器支持Java 1.18
+- 内置零件名称改为中文
+- 其他问题修复,体验和性能优化,文档更新
+
diff --git a/mcguide/10-新内容/1-开发工作台/982-1.0.6.md b/mcguide/10-新内容/1-开发工作台/982-1.0.6.md
new file mode 100644
index 0000000..b313cff
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/982-1.0.6.md
@@ -0,0 +1,75 @@
+---
+front: https://nie.res.netease.com/r/pic/20220510/cb899036-bb98-4853-bc51-01bc189f8643.png
+hard: 入门
+time: 15分钟
+selection:
+---
+
+# 2022.5.10 版本1.0.6
+
+## 工作台
+
+### 编辑器界面更新!
+
+- 我们优化了界面的视觉风格,黑曜石般的界面带来更沉浸式的体验。
+- 大幅提高了文字和背景的对比度,可以降低长时间使用带来的视觉疲劳。
+
+- 优化了文字和背景的层级,适当使用的圆角卡片,界面各元素之间的关系更加明晰,使用起来一目了然。
+
+
+
+### 资源管理器全新升级
+
+- 资源管理器的更新内容较多,详情可以参考[资源管理器(新版)](../../15-资源管理/2.5-资源管理器.md)。
+- 【前进】,【后退】和【面包屑导航】功能,让你可以快速的在父子目录之间跳转
+
+
+
+- 新增【精简模式】,为不完全熟悉我的世界附加包文件结构的开发者提供一个比较简单明了的资源分类方式。
+
+
+
+- 优化了搜索规则,并新增了【筛选】功能。搜索功能支持对所选目录的各级子文件夹进行穿透搜索。
+
+
+
+
+### 界面编辑器重构
+
+- 资源管理器的更新内容较多,详情可以参考[界面编辑器改版说明](../../18-界面与交互/0-界面编辑器改版说明.md)。
+- 界面Json文件的【解析】能力和【兼容性】提高。可以解析几乎所有合法的界面Json,即使无法解析也不会强制修改你的界面文件。
+
+
+
+- 所有继承控件在编辑器内都可以展开显示【完整的控件结构】,例如下图是编辑器内置的“开关”控件,你现在可以展开这个控件,学习它的构造。
+
+
+
+- 移除旧版的继承控件功能,替换为【继承原版控件】。
+
+- 新增【自定义控件】功能。你可以将某个控件(和子控件)添加至控件库,并通过简单的拖拽从控件库里复用你的自定义控件。
+
+
+
+- 新增【变量】、【属性引用】和【万用控件引用】功能,可以在某个控件中修改其他控件的属性值。
+
+
+
+### 新手教程
+
+在第一次打开每个编辑器的时候,会弹出新手教程,指引各窗口的作用。
+
+
+
+### 其他更新
+
+- 联机大厅地图测试时,增加服务端日志功能,详见[联机大厅测试服务端日志](../../26-联机大厅/20-联机大厅调试与多人测试文档.md)。
+- 关卡编辑器的配置面板增加新建按钮,默认布局会显示配置面板
+- 新建文件向导支持新建特效文件
+- 蓝图零件变量新增开放到零件属性面板的功能,可以在预设编辑器、关卡编辑器的零件属性面板直接进行修改
+- 网络游戏配置的服务器设置中增加重置功能,可以自动添加已有的机器IP
+- 后处理零件支持在编辑器内实时生效
+- 配方的选择框支持自定义方块
+- 预设预加载机制修改,现在会固定出生在(0,100,0),并且修复存档点距离过远导致无法加载预加载预设的问题
+- 其他问题修复,体验和性能优化
+
diff --git a/mcguide/10-新内容/1-开发工作台/983-1.0.5.md b/mcguide/10-新内容/1-开发工作台/983-1.0.5.md
new file mode 100644
index 0000000..c7e8d9b
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/983-1.0.5.md
@@ -0,0 +1,62 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/179f0219-272e-4b5c-a2e1-648d9aaa9de8.png
+hard: 入门
+time: 5分钟
+selection:
+---
+
+# 2022.4.12 版本1.0.5
+
+## 工作台
+
+### 模板更新
+
+- 新增方块合并网格体模板
+- 新增自定义盾牌模板,详情请见[自定义盾牌](../../20-玩法开发/15-自定义游戏内容/1-自定义物品/8-自定义盾牌.md)
+- 更新蓝图简易射击模板,详情请见[更新(勘误)](../../20-玩法开发/12-可视化编程/30-新版示例教程(视频)/07-制作简易射击附加包(视频)/00.md)
+
+
+
+
+
+### 新建服务器插件
+
+- 工作台新建基岩版服务器的弹窗中,新增了一个空白插件,可以用来新建插件,详情请见[使用工作台新建插件](../../27-网络游戏/课程5:插件教学/第0节:使用工作台新建插件.md)
+- 新建插件支持分开创建大厅服Mod和游戏服Mod
+- 插件导入的界面同样得到了更新
+
+
+
+### 子账号部署功能扩展
+
+- 可以在开发者平台赋予子账号更高权限
+- 如果子账号被赋予了开发及审核阶段的部署权限:那么子账号拥有除了删除之外的所有权限
+- 如果子账号被赋予了上线阶段的调试权限:那么子账号拥有调试和查看日志的权限
+- 详情请见[子账号部署和控制台调试功能](../../27-网络游戏/课程7:开发技巧/第4节:子账号部署和控制台调试功能.md)
+
+
+
+### 运营指令权限管理
+
+- 主账号可以在工作台中指定每个运营指令是否允许子账号操作
+- 当复制服务器到审核阶段,上线阶段时,运营指令的设置也会被继承
+
+
+
+### 其他更新
+
+- 逻辑编辑器接入模组SDK 2.1的新接口,打开蓝图时自动恢复上次关闭时的位置和缩放
+- 附加包类型的作品,关卡编辑器的舞台会显示预加载提示
+- 蓝图零件变量支持双端同步
+- 实体预设属性面板优化,属性增加鼠标悬浮提示,可以查看相关的api
+- 其他问题修复,体验和性能优化
+
+## 模组SDK
+
+- 模组SDK2.1稳定版更新。如下图,可以在开发测试时使用2.1稳定版进行测试。
+- 详情参考ModAPI更新信息。
+
+## 基岩版开服工具
+
+- 详情参考Apollo更新信息。
+
diff --git a/mcguide/10-新内容/1-开发工作台/984-1.0.4.md b/mcguide/10-新内容/1-开发工作台/984-1.0.4.md
new file mode 100644
index 0000000..326c79b
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/984-1.0.4.md
@@ -0,0 +1,51 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/179f0219-272e-4b5c-a2e1-648d9aaa9de8.png
+hard: 入门
+time: 5分钟
+selection:
+---
+
+# 2022.3.29 版本1.0.4
+
+## 工作台
+
+### 新增后处理零件
+
+- 用于快速设置并在游戏中使用渐晕、镜头污渍、模糊等后处理效果,详情请见[后处理零件](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/11-内置零件/06-后处理零件.md)
+- 后处理零件属性如图
+
+
+
+- 各种后处理的效果如下
+
+
+
+### 蓝图变量开放到零件的属性面板
+
+- 逻辑编辑器中新增了【蓝图零件变量】元素类型,详情请见[蓝图零件变量](../../20-玩法开发/12-可视化编程/10-新版逻辑编辑器使用说明/40-事件、接口、变量.md#变量)
+- 该类变量可以直接同步到.part文件的属性面板中,并支持在关闭蓝图文件的情况下直接通过属性面板修改蓝图零件变量的默认值
+- 另外也支持自定义变量在蓝图零件属性面板中的显示名称和分组。
+
+
+
+### 其他更新
+
+- 启动器的创作页中增加了工具箱按钮
+- 启动器推荐模板中增加了一些旧版的模板
+- 大部分模板得到了更新,不再使用已废弃的接口
+- 网络服分页适配Apollo PC服
+- 逻辑编辑器Id相关的节点参数优化
+- 编辑器添加更多《洞穴与山崖》版本的物品
+- 其他问题修复,性能优化
+
+## 模组SDK Beta
+
+- 模组SDK2.1第二个beta包更新。如下图,可以在开发测试时使用Beta2.1进行测试。
+- 详情参考ModAPI更新信息。
+
+
+
+## 基岩版开服工具
+
+- 详情参考Apollo更新信息。
+
diff --git a/mcguide/10-新内容/1-开发工作台/985-1.0.3.md b/mcguide/10-新内容/1-开发工作台/985-1.0.3.md
new file mode 100644
index 0000000..a8f809c
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/985-1.0.3.md
@@ -0,0 +1,70 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/5b8553e2-4a0a-4f41-9a47-c50be1bbd197.png
+hard: 入门
+time: 5分钟
+selection:
+---
+
+# 2022.3.15 版本1.0.3
+
+## 工作台
+
+### 新增文字面板预设
+
+- 文字面板预设可以在编辑器内快速实现实体名称,地图文字标识牌的自定义,详情请见[文字面板预设](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/10-预设/6-文字面板预设.md)
+
+- 文字面板预设属性如图
+
+ 
+
+- 文字面板游戏内效果如图
+
+ 
+
+> 目前仅在开发测试中生效,正式服预计在2.2版本上线,请开发者合理安排开发节奏。
+
+### 实体预设增加属性
+
+- 增加了生命值、速度、攻击力、岩浆里的移速四个属性,详情请见[实体预设](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/10-预设/1-实体预设.md)
+
+ 
+
+> 目前仅在开发测试中生效,正式服预计在2.1版本上线,请开发者合理安排开发节奏。
+
+### 零件属性面板增加蓝图零件
+
+蓝图零件属性现在会展示对应的蓝图文件了,点击右侧打开按钮可直接打开该蓝图。
+
+
+
+### 新蓝图节点类型:枚举节点
+
+蓝图节点类型的新成员“[枚举节点](../../20-玩法开发/12-可视化编程/10-新版逻辑编辑器使用说明/72-常用节点.md#枚举节点)”,可以帮助你更快捷地传入需要的枚举值。
+
+
+
+### 粒子动态颜色叠加
+
+现在可以选择让粒子的动态颜色与粒子贴图原本的颜色叠加显示,而非直接覆盖
+
+
+
+### 其他更新
+
+- 文件夹中有多个bb模型时支持选择具体模型json文件导入
+- 服务器modrequest.json支持不在插件目录的mod
+- 启动器增加开发者B站和QQ群的图标,欢迎大家关注和加群
+- 云端列表作品补充修改时间操作
+- 其他体验优化
+
+## 模组SDK Beta
+
+- 本次更新包含模组SDK的2.1 beta包更新。如下图,可以在开发测试时使用Beta2.1进行测试。
+- 详情参考ModAPI更新信息。
+
+
+
+## 基岩版开服工具
+
+- 详情参考Apollo更新信息。
+
diff --git a/mcguide/10-新内容/1-开发工作台/986-1.0.2.md b/mcguide/10-新内容/1-开发工作台/986-1.0.2.md
new file mode 100644
index 0000000..eea4298
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/986-1.0.2.md
@@ -0,0 +1,25 @@
+# 2022.3.1 版本1.0.2
+
+### 预设支持更多属性
+- 玩家预设和实体预设新增多种设置属性分栏,开发者可在属性面板快速进行属性的设置,详见 [实体预设](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/10-预设/1-实体预设.md#设置属性)和[玩家预设](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/10-预设/2-玩家预设.md#设置属性)
+- 实体设置属性如图
+- 玩家设置属性如图
+
+> 目前仅在开发测试中生效,在中国版2.1版本正式生效
+
+### 蓝图支持节点智能联想
+
+- 自动检测节点的端口类型,将不可直接相连的节点隐藏,并且与搜索功能兼容,帮助开发者更快地寻找到所需的节点。
+- 可在节点列表顶部的“开启联想”选框处选择是否开启节点联想功能。
+
+
+
+### 其他编辑器更新
+
+- 编辑器支持《洞穴与山崖》版本的方块
+- 减少了部分蓝图节点冗余的参数输入框,并进一步降低了蓝图文件加载时的性能消耗,提升了加载速度。
+- 其他体验优化,问题修复和性能提升
+
+### Apollo
+- 详情参考Apollo更新信息。
+
diff --git a/mcguide/10-新内容/1-开发工作台/987-1.0.1.md b/mcguide/10-新内容/1-开发工作台/987-1.0.1.md
new file mode 100644
index 0000000..b2c1ad2
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/987-1.0.1.md
@@ -0,0 +1,14 @@
+# 2022.2.16 版本1.0.1
+
+### 工作台、编辑器
+
+- 基岩版模型的挂点支持调整位置
+- 预设架构文档优化,详见[深入理解预设](../../20-玩法开发/14-预设玩法编程/11-深入理解预设/0-基础架构.md)
+- 工作台界面优化,增加系统消息按钮,并且显示未读的开发者邮件数
+- 编辑器支持高DPI自适应
+- 其他体验优化,问题修复和性能提升
+
+### Apollo
+
+- 详情参考Apollo更新信息。
+
diff --git a/mcguide/10-新内容/1-开发工作台/988-1.0.0.md b/mcguide/10-新内容/1-开发工作台/988-1.0.0.md
new file mode 100644
index 0000000..a7d9a08
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/988-1.0.0.md
@@ -0,0 +1,31 @@
+# 2022.1.20 版本1.0.0
+
+预祝各位开发者新年快乐!!
+
+### 启动器改版
+
+- 整体视觉升级和交互优化
+- 新增首页:为您提供与开发者息息相关的信息,如新闻资讯、更新信息、常用功能跳转入口、作品最新数据、近期开发动态等等,如图所示。
+
+
+
+- 最近页升级为创作分页:集成了作品的新建、导入与导出、启动编辑、开发测试、跳转发布等模组创作相关的功能,另外还提供了作品的时间流,开发者可以在创作分页管理自己的工作流。
+
+
+
+
+### 特效编辑器支持原版模型粒子优化
+
+- 被选中的基岩版模型group、锚点可以在预览窗中高亮,方便开发者定位
+- 微软粒子特效挂接到模型后不需要重启内嵌游戏,可直接播放
+- 配置好的基岩版模型现在可以直接应用于实体预设
+
+
+
+### 其他更新
+
+- Apollo完成配置时加入更多检查
+- Apollo开发阶段热更优化,服务器热更提示优化
+- 从windows打开当前编辑的作品目录后,可以批量拖拽特效文件到骨骼进行挂接
+- 测试Java模组时,不再可以选择java版本(统一使用java8)
+- 其他易用性优化,性能优化和稳定性提高
diff --git a/mcguide/10-新内容/1-开发工作台/989-0.17.7.md b/mcguide/10-新内容/1-开发工作台/989-0.17.7.md
new file mode 100644
index 0000000..cc04b52
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/989-0.17.7.md
@@ -0,0 +1,35 @@
+# 2022.1.6 版本0.17.7
+
+此次更新只包含新版编辑器,旧版编辑器的更新需要等待之后的版本。
+
+### 逻辑编辑器集中优化
+
+- 默认布局优化
+- 节点的鼠标悬停提示中增加了更详细的说明和跳转链接(见下图1)
+- 删除了节点返回值的输入框,返回值补充了类型与翻译(见下图1)
+- 补充了当前缺失的节点(例如UI控件的接口)(见下图2,在蓝图简易模板中)
+- 屏蔽了大量不应该修改的参数
+- 屏蔽了已经废弃的接口
+- 更新了studio内置的蓝图模板
+- 客户端、服务端同名同功能接口合并为一个节点
+
+
+
+
+
+### 特效编辑器支持微软粒子
+
+- 导入微软粒子:相关json及贴图导入工作目录
+- 基岩版模型节点绑定微软粒子 :包括新增,删除,撤销,复制,黏贴操作
+- 播放基岩版模型动作的同时播放微软粒子
+- (如果你的基岩版模型的动作全部由大写字母组成,将被自动转为小写)
+
+
+
+### 其他更新
+
+- Apollo网络服开放上线阶段热更,可将服务器热更到当前版本的下一个免审版本
+- 序列帧特效的代码得到了重构
+- 更新Java客户端,修复log4j2
+- 其他易用性优化,性能优化和稳定性提高
+
diff --git a/mcguide/10-新内容/1-开发工作台/990-0.17.5.md b/mcguide/10-新内容/1-开发工作台/990-0.17.5.md
new file mode 100644
index 0000000..32c9773
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/990-0.17.5.md
@@ -0,0 +1,32 @@
+# 2021.12.23 版本0.17.5
+
+此次更新只包含新版编辑器,旧版编辑器的更新需要等待之后的版本。
+
+### 地图编辑器支持自定义方块
+
+地图编辑器的选择材质和编辑功能增加了对自定义方块的支持,你的自定义方块会显示在材质列表的最前面。
+
+
+
+### 特效编辑器支持基岩版模型
+
+当前已支持导入基岩版模型,预览,动作列表显示和动作播放。
+
+
+
+### 新建文件向导集中优化
+
+- 新增模板预设分页
+- 新增零件分页,包含零件和模板零件
+- 界面预设和ScreenNode脚本总是相伴相成的,对于蓝图开发者更是这样,我们简化了通过界面预设使用界面的步骤,现在在新建界面预设的时候,可以选择同时创建并绑定ScreenNode脚本。
+
+
+
+### 其他更新
+
+- 可以通过资源管理器的右键菜单创建预设和零件的副本
+- 预设保存优化
+- 舞台会记录实例条目的展开折叠情况
+- 实体预设性能优化,零件tick性能优化
+- 其他性能优化和稳定性提高
+
diff --git a/mcguide/10-新内容/1-开发工作台/991-0.17.4.md b/mcguide/10-新内容/1-开发工作台/991-0.17.4.md
new file mode 100644
index 0000000..df6e38a
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/991-0.17.4.md
@@ -0,0 +1,48 @@
+# 2021.12.9 版本0.17.4
+
+### Apollo性能优化工具
+
+我们为各位服务器开发者提供了脚本性能的监测工具,你可以选择要监测的服务器,并在监测一段时间后,获取到这段时间内的脚本函数调用的火焰图,并根据火焰图进行代码优化,详见[性能优化小贴士](../../27-网络游戏/课程8:性能优化/第6节:性能优化小贴士.md)。
+
+
+
+### 创建零件时选择继承
+
+创建零件时,可以选择继承内置零件,或者自定义的其他零件。
+
+继承是面向对象的内容,使用继承后,除了零件代码得到继承后,零件的属性面板的信息也会被继承。
+
+
+
+### 界面编辑器增加新控件
+
+新增如下控件
+
+- 点击面板,响应鼠标事件,比如制作可拖拽的面板
+- 网易版纸娃娃
+
+
+
+### 编辑器支持挂接其他AddOn的预设零件
+
+如下图,在编辑作品时,勾上想要的附加包,然后你就可以在组装预设时使用来自其他AddOn的预设和零件。
+
+其他的资源,例如图片,素材等,在编辑器中仍然不支持,但是在实际游戏中是生效的。
+
+
+
+### 特效编辑器
+
+- 重新加入了导出特效和显示骨骼的功能
+- 增加了冻结史蒂夫姿势的选项
+- 现在可以撤回对特效的修改,在模型挂接面板删除挂点/特效/骨骼也支持了
+
+### 其他更新
+
+- 选择素材时记录打开的目录
+- Apollo脚本测试支持\n转义符
+- 网络服Mod配置优化
+- 逻辑编辑器屏蔽了不支持的零件事件节点(使用同功能的服务端/客户端事件替代)
+- 导入资源包时,默认取消勾选同名文件
+- 其他性能优化和稳定性提高
+
diff --git a/mcguide/10-新内容/1-开发工作台/992-0.17.3.md b/mcguide/10-新内容/1-开发工作台/992-0.17.3.md
new file mode 100644
index 0000000..861d288
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/992-0.17.3.md
@@ -0,0 +1,42 @@
+# 2021.11.25 版本0.17.3
+
+### 资源包支持AddOn
+
+资源包以前只支持地图,现在支持AddOn了,导入资源包的时候再也不用看类型了。
+
+### 资源包导入时显示更多内容
+
+导入资源包时,直接显示资源包里的内容,并且可以只勾选其中的部分内容。
+
+
+
+### Preset API的继承关系使用图的形式表示
+
+如下图,点击类可以跳转到他的api文档,例如 变换对象TransformObject 。
+
+
+
+### 初始特效包
+
+我们将官方制作的一些特效加入了新版编辑器的内置资源包中,你可以在下图的位置通过这种方式导入。
+
+
+
+打开特效编辑器,切换模型为ceshi,他的不同分组里绑定了不同的特效。
+
+
+
+### 网络服地图下载功能
+
+新增Apollo服务器地图下载功能,可选择服务器——更多——下载服务器地图进行下载。
+只有勾选了“是否保存地图”的游戏服,才能进行上述下载操作。
+
+
+
+### 其他更新
+
+- 已注册,但未认证的开发者也可以使用Studio了!(你仍然需要认证才可以使用更多功能)
+- 网络服功能菜单优化
+- 其他问题修复和性能优化
+- 预设编辑器的层级菜单允许拖动对象改变位置了
+- 预设编辑器的层级菜单里,不同种类的对象将被归类(素材,预设,零件),注意,预设的父子关系不会受影响
diff --git a/mcguide/10-新内容/1-开发工作台/993-0.17.2.md b/mcguide/10-新内容/1-开发工作台/993-0.17.2.md
new file mode 100644
index 0000000..65af491
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/993-0.17.2.md
@@ -0,0 +1,51 @@
+# 2021.11.11 版本0.17.2
+
+### 逻辑编辑器重做
+
+在长时间的等待之后,我们为大家带来了完全重做的逻辑编辑器。
+
+
+
+新版的逻辑编辑器已经在新版编辑器中替代了现有的逻辑编辑器,你可以通过这个视频快速了解:[第一个蓝图模组(视频)](../../20-玩法开发/12-可视化编程/00-第一个蓝图Mod/00-教程视频.md)。
+
+与原来的逻辑编辑器相比,新版的逻辑编辑器的主要变化如下:
+
+- 图标的组织形式更新为节点式
+- 使用方式从挂接ets文件到世界组件等变为使用蓝图零件
+- 提供了模组SDK的所有接口,以及大幅扩展了对python原生接口的支持
+- 支持编写客户端逻辑(特效,音效,模型,动画等)
+- 独立的变量管理
+- 更多的起始事件,完整的事件系统支持
+- 支持编写UI蓝图
+
+具体可以参考新版逻辑编辑器的系列文档:[逻辑编辑器重做概述](../../20-玩法开发/12-可视化编程/10-新版逻辑编辑器使用说明/01-什么是逻辑编辑器.md)。
+
+目前,新版逻辑编辑器理论上已经支持了制作模组的绝大多数功能,欢迎大家尝试使用。
+
+### 实体零件
+
+新的内置零件,可以挂接在其他预设下,并用于刷怪等需求,详见[实体零件](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/11-内置零件/04-实体零件.md)
+
+
+
+### 相机轨迹零件
+
+新的内置零件,可以用于编辑相机轨迹,并在游戏中控制相机实时播放,可以用于地图展示类的过场动画,详见[相机轨迹零件](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/11-内置零件/03-相机轨迹CameraTrackPart.md)。
+
+
+
+## 路径点零件
+
+新的内置零件,用于可视化的编辑一系列路径点,详情可以参考[导航路径零件](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/11-内置零件/05-导航路径零件.md)。
+
+
+
+### 其他更新
+
+- 编辑器的预览窗上方增加了视口工具栏
+- 复制预设功能
+- 精确调整开发包的分辨率
+- 支持1.12.0原版模型格式
+- 特效编辑器支持预览动画时调整速度
+- 特效挂接支持复制分组
+- 性能优化,体验优化和稳定性提高
diff --git a/mcguide/10-新内容/1-开发工作台/994-0.17.1.md b/mcguide/10-新内容/1-开发工作台/994-0.17.1.md
new file mode 100644
index 0000000..900f39d
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/994-0.17.1.md
@@ -0,0 +1,48 @@
+# 2021.10.14 版本0.17.1
+
+### 新模板:厨神争霸
+
+这是一个完整游戏的玩法地图模板,有一定体量,包含各种系统的综合应用,推荐学习完简易射击模板后再学习这个模板。目前推荐使用旧版编辑器打开这个模板进行学习和测试。
+
+厨神争霸是一个比分制的做饭游戏。比赛的地图包含准备区域,中央厨房,和数个资源区域。
+比赛开始后,玩家需要在资源区域击杀怪物收集资源,并且将资源带回到中央厨房合成美食获得分数。
+美食的合成是通过自定义配方实现的,并且拥有常驻的UI提示。
+厨神争霸还包含一些技能和道具。
+资源区域会自动的按规则刷新怪物等资源,距离最远的资源区域的方块,如果玩家踩上去,会在几秒内消失。
+此模板还包含一个常驻的小地图,可以实时显示各种玩家和各种生物的位置,小地图还具有展开功能。
+
+
+
+厨神争霸使用了Mod SDK的小地图,可以合成美食的资源均可以在小地图中显示,点击小地图可以放大。
+
+
+
+这里是菜谱,菜谱显示当前回合可以合成的食物。
+
+
+
+注意:请不要将厨神争霸模板直接上架或者略微加工就上架到资源中心。
+
+### 特效编辑器支持挂接骨骼模型
+
+在骨骼模型的骨骼节点右键可以添加骨骼模型。
+
+
+
+如下图,目前已支持挂接和编辑器内预览功能,根据挂接文件在游戏中实际挂接的接口会在之后放出。
+
+
+
+### 挂点的移动和旋转拖柄优化
+
+挂点的拖柄现在在特效编辑器的左上角统一调整,并且保证当前显示的拖柄始终为当前选中的挂点的。
+
+
+
+### 其他更新
+
+- 配置面板显示中文名称
+- 零件热更优化
+- 零件属性面板属性使用正则优化
+- 配置的添加特性界面可以复选了,现在可以一次性添加多个特性
+- 生物生成,自定义特征分布规则已加入配置
diff --git a/mcguide/10-新内容/1-开发工作台/995-0.17.0.md b/mcguide/10-新内容/1-开发工作台/995-0.17.0.md
new file mode 100644
index 0000000..b9f1ccd
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/995-0.17.0.md
@@ -0,0 +1,31 @@
+# 2021.9.24 版本0.17.0
+
+### 手机端Mod适配电脑端优化(新版)
+
+新版编辑器新增按键绑定零件,你可以通过这个零件将键盘的按键与自定义的事件绑定起来。
+
+
+
+新版简易射击模板已更新,通过使用按键绑定组件进行了电脑端适配。如下图可以看到常驻预设下有两个UI预设,分别是PC和PE界面,根据不同的平台使用不同的预设,详细关于如何适配请移步[适配PC文档](../../20-玩法开发/19-手机电脑适配/1-PE模组适配PC.md)。
+
+
+
+### 新版简易射击模板纯零件版
+
+现在Studio中有3个版本的简易射击模板了,他们分别使用不同的代码架构,可以根据自己的需求查看不同的模板
+
+- 旧版:纯Mod SDK架构
+- 新版:抛射物部分使用实体预设,部分玩家相关逻辑使用玩家预设,其余使用Mod SDK架构
+- 新版纯零件版:纯预设架构
+
+
+
+### 其他更新
+
+- 触发器零件新增获取当前区域所有实体的api
+- Apollo热更优化
+- 队伍组件转化为零件
+- 使用新建文件向导新建ScreenNode时,可以选择放置在Mod或者零件目录中
+- 一批新的预设API,详情参考 预设API更新信息
+- 预设架构整体优化
+- 性能优化和问题修复
diff --git a/mcguide/10-新内容/1-开发工作台/996-0.16.19.md b/mcguide/10-新内容/1-开发工作台/996-0.16.19.md
new file mode 100644
index 0000000..e898cdf
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/996-0.16.19.md
@@ -0,0 +1,44 @@
+# 2021.9.9 版本0.16.19
+
+### 特效挂接重做
+
+特效挂接现在可以常驻显示所有的动作和骨骼结构。
+
+特效现在可以直接挂在骨骼下了(你仍然可以继续在骨骼上右键创建挂点,并将特效挂在挂点下)。
+
+新版编辑器和旧版编辑器都获得了此次更新。
+
+
+
+### 预加载预设优化
+
+勾上预加载的预设,和玩家预设现在将自动显示在舞台上。
+
+并且舞台上的预加载预设的实例,和玩家预设的实例不再显示坐标变换属性和变换拖柄。
+
+你可以使用预加载预设来制作Add On,相关的文档[在这里](../../20-玩法开发/14-预设玩法编程/9-第一个预设Mod/7-使用预设制作AddOn.md)。
+
+
+
+### 手机端Mod适配电脑端优化
+
+旧版编辑器新增按键绑定组件,你可以通过这个组件将键盘的按键与自定义的事件绑定起来。
+
+
+
+简易射击模板已更新,通过使用按键绑定组件进行了电脑端适配,效果如下图。
+
+关于如何适配请移步[适配PC文档](../../20-玩法开发/19-手机电脑适配/1-PE模组适配PC.md)。新版编辑器的适配将在后续更新。
+
+将Mod从手机端适配到电脑端的成本并不高,但是可以增加开发者的收入,欢迎大家积极适配并将自己的手机端组件同步上架到电脑端。
+
+
+
+### 其他更新
+
+- 可以在关卡编辑器中开关特效预设描边了
+- 预设API文档优化
+- 导入资源包时,自动对玩家预设和绑定同一实体的实体预设进行合并
+- 新建零件时加入一些注释
+- 现在支持导入不带动画的FBX模型文件了
+- 其他问题修复和稳定性优化
diff --git a/mcguide/10-新内容/1-开发工作台/997-0.16.16.md b/mcguide/10-新内容/1-开发工作台/997-0.16.16.md
new file mode 100644
index 0000000..4907058
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/997-0.16.16.md
@@ -0,0 +1,67 @@
+# 2021.8.26 版本0.16.16
+
+### 导入、导出资源包
+
+我们在上个版本中增加了内置资源包这一结构,在这个版本中,你可以导出/导入自己的资源包了。详情请参考[资源包](../../15-资源管理/10-资源包.md)文档。
+
+
+
+### 玩家相关零件回归
+
+旧版关卡编辑器的玩家相关组件已通过零件的方式回归,你可以通过资源管理器的导入内置资源包的功能添加他们。
+
+回归的模块如下:
+
+- 初始物品
+- 初始装备
+- 技能
+- 排行榜
+- 有限复活
+
+
+
+### 零件代码优化
+
+零件语法现在只需要支持python2,例如下面这些写法都不会再产生错误了
+
+```python
+for i in xrange(1, 5):
+ print(i)
+ print i
+ print 1 <> 2
+ print `1+2`
+```
+
+大部分情况下可以在零件的文件头部import了,import不再限于函数内
+
+```python
+from Preset.Model.PartBase import PartBase
+import random
+from Preset.Model.GameObject import registerGenericClass
+from Config import A, B #Config.py为同目录下的文件,A、B是Config.py里的函数/类
+from mod import client
+from mod.client import extraClientApi
+from mod.server import extraServerApi
+```
+
+### Apollo快速切服
+
+对于需要频繁切服的游戏类型(例如小游戏),我们提供了快速切服的功能,详情请参考[快速切服](../../27-网络游戏/课程8:性能优化/第3节:快速切服.md)文档。
+
+
+
+### Apollo第三方插件
+
+新增“更多插件”分页,可查看并下载官方收集的第三方插件。
+
+
+
+
+
+### 其他更新
+
+- 优化Unicode编码问题
+- 新建零件优化
+- 零件语法错误提示优化
+- 一批新的预设API,详情参考 预设API更新信息
+- 问题修复和稳定性优化
diff --git a/mcguide/10-新内容/1-开发工作台/998-0.16.15.md b/mcguide/10-新内容/1-开发工作台/998-0.16.15.md
new file mode 100644
index 0000000..5aff9d5
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/998-0.16.15.md
@@ -0,0 +1,65 @@
+# 2021.8.12 版本0.16.15
+
+### 序列帧支持动态颜色
+
+序列帧特效现在支持调节每一帧的颜色了。
+
+
+
+### 布局面板
+
+界面编辑器新增布局面板控件。
+
+挂在这个面板控件下的控件可以自动排列,并且有水平和垂直两种排列方式可以选择。
+
+
+
+### 开发包支持素材的旋转,缩放
+
+现在在mod pc包可以正常的预览经过旋转和缩放的素材了。
+
+方块预设可以旋转,但是无法缩放。
+
+注意:想要在移动端上生效仍需等到我的世界中国版1.24版本
+
+
+
+### 传送门预设
+
+使用新版编辑器的资源管理器导入资源包功能来导入传送门预设。
+
+导入的资源包括NePortalPreset(预设),和neportal:neportal(方块配置)。
+
+此功能与旧版编辑器-关卡编辑器的传送门组件功能相同。
+
+
+
+### 界面预设
+
+预设架构新增了一种新的预设,界面预设。
+
+你可以创建UI预设并将其放置在场景中,或者挂在现有的预设下。
+
+如下图,在实体预设(牛)下面挂了一个进度条UI。
+
+
+
+界面预设提供了一系列的参数。详细介绍请参考[界面预设](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/10-预设/5-界面预设.md)的文档。
+
+界面预设在编辑器和Mod PC开发包可用,需要等到我的世界中国版1.24版本才可以在移动端使用。
+
+
+
+### Apollo调试工具优化
+
+升级Apollo控制台调试功能,优化脚本测试、原生指令、POST指令的输入以及输出显示方式。
+
+
+
+### 其他更新
+
+- 预设API文档优化
+- 交易表配置优化
+- 一些新的 预设API
+- 预设API(1.23.1和1.23.2)加入补全库
+- 问题修复和稳定性优化
diff --git a/mcguide/10-新内容/1-开发工作台/999-历史.md b/mcguide/10-新内容/1-开发工作台/999-历史.md
new file mode 100644
index 0000000..75d84c4
--- /dev/null
+++ b/mcguide/10-新内容/1-开发工作台/999-历史.md
@@ -0,0 +1,444 @@
+# 历史更新信息
+
+## 2021.7.29 版本0.16.14
+
+1. Apollo:
+ - 优化热更失败的显示方式
+2. 预设编辑器:
+ - 玩家预设增加史蒂夫的预览
+3. 预设架构:
+ - 在零件的API中增加了一些常用的Mod API,详情见 预设API文档
+ - 掉落配置
+ - 交易配置
+4. 特效编辑器:
+ - 时间轴支持区间播放和帧跳转
+
+## 2021.7.19 版本0.16.13
+
+* 修复若干问题,优化平台体验。
+
+## 2021.7.15 版本0.16.12
+
+1. 重大版本更新!
+ - 全新的编辑器版本!在编辑器中纳入了对玩法编程的支持
+ - 详细更新信息请查看以下文档链接:
+ - 教学中心 - 编辑器基础:[新版编辑器的各模块使用说明](../../20-玩法开发/14-预设玩法编程/0-理解预设系统/7-预设编辑器使用说明.md)
+ - 教学中心 - 使用预设开发:[从示例到深入理解的预设架构使用说明](../../20-玩法开发/14-预设玩法编程/9-第一个预设Mod/0-创建新版作品.md)
+ - 技术手册 - 预设API: 预设架构的API手册
+2. 预设架构:
+ - 由预设,零件,实例组成的全新代码框架
+ - 一整套预设API(请在更新Studio后重新安装补全库)
+ - 完全的面向对象的架构!
+ - 拼装式的逻辑整合方式,即插即用,便于逻辑的复用和模块化
+ - 在编辑器中修改代码属性,部分系统事件自动分发,客户端/服务端属性自动同步等高级特性
+3. 新版编辑器:
+ - 预设编辑器:用于预览,编辑和拼装预设
+ - 关卡编辑器:完全重做,现在是主场景编辑器,可以将拼装好的预设放置在此处并进行调整
+ - 资源管理器:新增新建文件向导,用于引导式的创建文件,并自动创建配套文件并补充必要代码
+ - 配置:使用编辑器直接对附加包Json进行编辑,支持实体行为包组件的几乎所有字段
+4. 启动器:
+ - 新增新版编辑器/编辑器双版本的支持,现在可以升级旧版作品到新版
+ - 增加新版本的入门脚本模板,简易射击模板,预设示例模板
+ - 增加新闻页
+5. 编辑器:
+ - 特效编辑器
+ - 时间轴现在可以拖拽拖柄了
+ - 骨骼模型的骨骼数量增加到70
+
+## 2021.6.23 版本0.16.11
+
+- 修复入门脚本模板和简易设计模板的问题
+
+## 2021.6.17 版本0.16.10
+
+1. Apollo:
+ - 优化部署过程效率
+ - 官方插件界面支持搜索
+2. 通用:
+ - 其他问题修复和体验优化
+
+## 2021.6.4 版本0.16.9
+
+1. 特效编辑器:
+ - 滚动滚轮将推进/拉远相机,而不是改变相机的fov
+ - 挂点信息支持撤销操作
+2. 界面编辑器:
+ - 网格控件新增网格调节方式 - 水平模式
+3. Apollo:
+ - worlds文件夹下的pack_id增加校验与自动修复功能
+ - 优化测试阶段部署操作
+ - 支持一键调整所有服务器类型的大、小版本
+4. 通用:
+ - 其他问题修复和体验优化
+
+## 2021.5.20 版本0.16.8
+
+1. Apollo:
+ - 网络服mod支持自动部署
+ - 开启自动部署后,定期检测mod目录,若发生变更则自动进行部署
+ - 自动部署功能可用于子账号协同开发。
+ - 热更功能拆分为服务器热更和客户端热更
+ - 支持地图复制
+2. 通用:
+ - 其他问题修复和体验优化
+
+## 2021.5.7 版本0.16.7
+
+- 修复若干问题,优化平台体验。
+
+## 2021.4.22 版本0.16.6
+
+1. 界面编辑器:
+ - 增加了更多的分辨率选项
+ - 可以看到预览窗当前折算后的实际分辨率了
+2. 特效编辑器:
+ - 环状序列帧的高度属性调整为浮点值
+3. Apollo:
+ - 在审核、上线阶段时增加部署 运营数据 插件的提示
+ - 支持客户端热更
+ - 启动器的网络服开发分页增加工具箱按钮
+
+## 2021.4.15 版本0.16.5
+
+1. 地图编辑器:
+ - 保存结构时新增网易版优化结构
+ - 增加内置素材 沉船,海底神殿,林中府邸
+2. 特效编辑器:
+ - 粒子初始旋转,旋转速度支持y方向
+ - 粒子特效的贴图和序列帧属性,序列帧特效的贴图属性的修改可以实时显示结果
+ - 粒子、序列帧增加延迟开始播放的属性
+ - 场景特效修改颜色实时生效
+ - 粒子发射器支持锥形
+ - 特效可以选择在停止时不销毁已发射的粒子
+ - 序列帧支持Add混合模式
+3. 启动器:
+ - 添加 java forge 1.16版本
+4. 通用:
+ - 新增移动端调试功能,用来查看 PC 和 移动端(暂只包括安卓)的日志,管理游戏加载的 mod 和调整应用内文件数据,详情请查看文档中的调试工具说明
+ - 基岩版组件新增“自定义维度”模板
+ - 网络服模板增加小游戏模板
+ - 禁用了鼠标在下拉框上时,滚动滚轮会切换下拉框选项的功能
+ - 其他问题修复
+
+## 2021.3.25 版本0.16.3
+
+1. 地图编辑器:
+ - 相机组件不再影响地图编辑器的游戏模式
+ - 能见度过低时将出现文字提示
+2. UI编辑器:
+ - 通用特性的位置,尺寸等支持新写法,支持透明度等新特性
+ - 文本,图片控件支持新特性
+ - 缩放功能的外观优化
+3. 通用:
+ - 优化属性面板的滑动条的撤销操作
+ - 关闭编辑器时,可以选择不保存对地图的改动
+ - 导入部分资源时,会出现一个资源导入的进度弹窗
+ - 内嵌游戏崩溃时,将弹出崩溃反馈弹窗(您将可以在这里针对该次崩溃对我们进行直接的反馈)
+ - 属性窗口的拉伸逻辑优化
+ - 可以选择beta版代码库
+ - 1.22beta版本离线文档增加自定义场景示例
+
+## 2021.3.16 版本0.16.2
+
+1. modpc包以及测试版启动器支持1.22beta版本
+
+## 2021.3.11 版本0.16.1
+
+1. 地图编辑器:
+ - 剪切板增加是否复制/粘贴空气的选项
+2. UI编辑器:
+ - 纸娃娃模型缺失时,增加导入提示
+3. 特效编辑器:
+ - 支持导出模型下挂接特效的参数
+ - 粒子/序列帧支持越靠近相机越透明
+ - 挂点,特效列表支持del键删除特效
+ - 粒子展开发射器属性时,显示发射器的形状
+4. 启动器:
+ - 1.22beta版本推出后(预计3月15日),开发者可下载1.22beta版本的ModPC开发包以及测试版登录器
+5. 通用:
+ - Apollo上线阶段服务器支持选择部署已过审版本,无需重新提审
+ - 新用户登录时会开启教学
+ - 在设置中选择是否在特效编辑器、地图编辑器中显示Mod的UI
+ - 资源管理器里可以右键文件打开所在目录
+ - 属性面板中的下拉框支持通过键盘上下键切换条目
+ - 可以在设置中开启内嵌游戏的精美图像
+ - 开发测试默认不勾选 "调试器中的断言中断"
+6. 修复以下问题:
+ - 特效编辑器打开贴图所在的文件夹错误
+ - mod pc开发包的铁砧问题
+ - 部分情况下的编辑器启动失败问题
+7. 性能:
+ - 提高开发测试的启动速度
+ - 优化大范围撤销重做的耗时
+ - 内嵌游戏首次输入命令的卡顿优化
+ - 大型生物放置卡顿优化
+ - 统计方块的性能优化
+
+## 2021.1.28 版本0.16.0
+
+1. 地图编辑器:
+ - 材质列表支持更多方块。
+ - 素材扩充。
+2. UI编辑器:
+ - 视窗支持缩放和拖拽。
+ - 增加文字行间距属性。
+ - UI图片支持配置为原生图片。
+3. 特效编辑器:
+ - 第一人称模型预览支持左键点击事件。
+ - 粒子生存时间支持两位小数。
+ - 原生模型支持世界内设置挂点位置、坐标。
+ - 属性更改现在可以撤销。
+ - 使用形状发射粒子时,形状将使用线框渲染出来。
+4. 启动器:
+ - 进行开发测试过的作品将显示在最近列表。
+5. 通用:
+ - 设置中增加云朵开关。
+ - fbx文件导入导出优化。
+ - 可导出多个动作在一个fbx文件。
+ - 新建作品时,出生点坐标支持负数。
+ - 增加了备份作品的提示。
+6. 修复以下问题:
+ - 模型大小缓存问题。
+7. 其他优化:
+ - 资源管理器拷贝大量文件时的性能。
+ - 渲染方块生成。
+ - 地图编辑器编辑模式界面优化。
+ - 资源管理器某些文字颜色调整。
+ - 特效编辑器中发射器的属性名称和提示。
+ - 测试日志与服务器日志搜索优化。
+
+## 2021.1.22 版本0.15.9
+
+1. 通用:
+ - modPC开发包升级至1.21版本。
+
+## 2021.1.7 版本0.15.8
+1. 特效编辑器:
+ - 移除冗余的主角模型配置,统一使用挂点属性中挂接模型选项。
+ - 导入bbmodel模型时,方块物品贴图现在为可选,如未设置则使用模型文件自带贴图。
+2. 界面编辑器:
+ - 控件属性名默认情况下可以完整显示。
+3. 地图编辑器:
+ - 编辑模式下,支持三种镜像翻转操作。
+4. 通用:
+ - 优化日志搜索,增加大小写匹配,正则匹配,全词匹配功能。
+ - 编辑器界面中的输入框,现在点击时默认全选。
+ - 编辑器界面中支持Tab键控制焦点。
+ - 启动器设置中,增加编辑器游戏窗口帧率限制。在低配置电脑上推荐开启。
+5. 其他:
+ - 优化不同情况下编辑器内默认能见度。
+ - 若干稳定性及细节优化。
+
+## 2020.12.24 版本0.15.7
+1. 特效编辑器:
+ - 时间轴支持前后逐帧播放。
+2. 界面编辑器:
+ - 新增物品渲染控件,以支持在界面上显示物品。
+3. 通用:
+ - 现在可以点击坐标轴旋转视角。
+ - 优化内置资源管理器对大量文件操作时的性能。
+ - 优化特效编辑器中下拉列表性能。
+4. 其他:
+ - 修复某些情况下编辑器卡死。
+ - 修复某些情况下不显示编辑器内游戏窗口。
+ - 修复若干导致编辑器崩溃的问题。
+
+## 2020.12.10 版本0.15.6
+
+1. 特效编辑器:
+ - 现在可以使用滚轮控制视角远近。
+ - 粒子朝向支持水平速度方向。
+2. 启动器:
+ - 新增最近分页。
+ - 界面调整。
+ - 在编辑/运行作品时,可恢复默认游戏设置。
+ - 现在会记录每个作品退出时的编辑器类型。
+ - 邮件内容支持链接。
+3. 通用:
+ - 粘贴属性优化。
+ - 地图编辑器素材导入模型支持FBX贴图解析。
+4. 修复以下问题:
+ - 某些情况下编辑器卡死。
+ - 某些情况下无法启动内嵌游戏。
+ - 若干导致编辑器崩溃的问题。
+
+## 2020.11.26 版本0.15.5
+
+1. 地图编辑器:
+ - 编辑环境下确定生成可用Enter键确认。
+ - 统一素材名称的长度为10个字符。
+ - 填充工具弹出窗口支持Esc键关闭。
+ - 素材库的素材在未放置时不会再显示确定生成等按钮。
+ - 修复部分错误的材质名称。
+ - 讲台、篝火、钟、传送门等方块现在能在编辑状态正常渲染了。
+ - 调整了选取时的选区透明度,现在能更清楚看到选区内容了。
+2. 特效编辑器:
+ - 视角按钮在首次进入时能正常显示选中状态。
+ - 增加深度测试开关。
+3. 界面编辑器:
+ - 当控件不可添加子控件时,添加按钮置灰。
+ - 控件列表中的控件现在支持F2键重命名。
+ - 资源管理现在会自动刷新。
+ - 右键控件后点击复制路径按钮,可以复制控件路径。
+4. 通用:
+ - 作品缩略图生成规则调整。
+ - 优化新建作品的流程和提示。
+ - 现在焦点在游戏中时,也可以按Ctrl+S保存。
+ - 现在SDK安装失败时有更明确的提示。
+ - 现在修改作品配置时能看到更多作品信息。
+ - 优化若干界面的提示。
+ - Apollo申请入口现在更明显了。
+ - 网络服分页增加工具箱入口。
+5. 修复以下问题:
+ - 某些情况下编辑器自动变为前台应用。
+ - 交易组件中抵押物品能够为零或负数。
+ - 某些情况下坐骑缩放不生效。
+ - 某些情况下素材库导出Obj文件导致编辑器无响应。
+ - 素材库导入模型文件不支持中文路径。
+ - 若干编辑器界面问题。
+ - 某些情况下编辑器或引擎崩溃。
+ - 编辑大型界面文件时,添加组件卡死。
+
+## 2020.11.12 版本0.15.4
+
+1. 地图编辑器:
+ - 红石、铁轨、床摆放时可选择方向。
+ - 材质预设界面优化。
+ - 剪切板粘贴时,现在会选择最近一次复制的内容。
+ - 现在可从地图编辑器直接启动游戏测试。
+2. 特效编辑器:
+ - 优化时间轴表现效果。
+3. 界面编辑器:
+ - 鼠标悬停在贴图属性时,显示图片路径。
+ - 支持设置游戏分辨率(宽高比)。
+ - 在无画布时也可启动游戏测试。
+4. 通用:
+ - 资源管理器支持快捷键重命名和删除。
+ - 资源管理器导入按钮合并。
+ - 提升编辑器中游戏启动速度。
+5. 修复以下问题:
+ - 某些情况下无法启动Studio(双击图标后消失)。
+ - 修复部分模板错误。
+
+## 2020.10.29 版本0.15.3
+
+1. 地图编辑器:
+ - 优化大尺寸选区操作。
+ - 新增时间设置功能。
+2. 关卡编辑器:
+ - 组件及生物列表支持多选及快捷键操作。
+ - 优化有较多组件时的性能。
+3. 特效编辑器:
+ - 挂点可被用在所有动作。
+ - 优化旋转操作。
+4. 界面编辑器:
+ - 批量操作现在支持撤销。
+ - 优化大型界面的读取速度。
+5. 通用:
+ - 支持Python代码热更新,详见[调试信息](../../20-玩法开发/13-模组SDK编程/2-Python脚本开发/0-脚本开发入门.md#如何调试)。
+ - 优化交互反馈。
+ - 修复某些情况下编辑器卡死的问题。
+ - 资源管理器支持图片预览。
+ - 整体性能优化。
+
+## 2020.10.26 版本0.15.2
+
+1. 修复以下问题:
+ - 某些情况下启动程序无响应。
+
+
+## 2020.10.15 版本0.15.1
+
+1. 启动器:
+ - 各个模板内的组件版本更新到了最新版本。
+2. 地图编辑器:
+ - 优化大尺寸操作的内存和性能。
+3. 关卡编辑器:
+ - 支持随时修改自定义生物的id,资源等属性。
+ - 丰富了生物组件的资源选项。
+4. 特效编辑器:
+ - 新增第一人称模型修改,用于修改人物的第一人称显示模型,详情请查阅[第一人称模型修改](../../16-美术/9-特效/10-模型导入.md#第一人称模型修改)。
+ - 规范化史蒂夫的名称为Steve。
+5. 界面编辑器:
+ - 优化创建控件效率。
+ - 支持控件跨画布的复制、粘贴、拖动操作。
+ - 规范化PaperDoll的名称为纸娃娃。
+
+## 2020.09.24 版本0.15.0
+
+1. 启动器:
+ - 增加导出作品设置。
+2. 地图编辑器:
+ - 部分界面微调。
+3. 关卡编辑器:
+ - 新建的生物组件默认使用僵尸模型。
+ - 配方产出数量设置生效。
+4. 特效编辑器:
+ - 支持从文件管理器拖拽特效Json至挂点。
+ - 支持从文件管理器拖拽图片至粒子属性。
+ - 支持预览自定义序列帧。
+5. 界面编辑器:
+ - 优化控件的拖拽表现,支持多个控件同时拖动。
+ - 控件属性优化。
+ - 支持控件重名和继承。
+ - 性能优化
+6. 提升PC开发包下载速度。
+7. 修复以下问题:
+ - 某些情况下编辑器无法正常唤起。
+ - 某些情况下UI编辑器卡死。
+ - 某些情况下编辑器白屏。
+ - 特效编辑器无法正确处理某些Json文件。
+
+
+## 2020.09.10 版本0.14.7
+
+1. 地图编辑器:
+ - 扩展笔刷工具,新增单点、圆柱、半球笔刷,详见[笔刷功能](../../14-地图制作/2-地图编辑器使用说明.md#笔刷功能)。
+ - 新增地形工具,包括填充、隆起、植物等5种地形,详见[地形功能](../../14-地图制作/2-地图编辑器使用说明.md#地形功能)。
+2. 关卡编辑器:
+ - 工具栏中增加”添加组件”按钮。
+3. 特效编辑器:
+ - 游戏区域的视角调整为右键操作。
+ - 粒子特效增加随机播放设置项,详见[序列帧随机播放shuffle](../../16-美术/9-特效/70-中国版特效属性详细说明.md#序列帧随机播放shuffle)。
+4. 编辑器新增反馈功能,入口位于菜单“帮助”->“反馈”。
+5. 修复了若干Bug。
+
+## 2020.08.27 版本0.14.6
+
+1. 启动器:
+ - 支持组件快捷发布到平台,入口位于作品页的“更多”菜单中,详见[发布作品](../../12-入门教程/20-MC%20Studio使用说明.md#发布作品)。
+ - 更新了简易界面逻辑模板,演示了多种界面控件(如按钮、文本输入框等等)的使用方法。
+3. 关卡编辑器:
+ - 新增传送门组件,可快速配置类似下界传送门的功能。入口位于关卡编辑器组件->维度->自定义传送门。
+4. 编辑器中增加“天气”设置项,入口位于编辑器作品菜单->设置->内嵌游戏->天气
+ - 开启天气后,可通过指令修改编辑器内嵌游戏的天气。
+5. 增加编辑器使用指引:
+ - 点击编辑器右上角的“?”按钮,可打开编辑器相应的网页。
+ - 鼠标移至编辑器内窗口右上角的“?”按钮,会显示相应功能的简介。
+6. 修复以下Bug:
+ - 编辑器未启动时仍提示进程已存在。
+ - 脚本测试日志窗口复制全部日志功能无效。
+ - 修改Json文件需启动游戏多次才生效。
+ - 地图编辑器游戏模式中,打开背包界面不显示鼠标指针。
+
+## 2020.08.13 版本0.14.5
+
+1. 启动器:
+ - 支持我的世界Java版1.15版本。
+ - 基岩版网络服显示代理服和控制服地址。
+2. 地图编辑器
+ - 优化方块模型导入功能。
+3. 关卡编辑器:
+ - 涉及物品的组件支持更丰富的物品类型。
+ - 优化组件中点和区域坐标的操作。
+ - 支持预览自定义方块。
+4. 特效编辑器:
+ - 优化分组预览效果。
+ - 支持批量导入FBX模型。
+5. 界面编辑器:
+ - 九宫格支持旧版和原版两种选择。
+ - 文本输入框新增可配置属性。
+6. 配置项放入统一的设置界面。
+7. 修复以下Bug:
+ - 地图编辑器数字键无法快捷选择材质。
+ - 关卡编辑器自定义特征组件的部分特征生成时机无效。
\ No newline at end of file
diff --git a/mcguide/10-新内容/1-开发工作台/README.md b/mcguide/10-新内容/1-开发工作台/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/mcguide/10-新内容/1-开发工作台/images/1-1.png b/mcguide/10-新内容/1-开发工作台/images/1-1.png
new file mode 100644
index 0000000..e0bb581
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/1-1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/13.gif b/mcguide/10-新内容/1-开发工作台/images/13.gif
new file mode 100644
index 0000000..e9344b2
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/13.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/14.gif b/mcguide/10-新内容/1-开发工作台/images/14.gif
new file mode 100644
index 0000000..f2aa3e9
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/14.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/2.gif b/mcguide/10-新内容/1-开发工作台/images/2.gif
new file mode 100644
index 0000000..2df90e3
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/2.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/20210828215544.0a5111ed.png b/mcguide/10-新内容/1-开发工作台/images/20210828215544.0a5111ed.png
new file mode 100644
index 0000000..bff201b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/20210828215544.0a5111ed.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/20210828222031.e40fa45d.png b/mcguide/10-新内容/1-开发工作台/images/20210828222031.e40fa45d.png
new file mode 100644
index 0000000..0b727a0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/20210828222031.e40fa45d.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/2021_08_11_20_02_37_787.gif b/mcguide/10-新内容/1-开发工作台/images/2021_08_11_20_02_37_787.gif
new file mode 100644
index 0000000..69723df
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/2021_08_11_20_02_37_787.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/2022_01_05_19_47_30_428.gif b/mcguide/10-新内容/1-开发工作台/images/2022_01_05_19_47_30_428.gif
new file mode 100644
index 0000000..899c8a5
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/2022_01_05_19_47_30_428.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/220915/Untitled.png b/mcguide/10-新内容/1-开发工作台/images/220915/Untitled.png
new file mode 100644
index 0000000..a6abae9
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/220915/Untitled.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/220915/Untitled1.png b/mcguide/10-新内容/1-开发工作台/images/220915/Untitled1.png
new file mode 100644
index 0000000..5eab5df
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/220915/Untitled1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/220928/contentlib.png b/mcguide/10-新内容/1-开发工作台/images/220928/contentlib.png
new file mode 100644
index 0000000..f84f90f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/220928/contentlib.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/220928/experimentaloption.png b/mcguide/10-新内容/1-开发工作台/images/220928/experimentaloption.png
new file mode 100644
index 0000000..43a17e4
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/220928/experimentaloption.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/220928/group_tab_sound.png b/mcguide/10-新内容/1-开发工作台/images/220928/group_tab_sound.png
new file mode 100644
index 0000000..4053758
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/220928/group_tab_sound.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/220928/template.png b/mcguide/10-新内容/1-开发工作台/images/220928/template.png
new file mode 100644
index 0000000..dab9360
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/220928/template.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221018/contentlib.png b/mcguide/10-新内容/1-开发工作台/images/221018/contentlib.png
new file mode 100644
index 0000000..bce4846
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221018/contentlib.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221018/feature.png b/mcguide/10-新内容/1-开发工作台/images/221018/feature.png
new file mode 100644
index 0000000..d8cf311
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221018/feature.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221018/music.png b/mcguide/10-新内容/1-开发工作台/images/221018/music.png
new file mode 100644
index 0000000..30beb19
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221018/music.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221018/template.png b/mcguide/10-新内容/1-开发工作台/images/221018/template.png
new file mode 100644
index 0000000..4203dde
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221018/template.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/A1.gif b/mcguide/10-新内容/1-开发工作台/images/221101/A1.gif
new file mode 100644
index 0000000..2005dd6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/A1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/gnq.png b/mcguide/10-新内容/1-开发工作台/images/221101/gnq.png
new file mode 100644
index 0000000..734cb9f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/gnq.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/kongjianku.png b/mcguide/10-新内容/1-开发工作台/images/221101/kongjianku.png
new file mode 100644
index 0000000..a6e4020
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/kongjianku.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/ljdttest.png b/mcguide/10-新内容/1-开发工作台/images/221101/ljdttest.png
new file mode 100644
index 0000000..b5fb125
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/ljdttest.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/nrkzpmb.png b/mcguide/10-新内容/1-开发工作台/images/221101/nrkzpmb.png
new file mode 100644
index 0000000..de3f91f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/nrkzpmb.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/nrkzyb.png b/mcguide/10-新内容/1-开发工作台/images/221101/nrkzyb.png
new file mode 100644
index 0000000..41f31b0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/nrkzyb.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/tojiegou.gif b/mcguide/10-新内容/1-开发工作台/images/221101/tojiegou.gif
new file mode 100644
index 0000000..99cc935
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/tojiegou.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/yscjyh.png b/mcguide/10-新内容/1-开发工作台/images/221101/yscjyh.png
new file mode 100644
index 0000000..08c17a7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/yscjyh.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221101/zpmbsy.gif b/mcguide/10-新内容/1-开发工作台/images/221101/zpmbsy.gif
new file mode 100644
index 0000000..6590827
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221101/zpmbsy.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221115/guard.png b/mcguide/10-新内容/1-开发工作台/images/221115/guard.png
new file mode 100644
index 0000000..57e40e2
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221115/guard.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221115/menupos.png b/mcguide/10-新内容/1-开发工作台/images/221115/menupos.png
new file mode 100644
index 0000000..2c045d5
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221115/menupos.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221115/mepfoldertree.png b/mcguide/10-新内容/1-开发工作台/images/221115/mepfoldertree.png
new file mode 100644
index 0000000..9f6a771
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221115/mepfoldertree.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221115/newicon.png b/mcguide/10-新内容/1-开发工作台/images/221115/newicon.png
new file mode 100644
index 0000000..e2830dc
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221115/newicon.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221115/structure.png b/mcguide/10-新内容/1-开发工作台/images/221115/structure.png
new file mode 100644
index 0000000..66db3fe
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221115/structure.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221115/yskjkb.png b/mcguide/10-新内容/1-开发工作台/images/221115/yskjkb.png
new file mode 100644
index 0000000..6317957
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221115/yskjkb.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/A1.png b/mcguide/10-新内容/1-开发工作台/images/221215/A1.png
new file mode 100644
index 0000000..a0fbec1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/A1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/A2.png b/mcguide/10-新内容/1-开发工作台/images/221215/A2.png
new file mode 100644
index 0000000..8e3cd3f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/A2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/A4.png b/mcguide/10-新内容/1-开发工作台/images/221215/A4.png
new file mode 100644
index 0000000..78823d8
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/A4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/A5.png b/mcguide/10-新内容/1-开发工作台/images/221215/A5.png
new file mode 100644
index 0000000..7ac25bf
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/A5.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/A6.png b/mcguide/10-新内容/1-开发工作台/images/221215/A6.png
new file mode 100644
index 0000000..eb73202
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/A6.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/A7.png b/mcguide/10-新内容/1-开发工作台/images/221215/A7.png
new file mode 100644
index 0000000..4c06faf
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/A7.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/B1.gif b/mcguide/10-新内容/1-开发工作台/images/221215/B1.gif
new file mode 100644
index 0000000..db45dfb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/B1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/B2.gif b/mcguide/10-新内容/1-开发工作台/images/221215/B2.gif
new file mode 100644
index 0000000..d9aaa1b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/B2.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/B3.gif b/mcguide/10-新内容/1-开发工作台/images/221215/B3.gif
new file mode 100644
index 0000000..1bd6af3
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/B3.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/B4.gif b/mcguide/10-新内容/1-开发工作台/images/221215/B4.gif
new file mode 100644
index 0000000..1487b87
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/B4.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/B5.gif b/mcguide/10-新内容/1-开发工作台/images/221215/B5.gif
new file mode 100644
index 0000000..2bec727
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/B5.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/B6.gif b/mcguide/10-新内容/1-开发工作台/images/221215/B6.gif
new file mode 100644
index 0000000..bc08634
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/B6.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/U1.png b/mcguide/10-新内容/1-开发工作台/images/221215/U1.png
new file mode 100644
index 0000000..4445539
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/U1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/contentlib.png b/mcguide/10-新内容/1-开发工作台/images/221215/contentlib.png
new file mode 100644
index 0000000..5def0a7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/contentlib.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/copy1.png b/mcguide/10-新内容/1-开发工作台/images/221215/copy1.png
new file mode 100644
index 0000000..2f9973a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/copy1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221215/reportbutton.png b/mcguide/10-新内容/1-开发工作台/images/221215/reportbutton.png
new file mode 100644
index 0000000..edc80a7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221215/reportbutton.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221229/A1.png b/mcguide/10-新内容/1-开发工作台/images/221229/A1.png
new file mode 100644
index 0000000..03f3b34
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221229/A1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221229/contentlib.png b/mcguide/10-新内容/1-开发工作台/images/221229/contentlib.png
new file mode 100644
index 0000000..670edeb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221229/contentlib.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221229/createaddon.png b/mcguide/10-新内容/1-开发工作台/images/221229/createaddon.png
new file mode 100644
index 0000000..fe8e204
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221229/createaddon.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221229/dmname.png b/mcguide/10-新内容/1-开发工作台/images/221229/dmname.png
new file mode 100644
index 0000000..98f300c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221229/dmname.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/221229/recipe.png b/mcguide/10-新内容/1-开发工作台/images/221229/recipe.png
new file mode 100644
index 0000000..47b7e67
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/221229/recipe.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/1.gif b/mcguide/10-新内容/1-开发工作台/images/22831/1.gif
new file mode 100644
index 0000000..c88b7c9
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/2.gif b/mcguide/10-新内容/1-开发工作台/images/22831/2.gif
new file mode 100644
index 0000000..f392479
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/2.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/Untitled.gif b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled.gif
new file mode 100644
index 0000000..2a1b5ae
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/Untitled.png b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled.png
new file mode 100644
index 0000000..aa86c05
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/Untitled1.png b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled1.png
new file mode 100644
index 0000000..cebb00b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/Untitled2.png b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled2.png
new file mode 100644
index 0000000..24d083f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/Untitled3.png b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled3.png
new file mode 100644
index 0000000..368955c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/Untitled4.png b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled4.png
new file mode 100644
index 0000000..c1975c0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/22831/Untitled5.png b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled5.png
new file mode 100644
index 0000000..49d138b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/22831/Untitled5.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230111/A1.png b/mcguide/10-新内容/1-开发工作台/images/230111/A1.png
new file mode 100644
index 0000000..ced134e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230111/A1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230111/A2.png b/mcguide/10-新内容/1-开发工作台/images/230111/A2.png
new file mode 100644
index 0000000..626328f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230111/A2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230111/A3.png b/mcguide/10-新内容/1-开发工作台/images/230111/A3.png
new file mode 100644
index 0000000..3a4b4e1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230111/A3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230111/A4.png b/mcguide/10-新内容/1-开发工作台/images/230111/A4.png
new file mode 100644
index 0000000..34710eb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230111/A4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230111/A6.png b/mcguide/10-新内容/1-开发工作台/images/230111/A6.png
new file mode 100644
index 0000000..fdbd961
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230111/A6.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230111/B35.gif b/mcguide/10-新内容/1-开发工作台/images/230111/B35.gif
new file mode 100644
index 0000000..efc62b6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230111/B35.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230111/copy.gif b/mcguide/10-新内容/1-开发工作台/images/230111/copy.gif
new file mode 100644
index 0000000..ab1f494
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230111/copy.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/A1.png b/mcguide/10-新内容/1-开发工作台/images/230207/A1.png
new file mode 100644
index 0000000..45721d5
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/A1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/A2.png b/mcguide/10-新内容/1-开发工作台/images/230207/A2.png
new file mode 100644
index 0000000..c8a6590
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/A2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/A3.png b/mcguide/10-新内容/1-开发工作台/images/230207/A3.png
new file mode 100644
index 0000000..07d4902
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/A3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/A4.png b/mcguide/10-新内容/1-开发工作台/images/230207/A4.png
new file mode 100644
index 0000000..6493fda
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/A4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/A5.png b/mcguide/10-新内容/1-开发工作台/images/230207/A5.png
new file mode 100644
index 0000000..979c535
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/A5.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/A6.png b/mcguide/10-新内容/1-开发工作台/images/230207/A6.png
new file mode 100644
index 0000000..bbd017d
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/A6.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/blankscript.png b/mcguide/10-新内容/1-开发工作台/images/230207/blankscript.png
new file mode 100644
index 0000000..40d8a16
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/blankscript.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/communicate.png b/mcguide/10-新内容/1-开发工作台/images/230207/communicate.png
new file mode 100644
index 0000000..575ec9c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/communicate.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/contentlib.png b/mcguide/10-新内容/1-开发工作台/images/230207/contentlib.png
new file mode 100644
index 0000000..528e0be
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/contentlib.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/dqbjq.png b/mcguide/10-新内容/1-开发工作台/images/230207/dqbjq.png
new file mode 100644
index 0000000..c5cfc18
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/dqbjq.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/hovertips.gif b/mcguide/10-新内容/1-开发工作台/images/230207/hovertips.gif
new file mode 100644
index 0000000..3c7bc4f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/hovertips.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/jcmb.png b/mcguide/10-新内容/1-开发工作台/images/230207/jcmb.png
new file mode 100644
index 0000000..ddc5d91
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/jcmb.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/setting.png b/mcguide/10-新内容/1-开发工作台/images/230207/setting.png
new file mode 100644
index 0000000..6b54cf7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/setting.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/uits.png b/mcguide/10-新内容/1-开发工作台/images/230207/uits.png
new file mode 100644
index 0000000..bc8a6e6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/uits.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/zjkf.png b/mcguide/10-新内容/1-开发工作台/images/230207/zjkf.png
new file mode 100644
index 0000000..133ab30
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/zjkf.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230207/zsk.png b/mcguide/10-新内容/1-开发工作台/images/230207/zsk.png
new file mode 100644
index 0000000..34ce658
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230207/zsk.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/A1.png b/mcguide/10-新内容/1-开发工作台/images/230221/A1.png
new file mode 100644
index 0000000..17fdc3d
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/A1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/A2.png b/mcguide/10-新内容/1-开发工作台/images/230221/A2.png
new file mode 100644
index 0000000..0742890
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/A2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/A3.png b/mcguide/10-新内容/1-开发工作台/images/230221/A3.png
new file mode 100644
index 0000000..1ff2d81
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/A3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/A4.png b/mcguide/10-新内容/1-开发工作台/images/230221/A4.png
new file mode 100644
index 0000000..918d911
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/A4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/A5.png b/mcguide/10-新内容/1-开发工作台/images/230221/A5.png
new file mode 100644
index 0000000..44e5492
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/A5.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/L1.png b/mcguide/10-新内容/1-开发工作台/images/230221/L1.png
new file mode 100644
index 0000000..c39f3ca
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/L1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/L2.png b/mcguide/10-新内容/1-开发工作台/images/230221/L2.png
new file mode 100644
index 0000000..7edbe7b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/L2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/L3.png b/mcguide/10-新内容/1-开发工作台/images/230221/L3.png
new file mode 100644
index 0000000..b54429c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/L3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/L5.gif b/mcguide/10-新内容/1-开发工作台/images/230221/L5.gif
new file mode 100644
index 0000000..be11f53
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/L5.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/L6.png b/mcguide/10-新内容/1-开发工作台/images/230221/L6.png
new file mode 100644
index 0000000..0f3cf70
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/L6.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230221/LYH4.png b/mcguide/10-新内容/1-开发工作台/images/230221/LYH4.png
new file mode 100644
index 0000000..ffeff0f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230221/LYH4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230309/achievement.png b/mcguide/10-新内容/1-开发工作台/images/230309/achievement.png
new file mode 100644
index 0000000..8f74b93
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230309/achievement.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230309/biome.png b/mcguide/10-新内容/1-开发工作台/images/230309/biome.png
new file mode 100644
index 0000000..a2e885c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230309/biome.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230309/filtercloud.png b/mcguide/10-新内容/1-开发工作台/images/230309/filtercloud.png
new file mode 100644
index 0000000..91b47e9
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230309/filtercloud.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230309/publishwork.png b/mcguide/10-新内容/1-开发工作台/images/230309/publishwork.png
new file mode 100644
index 0000000..2867975
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230309/publishwork.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230323/bb2fbx3.png b/mcguide/10-新内容/1-开发工作台/images/230323/bb2fbx3.png
new file mode 100644
index 0000000..adb9909
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230323/bb2fbx3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230323/config.png b/mcguide/10-新内容/1-开发工作台/images/230323/config.png
new file mode 100644
index 0000000..a202f32
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230323/config.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230323/config1.png b/mcguide/10-新内容/1-开发工作台/images/230323/config1.png
new file mode 100644
index 0000000..2c60977
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230323/config1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230323/config2.png b/mcguide/10-新内容/1-开发工作台/images/230323/config2.png
new file mode 100644
index 0000000..b988dd2
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230323/config2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230323/contentlib.png b/mcguide/10-新内容/1-开发工作台/images/230323/contentlib.png
new file mode 100644
index 0000000..f7e7bf2
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230323/contentlib.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230323/contentlib2.png b/mcguide/10-新内容/1-开发工作台/images/230323/contentlib2.png
new file mode 100644
index 0000000..da83f25
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230323/contentlib2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230323/contentlib3.png b/mcguide/10-新内容/1-开发工作台/images/230323/contentlib3.png
new file mode 100644
index 0000000..2464229
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230323/contentlib3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230406/all_state_replace.gif b/mcguide/10-新内容/1-开发工作台/images/230406/all_state_replace.gif
new file mode 100644
index 0000000..cc04773
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230406/all_state_replace.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230406/applydt.png b/mcguide/10-新内容/1-开发工作台/images/230406/applydt.png
new file mode 100644
index 0000000..0a89f37
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230406/applydt.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230406/config_panel1.png b/mcguide/10-新内容/1-开发工作台/images/230406/config_panel1.png
new file mode 100644
index 0000000..dfff99f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230406/config_panel1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230406/editconfig_filter.gif b/mcguide/10-新内容/1-开发工作台/images/230406/editconfig_filter.gif
new file mode 100644
index 0000000..07e8814
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230406/editconfig_filter.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230406/importwork.gif b/mcguide/10-新内容/1-开发工作台/images/230406/importwork.gif
new file mode 100644
index 0000000..1f181ab
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230406/importwork.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230406/quick_test1.gif b/mcguide/10-新内容/1-开发工作台/images/230406/quick_test1.gif
new file mode 100644
index 0000000..4b74bcc
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230406/quick_test1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230406/single_state_replace.gif b/mcguide/10-新内容/1-开发工作台/images/230406/single_state_replace.gif
new file mode 100644
index 0000000..8502b29
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230406/single_state_replace.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230418/particlemodel.gif b/mcguide/10-新内容/1-开发工作台/images/230418/particlemodel.gif
new file mode 100644
index 0000000..bc2403c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230418/particlemodel.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230418/placemutistructure.gif b/mcguide/10-新内容/1-开发工作台/images/230418/placemutistructure.gif
new file mode 100644
index 0000000..2295007
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230418/placemutistructure.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230418/searchwork.png b/mcguide/10-新内容/1-开发工作台/images/230418/searchwork.png
new file mode 100644
index 0000000..dc2403d
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230418/searchwork.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230504/addon2map.png b/mcguide/10-新内容/1-开发工作台/images/230504/addon2map.png
new file mode 100644
index 0000000..78fee12
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230504/addon2map.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230504/blockconfig.png b/mcguide/10-新内容/1-开发工作台/images/230504/blockconfig.png
new file mode 100644
index 0000000..1c7a562
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230504/blockconfig.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230504/configtemplate.png b/mcguide/10-新内容/1-开发工作台/images/230504/configtemplate.png
new file mode 100644
index 0000000..4b759cb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230504/configtemplate.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230504/ltyh.png b/mcguide/10-新内容/1-开发工作台/images/230504/ltyh.png
new file mode 100644
index 0000000..fe16148
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230504/ltyh.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230504/previewconfig.png b/mcguide/10-新内容/1-开发工作台/images/230504/previewconfig.png
new file mode 100644
index 0000000..c00452d
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230504/previewconfig.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230504/replaceblock.png b/mcguide/10-新内容/1-开发工作台/images/230504/replaceblock.png
new file mode 100644
index 0000000..2632190
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230504/replaceblock.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/iamge5.png b/mcguide/10-新内容/1-开发工作台/images/230530/iamge5.png
new file mode 100644
index 0000000..fcaa637
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/iamge5.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image1.png b/mcguide/10-新内容/1-开发工作台/images/230530/image1.png
new file mode 100644
index 0000000..37b3a87
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image10.png b/mcguide/10-新内容/1-开发工作台/images/230530/image10.png
new file mode 100644
index 0000000..1095627
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image10.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image2.png b/mcguide/10-新内容/1-开发工作台/images/230530/image2.png
new file mode 100644
index 0000000..39151a3
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image3.png b/mcguide/10-新内容/1-开发工作台/images/230530/image3.png
new file mode 100644
index 0000000..d52aa90
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image4.png b/mcguide/10-新内容/1-开发工作台/images/230530/image4.png
new file mode 100644
index 0000000..ce81e1f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image5.png b/mcguide/10-新内容/1-开发工作台/images/230530/image5.png
new file mode 100644
index 0000000..a750445
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image5.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image6.png b/mcguide/10-新内容/1-开发工作台/images/230530/image6.png
new file mode 100644
index 0000000..fcaa637
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image6.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image7.png b/mcguide/10-新内容/1-开发工作台/images/230530/image7.png
new file mode 100644
index 0000000..d17dd02
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image7.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image8.png b/mcguide/10-新内容/1-开发工作台/images/230530/image8.png
new file mode 100644
index 0000000..46d6e3e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image8.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/image9.png b/mcguide/10-新内容/1-开发工作台/images/230530/image9.png
new file mode 100644
index 0000000..9453d93
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/image9.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230530/largefeature.gif b/mcguide/10-新内容/1-开发工作台/images/230530/largefeature.gif
new file mode 100644
index 0000000..341fc0e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230530/largefeature.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/IntroduceUI-40.gif b/mcguide/10-新内容/1-开发工作台/images/230627/IntroduceUI-40.gif
new file mode 100644
index 0000000..92ab3c4
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/IntroduceUI-40.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/blockconfig.png b/mcguide/10-新内容/1-开发工作台/images/230627/blockconfig.png
new file mode 100644
index 0000000..a71fb23
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/blockconfig.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/book.png b/mcguide/10-新内容/1-开发工作台/images/230627/book.png
new file mode 100644
index 0000000..741857e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/book.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/hovertips.png b/mcguide/10-新内容/1-开发工作台/images/230627/hovertips.png
new file mode 100644
index 0000000..2b07e52
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/hovertips.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/icon.png b/mcguide/10-新内容/1-开发工作台/images/230627/icon.png
new file mode 100644
index 0000000..178097f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/icon.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/jigsawblock.gif b/mcguide/10-新内容/1-开发工作台/images/230627/jigsawblock.gif
new file mode 100644
index 0000000..5d507e2
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/jigsawblock.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/mapheight.png b/mcguide/10-新内容/1-开发工作台/images/230627/mapheight.png
new file mode 100644
index 0000000..18e75cf
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/mapheight.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/performancetool.png b/mcguide/10-新内容/1-开发工作台/images/230627/performancetool.png
new file mode 100644
index 0000000..0f78bad
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/performancetool.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/placelargefeature.gif b/mcguide/10-新内容/1-开发工作台/images/230627/placelargefeature.gif
new file mode 100644
index 0000000..67e84f1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/placelargefeature.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/random.png b/mcguide/10-新内容/1-开发工作台/images/230627/random.png
new file mode 100644
index 0000000..02ceaf1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/random.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/scaleandrot.png b/mcguide/10-新内容/1-开发工作台/images/230627/scaleandrot.png
new file mode 100644
index 0000000..daa7656
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/scaleandrot.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/trailconfig.png b/mcguide/10-新内容/1-开发工作台/images/230627/trailconfig.png
new file mode 100644
index 0000000..a034cfb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/trailconfig.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230627/trailedit.png b/mcguide/10-新内容/1-开发工作台/images/230627/trailedit.png
new file mode 100644
index 0000000..3f0a313
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230627/trailedit.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/colormap.png b/mcguide/10-新内容/1-开发工作台/images/230907/colormap.png
new file mode 100644
index 0000000..abf9ffe
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/colormap.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/colormapedit.png b/mcguide/10-新内容/1-开发工作台/images/230907/colormapedit.png
new file mode 100644
index 0000000..aea51c9
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/colormapedit.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/contentlibtab.png b/mcguide/10-新内容/1-开发工作台/images/230907/contentlibtab.png
new file mode 100644
index 0000000..972ac00
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/contentlibtab.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/effectmaterial.png b/mcguide/10-新内容/1-开发工作台/images/230907/effectmaterial.png
new file mode 100644
index 0000000..7a840b5
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/effectmaterial.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/imgaerotate.png b/mcguide/10-新内容/1-开发工作台/images/230907/imgaerotate.png
new file mode 100644
index 0000000..f2fbcf6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/imgaerotate.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/importmaterial.png b/mcguide/10-新内容/1-开发工作台/images/230907/importmaterial.png
new file mode 100644
index 0000000..4296325
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/importmaterial.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/itemconfig.png b/mcguide/10-新内容/1-开发工作台/images/230907/itemconfig.png
new file mode 100644
index 0000000..f79270c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/itemconfig.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/kjpy.gif b/mcguide/10-新内容/1-开发工作台/images/230907/kjpy.gif
new file mode 100644
index 0000000..21c97f2
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/kjpy.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/skeltonmodelmaterial.png b/mcguide/10-新内容/1-开发工作台/images/230907/skeltonmodelmaterial.png
new file mode 100644
index 0000000..ccea064
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/skeltonmodelmaterial.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/230907/v28_image_rotate.e6782f43.gif b/mcguide/10-新内容/1-开发工作台/images/230907/v28_image_rotate.e6782f43.gif
new file mode 100644
index 0000000..441b4d4
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/230907/v28_image_rotate.e6782f43.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/231116/V29blocked.png b/mcguide/10-新内容/1-开发工作台/images/231116/V29blocked.png
new file mode 100644
index 0000000..13e2025
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/231116/V29blocked.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/231116/V29editmodel.png b/mcguide/10-新内容/1-开发工作台/images/231116/V29editmodel.png
new file mode 100644
index 0000000..a90ffc3
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/231116/V29editmodel.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/231116/editpack.png b/mcguide/10-新内容/1-开发工作台/images/231116/editpack.png
new file mode 100644
index 0000000..f35e3aa
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/231116/editpack.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/231116/importmodelani.png b/mcguide/10-新内容/1-开发工作台/images/231116/importmodelani.png
new file mode 100644
index 0000000..bfc9232
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/231116/importmodelani.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/231116/multipass.png b/mcguide/10-新内容/1-开发工作台/images/231116/multipass.png
new file mode 100644
index 0000000..ca3317d
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/231116/multipass.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/231116/newnodes.png b/mcguide/10-新内容/1-开发工作台/images/231116/newnodes.png
new file mode 100644
index 0000000..d25af58
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/231116/newnodes.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/231116/refreshmaterial.gif b/mcguide/10-新内容/1-开发工作台/images/231116/refreshmaterial.gif
new file mode 100644
index 0000000..2ce1a56
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/231116/refreshmaterial.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/clienttick.png b/mcguide/10-新内容/1-开发工作台/images/240118/clienttick.png
new file mode 100644
index 0000000..dc7251e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/clienttick.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/clip.png b/mcguide/10-新内容/1-开发工作台/images/240118/clip.png
new file mode 100644
index 0000000..cdd87c1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/clip.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/delaynode.png b/mcguide/10-新内容/1-开发工作台/images/240118/delaynode.png
new file mode 100644
index 0000000..36ae60b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/delaynode.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/deleteani.png b/mcguide/10-新内容/1-开发工作台/images/240118/deleteani.png
new file mode 100644
index 0000000..c008744
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/deleteani.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/editscreensize.png b/mcguide/10-新内容/1-开发工作台/images/240118/editscreensize.png
new file mode 100644
index 0000000..da6f587
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/editscreensize.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/fov1.png b/mcguide/10-新内容/1-开发工作台/images/240118/fov1.png
new file mode 100644
index 0000000..527e05a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/fov1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/fov2.png b/mcguide/10-新内容/1-开发工作台/images/240118/fov2.png
new file mode 100644
index 0000000..d3f52d5
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/fov2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/showkeyframe.png b/mcguide/10-新内容/1-开发工作台/images/240118/showkeyframe.png
new file mode 100644
index 0000000..b4ceafb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/showkeyframe.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240118/stevepng.png b/mcguide/10-新内容/1-开发工作台/images/240118/stevepng.png
new file mode 100644
index 0000000..81f29c3
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240118/stevepng.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/aihelper.png b/mcguide/10-新内容/1-开发工作台/images/240411/aihelper.png
new file mode 100644
index 0000000..767c068
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/aihelper.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/biome.png b/mcguide/10-新内容/1-开发工作台/images/240411/biome.png
new file mode 100644
index 0000000..95a813d
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/biome.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/block.png b/mcguide/10-新内容/1-开发工作台/images/240411/block.png
new file mode 100644
index 0000000..0353d9f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/block.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/contentlib.png b/mcguide/10-新内容/1-开发工作台/images/240411/contentlib.png
new file mode 100644
index 0000000..4e69525
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/contentlib.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/delete.gif b/mcguide/10-新内容/1-开发工作台/images/240411/delete.gif
new file mode 100644
index 0000000..2805c17
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/delete.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/footpos.png b/mcguide/10-新内容/1-开发工作台/images/240411/footpos.png
new file mode 100644
index 0000000..8210dcc
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/footpos.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/material.png b/mcguide/10-新内容/1-开发工作台/images/240411/material.png
new file mode 100644
index 0000000..cab9c7e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/material.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/skybox1.gif b/mcguide/10-新内容/1-开发工作台/images/240411/skybox1.gif
new file mode 100644
index 0000000..1bdaaf6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/skybox1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240411/tag.gif b/mcguide/10-新内容/1-开发工作台/images/240411/tag.gif
new file mode 100644
index 0000000..03ac21a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240411/tag.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240619/allay.gif b/mcguide/10-新内容/1-开发工作台/images/240619/allay.gif
new file mode 100644
index 0000000..eeec4ec
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240619/allay.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240619/delete_control.gif b/mcguide/10-新内容/1-开发工作台/images/240619/delete_control.gif
new file mode 100644
index 0000000..6eb64df
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240619/delete_control.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240619/new_block.png b/mcguide/10-新内容/1-开发工作台/images/240619/new_block.png
new file mode 100644
index 0000000..0f42aac
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240619/new_block.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240710/modpcbugfix.gif b/mcguide/10-新内容/1-开发工作台/images/240710/modpcbugfix.gif
new file mode 100644
index 0000000..204bf8e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240710/modpcbugfix.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240710/preset_0.png b/mcguide/10-新内容/1-开发工作台/images/240710/preset_0.png
new file mode 100644
index 0000000..4c1a79b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240710/preset_0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240710/preset_1.png b/mcguide/10-新内容/1-开发工作台/images/240710/preset_1.png
new file mode 100644
index 0000000..683df33
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240710/preset_1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240710/timeline.gif b/mcguide/10-新内容/1-开发工作台/images/240710/timeline.gif
new file mode 100644
index 0000000..0b02d2a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240710/timeline.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240723/0.gif b/mcguide/10-新内容/1-开发工作台/images/240723/0.gif
new file mode 100644
index 0000000..7e8e3fc
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240723/0.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240723/0_0.png b/mcguide/10-新内容/1-开发工作台/images/240723/0_0.png
new file mode 100644
index 0000000..32a906f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240723/0_0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240723/0_1.png b/mcguide/10-新内容/1-开发工作台/images/240723/0_1.png
new file mode 100644
index 0000000..327fee0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240723/0_1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240723/1.gif b/mcguide/10-新内容/1-开发工作台/images/240723/1.gif
new file mode 100644
index 0000000..08f101e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240723/1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240723/1_0.png b/mcguide/10-新内容/1-开发工作台/images/240723/1_0.png
new file mode 100644
index 0000000..65ee637
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240723/1_0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240723/1_1.png b/mcguide/10-新内容/1-开发工作台/images/240723/1_1.png
new file mode 100644
index 0000000..c02849f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240723/1_1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240723/1_2.png b/mcguide/10-新内容/1-开发工作台/images/240723/1_2.png
new file mode 100644
index 0000000..80f05b3
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240723/1_2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240723/2.gif b/mcguide/10-新内容/1-开发工作台/images/240723/2.gif
new file mode 100644
index 0000000..92e992a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240723/2.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240808/0_0.png b/mcguide/10-新内容/1-开发工作台/images/240808/0_0.png
new file mode 100644
index 0000000..72f4c1e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240808/0_0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240808/0_1.png b/mcguide/10-新内容/1-开发工作台/images/240808/0_1.png
new file mode 100644
index 0000000..8509616
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240808/0_1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240822/0_0.png b/mcguide/10-新内容/1-开发工作台/images/240822/0_0.png
new file mode 100644
index 0000000..c806235
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240822/0_0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240822/0_1.gif b/mcguide/10-新内容/1-开发工作台/images/240822/0_1.gif
new file mode 100644
index 0000000..ae265ca
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240822/0_1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240904/0_0.gif b/mcguide/10-新内容/1-开发工作台/images/240904/0_0.gif
new file mode 100644
index 0000000..f9b8e04
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240904/0_0.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240904/0_1.gif b/mcguide/10-新内容/1-开发工作台/images/240904/0_1.gif
new file mode 100644
index 0000000..e2a0471
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240904/0_1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/240904/1_0.png b/mcguide/10-新内容/1-开发工作台/images/240904/1_0.png
new file mode 100644
index 0000000..1223dd7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/240904/1_0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161138958.png b/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161138958.png
new file mode 100644
index 0000000..9c9e308
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161138958.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161500923.png b/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161500923.png
new file mode 100644
index 0000000..a40470c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161500923.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161707780.png b/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161707780.png
new file mode 100644
index 0000000..11dea7d
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161707780.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161956663.png b/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161956663.png
new file mode 100644
index 0000000..5d53426
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241008/image-20241008161956663.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241024/0_0.png b/mcguide/10-新内容/1-开发工作台/images/241024/0_0.png
new file mode 100644
index 0000000..e5b1f94
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241024/0_0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241024/0_1.png b/mcguide/10-新内容/1-开发工作台/images/241024/0_1.png
new file mode 100644
index 0000000..f6febdb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241024/0_1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241106/0_1.png b/mcguide/10-新内容/1-开发工作台/images/241106/0_1.png
new file mode 100644
index 0000000..2fe2c63
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241106/0_1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241106/0_2.png b/mcguide/10-新内容/1-开发工作台/images/241106/0_2.png
new file mode 100644
index 0000000..deae08b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241106/0_2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241121/0_1.png b/mcguide/10-新内容/1-开发工作台/images/241121/0_1.png
new file mode 100644
index 0000000..4ec89fe
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241121/0_1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241121/0_2.png b/mcguide/10-新内容/1-开发工作台/images/241121/0_2.png
new file mode 100644
index 0000000..36acec6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241121/0_2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241121/0_3.png b/mcguide/10-新内容/1-开发工作台/images/241121/0_3.png
new file mode 100644
index 0000000..0617b6f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241121/0_3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241121/0_4.png b/mcguide/10-新内容/1-开发工作台/images/241121/0_4.png
new file mode 100644
index 0000000..2197c40
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241121/0_4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241121/0_5.png b/mcguide/10-新内容/1-开发工作台/images/241121/0_5.png
new file mode 100644
index 0000000..a5cfb2c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241121/0_5.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241205/0_0.png b/mcguide/10-新内容/1-开发工作台/images/241205/0_0.png
new file mode 100644
index 0000000..c6791af
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241205/0_0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241205/0_1.png b/mcguide/10-新内容/1-开发工作台/images/241205/0_1.png
new file mode 100644
index 0000000..42ed898
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241205/0_1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/241205/0_2.png b/mcguide/10-新内容/1-开发工作台/images/241205/0_2.png
new file mode 100644
index 0000000..eac0d40
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/241205/0_2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/3.gif b/mcguide/10-新内容/1-开发工作台/images/3.gif
new file mode 100644
index 0000000..7a6829b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/3.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/7.gif b/mcguide/10-新内容/1-开发工作台/images/7.gif
new file mode 100644
index 0000000..472ac9a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/7.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/A0.png b/mcguide/10-新内容/1-开发工作台/images/A0.png
new file mode 100644
index 0000000..c6ab2e9
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/A0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/A1.gif b/mcguide/10-新内容/1-开发工作台/images/A1.gif
new file mode 100644
index 0000000..13cbd17
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/A1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/A1.png b/mcguide/10-新内容/1-开发工作台/images/A1.png
new file mode 100644
index 0000000..81f5e5e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/A1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/A2.png b/mcguide/10-新内容/1-开发工作台/images/A2.png
new file mode 100644
index 0000000..82f918c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/A2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/A3.png b/mcguide/10-新内容/1-开发工作台/images/A3.png
new file mode 100644
index 0000000..d2f32ad
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/A3.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/A4.png b/mcguide/10-新内容/1-开发工作台/images/A4.png
new file mode 100644
index 0000000..7add543
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/A4.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/A5.png b/mcguide/10-新内容/1-开发工作台/images/A5.png
new file mode 100644
index 0000000..1480f0b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/A5.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/B0.png b/mcguide/10-新内容/1-开发工作台/images/B0.png
new file mode 100644
index 0000000..89c7032
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/B0.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/B1.gif b/mcguide/10-新内容/1-开发工作台/images/B1.gif
new file mode 100644
index 0000000..61e492a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/B1.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/B2.gif b/mcguide/10-新内容/1-开发工作台/images/B2.gif
new file mode 100644
index 0000000..5da6b4b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/B2.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/C0.gif b/mcguide/10-新内容/1-开发工作台/images/C0.gif
new file mode 100644
index 0000000..e9f3824
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/C0.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/D0.gif b/mcguide/10-新内容/1-开发工作台/images/D0.gif
new file mode 100644
index 0000000..5b2b033
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/D0.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/D1.png b/mcguide/10-新内容/1-开发工作台/images/D1.png
new file mode 100644
index 0000000..cb4ce2b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/D1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/D2.png b/mcguide/10-新内容/1-开发工作台/images/D2.png
new file mode 100644
index 0000000..480bc87
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/D2.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/F2.gif b/mcguide/10-新内容/1-开发工作台/images/F2.gif
new file mode 100644
index 0000000..6bd2b68
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/F2.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/F3.gif b/mcguide/10-新内容/1-开发工作台/images/F3.gif
new file mode 100644
index 0000000..5a22430
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/F3.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/MC_Editor_KhZXjG8Sai.gif b/mcguide/10-新内容/1-开发工作台/images/MC_Editor_KhZXjG8Sai.gif
new file mode 100644
index 0000000..2983aed
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/MC_Editor_KhZXjG8Sai.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/MC_Editor_tgqR1zbYsd.gif b/mcguide/10-新内容/1-开发工作台/images/MC_Editor_tgqR1zbYsd.gif
new file mode 100644
index 0000000..34c83b0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/MC_Editor_tgqR1zbYsd.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/aihelper.png b/mcguide/10-新内容/1-开发工作台/images/aihelper.png
new file mode 100644
index 0000000..6e4add3
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/aihelper.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/azq.png b/mcguide/10-新内容/1-开发工作台/images/azq.png
new file mode 100644
index 0000000..da3b8a6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/azq.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/blockbenchmodel.gif b/mcguide/10-新内容/1-开发工作台/images/blockbenchmodel.gif
new file mode 100644
index 0000000..d12a6d0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/blockbenchmodel.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/gzzd.png b/mcguide/10-新内容/1-开发工作台/images/gzzd.png
new file mode 100644
index 0000000..e06c65a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/gzzd.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/htgx.png b/mcguide/10-新内容/1-开发工作台/images/htgx.png
new file mode 100644
index 0000000..69343b7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/htgx.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210811192704451.png b/mcguide/10-新内容/1-开发工作台/images/image-20210811192704451.png
new file mode 100644
index 0000000..408fcd1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210811192704451.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210811193145361.png b/mcguide/10-新内容/1-开发工作台/images/image-20210811193145361.png
new file mode 100644
index 0000000..41deed1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210811193145361.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210811194431223.png b/mcguide/10-新内容/1-开发工作台/images/image-20210811194431223.png
new file mode 100644
index 0000000..3ace2a7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210811194431223.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210811195937679.png b/mcguide/10-新内容/1-开发工作台/images/image-20210811195937679.png
new file mode 100644
index 0000000..6d98e7e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210811195937679.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210811202220135.png b/mcguide/10-新内容/1-开发工作台/images/image-20210811202220135.png
new file mode 100644
index 0000000..91c317c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210811202220135.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210811203323476.png b/mcguide/10-新内容/1-开发工作台/images/image-20210811203323476.png
new file mode 100644
index 0000000..4292e19
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210811203323476.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210825154049957.png b/mcguide/10-新内容/1-开发工作台/images/image-20210825154049957.png
new file mode 100644
index 0000000..97a6030
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210825154049957.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210825200701068.png b/mcguide/10-新内容/1-开发工作台/images/image-20210825200701068.png
new file mode 100644
index 0000000..b384f98
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210825200701068.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210825200811663.png b/mcguide/10-新内容/1-开发工作台/images/image-20210825200811663.png
new file mode 100644
index 0000000..7268985
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210825200811663.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210825210042192.png b/mcguide/10-新内容/1-开发工作台/images/image-20210825210042192.png
new file mode 100644
index 0000000..02e32da
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210825210042192.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210826105407118.png b/mcguide/10-新内容/1-开发工作台/images/image-20210826105407118.png
new file mode 100644
index 0000000..02657c5
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210826105407118.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210908110536821.png b/mcguide/10-新内容/1-开发工作台/images/image-20210908110536821.png
new file mode 100644
index 0000000..cdc8d4e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210908110536821.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210908111950923.png b/mcguide/10-新内容/1-开发工作台/images/image-20210908111950923.png
new file mode 100644
index 0000000..bdedad8
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210908111950923.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210923151850909.png b/mcguide/10-新内容/1-开发工作台/images/image-20210923151850909.png
new file mode 100644
index 0000000..ff9d5f1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210923151850909.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210923152103699.png b/mcguide/10-新内容/1-开发工作台/images/image-20210923152103699.png
new file mode 100644
index 0000000..371e75e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210923152103699.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20210923153559096.png b/mcguide/10-新内容/1-开发工作台/images/image-20210923153559096.png
new file mode 100644
index 0000000..3ad5640
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20210923153559096.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211013180106741.png b/mcguide/10-新内容/1-开发工作台/images/image-20211013180106741.png
new file mode 100644
index 0000000..8961213
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211013180106741.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211013195837091.png b/mcguide/10-新内容/1-开发工作台/images/image-20211013195837091.png
new file mode 100644
index 0000000..ae12768
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211013195837091.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211013195906008.png b/mcguide/10-新内容/1-开发工作台/images/image-20211013195906008.png
new file mode 100644
index 0000000..af4f9cb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211013195906008.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211013202851873.png b/mcguide/10-新内容/1-开发工作台/images/image-20211013202851873.png
new file mode 100644
index 0000000..f68dddf
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211013202851873.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211013202930728.png b/mcguide/10-新内容/1-开发工作台/images/image-20211013202930728.png
new file mode 100644
index 0000000..5ee0cfd
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211013202930728.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211013203046837.png b/mcguide/10-新内容/1-开发工作台/images/image-20211013203046837.png
new file mode 100644
index 0000000..040d8fc
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211013203046837.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211124191100952.png b/mcguide/10-新内容/1-开发工作台/images/image-20211124191100952.png
new file mode 100644
index 0000000..c2d08c6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211124191100952.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211124192502648.png b/mcguide/10-新内容/1-开发工作台/images/image-20211124192502648.png
new file mode 100644
index 0000000..e1d9c16
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211124192502648.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211124193715772.png b/mcguide/10-新内容/1-开发工作台/images/image-20211124193715772.png
new file mode 100644
index 0000000..60e636c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211124193715772.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211124194358417.png b/mcguide/10-新内容/1-开发工作台/images/image-20211124194358417.png
new file mode 100644
index 0000000..9b71917
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211124194358417.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211124195546444.png b/mcguide/10-新内容/1-开发工作台/images/image-20211124195546444.png
new file mode 100644
index 0000000..e618412
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211124195546444.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211208181043002.png b/mcguide/10-新内容/1-开发工作台/images/image-20211208181043002.png
new file mode 100644
index 0000000..a205b73
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211208181043002.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211208184148653.png b/mcguide/10-新内容/1-开发工作台/images/image-20211208184148653.png
new file mode 100644
index 0000000..e4ce0e6
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211208184148653.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211208192928037.png b/mcguide/10-新内容/1-开发工作台/images/image-20211208192928037.png
new file mode 100644
index 0000000..96010ae
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211208192928037.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211208195841398.png b/mcguide/10-新内容/1-开发工作台/images/image-20211208195841398.png
new file mode 100644
index 0000000..463a6f7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211208195841398.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211222173549638.png b/mcguide/10-新内容/1-开发工作台/images/image-20211222173549638.png
new file mode 100644
index 0000000..174140c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211222173549638.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20211222174446467.png b/mcguide/10-新内容/1-开发工作台/images/image-20211222174446467.png
new file mode 100644
index 0000000..b66416f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20211222174446467.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220105162755948.png b/mcguide/10-新内容/1-开发工作台/images/image-20220105162755948.png
new file mode 100644
index 0000000..1653fc1
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220105162755948.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220105163349462.png b/mcguide/10-新内容/1-开发工作台/images/image-20220105163349462.png
new file mode 100644
index 0000000..48000c0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220105163349462.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220119142924345.png b/mcguide/10-新内容/1-开发工作台/images/image-20220119142924345.png
new file mode 100644
index 0000000..958e5b0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220119142924345.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220119143028238.png b/mcguide/10-新内容/1-开发工作台/images/image-20220119143028238.png
new file mode 100644
index 0000000..b42073e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220119143028238.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220119201440850.png b/mcguide/10-新内容/1-开发工作台/images/image-20220119201440850.png
new file mode 100644
index 0000000..27fc5dd
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220119201440850.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220228155131522.png b/mcguide/10-新内容/1-开发工作台/images/image-20220228155131522.png
new file mode 100644
index 0000000..60e971f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220228155131522.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220228155203042.png b/mcguide/10-新内容/1-开发工作台/images/image-20220228155203042.png
new file mode 100644
index 0000000..98db36c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220228155203042.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220314161041245.png b/mcguide/10-新内容/1-开发工作台/images/image-20220314161041245.png
new file mode 100644
index 0000000..0884003
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220314161041245.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220314163732548.png b/mcguide/10-新内容/1-开发工作台/images/image-20220314163732548.png
new file mode 100644
index 0000000..7ae8937
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220314163732548.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220314172905798.png b/mcguide/10-新内容/1-开发工作台/images/image-20220314172905798.png
new file mode 100644
index 0000000..5117833
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220314172905798.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220328152323829.png b/mcguide/10-新内容/1-开发工作台/images/image-20220328152323829.png
new file mode 100644
index 0000000..4c5d640
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220328152323829.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220328153745316.png b/mcguide/10-新内容/1-开发工作台/images/image-20220328153745316.png
new file mode 100644
index 0000000..3ca0133
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220328153745316.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220328175311402.png b/mcguide/10-新内容/1-开发工作台/images/image-20220328175311402.png
new file mode 100644
index 0000000..2c1b1c0
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220328175311402.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220411160125757.png b/mcguide/10-新内容/1-开发工作台/images/image-20220411160125757.png
new file mode 100644
index 0000000..3b72b9e
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220411160125757.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220411160151282.png b/mcguide/10-新内容/1-开发工作台/images/image-20220411160151282.png
new file mode 100644
index 0000000..f3ceab2
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220411160151282.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220411162138314.png b/mcguide/10-新内容/1-开发工作台/images/image-20220411162138314.png
new file mode 100644
index 0000000..cfb1ba8
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220411162138314.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220411165439751.png b/mcguide/10-新内容/1-开发工作台/images/image-20220411165439751.png
new file mode 100644
index 0000000..fa5801c
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220411165439751.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220411204613763.png b/mcguide/10-新内容/1-开发工作台/images/image-20220411204613763.png
new file mode 100644
index 0000000..5269080
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220411204613763.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220506193744047.png b/mcguide/10-新内容/1-开发工作台/images/image-20220506193744047.png
new file mode 100644
index 0000000..c134683
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220506193744047.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220508205603849.png b/mcguide/10-新内容/1-开发工作台/images/image-20220508205603849.png
new file mode 100644
index 0000000..07d482a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220508205603849.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220508210149059-1.png b/mcguide/10-新内容/1-开发工作台/images/image-20220508210149059-1.png
new file mode 100644
index 0000000..4c7118a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220508210149059-1.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220508213320240.png b/mcguide/10-新内容/1-开发工作台/images/image-20220508213320240.png
new file mode 100644
index 0000000..a64e028
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220508213320240.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/image-20220523214318501.png b/mcguide/10-新内容/1-开发工作台/images/image-20220523214318501.png
new file mode 100644
index 0000000..7b6aebb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/image-20220523214318501.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/jg.png b/mcguide/10-新内容/1-开发工作台/images/jg.png
new file mode 100644
index 0000000..2d252c8
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/jg.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/kfbbbxz.png b/mcguide/10-新内容/1-开发工作台/images/kfbbbxz.png
new file mode 100644
index 0000000..b9d4d4f
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/kfbbbxz.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/kjcz.png b/mcguide/10-新内容/1-开发工作台/images/kjcz.png
new file mode 100644
index 0000000..dfd1dff
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/kjcz.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/mcstructure.gif b/mcguide/10-新内容/1-开发工作台/images/mcstructure.gif
new file mode 100644
index 0000000..162f800
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/mcstructure.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/monsterFormation.png b/mcguide/10-新内容/1-开发工作台/images/monsterFormation.png
new file mode 100644
index 0000000..f19a342
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/monsterFormation.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/nrk.png b/mcguide/10-新内容/1-开发工作台/images/nrk.png
new file mode 100644
index 0000000..9bb1761
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/nrk.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/nrk10.png b/mcguide/10-新内容/1-开发工作台/images/nrk10.png
new file mode 100644
index 0000000..cdcb88b
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/nrk10.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/parts006.png b/mcguide/10-新内容/1-开发工作台/images/parts006.png
new file mode 100644
index 0000000..ba5a797
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/parts006.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/parts010.png b/mcguide/10-新内容/1-开发工作台/images/parts010.png
new file mode 100644
index 0000000..04d3d74
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/parts010.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/sample.gif b/mcguide/10-新内容/1-开发工作台/images/sample.gif
new file mode 100644
index 0000000..96a74d7
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/sample.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/sample2.gif b/mcguide/10-新内容/1-开发工作台/images/sample2.gif
new file mode 100644
index 0000000..0c67e18
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/sample2.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/soundtrack.gif b/mcguide/10-新内容/1-开发工作台/images/soundtrack.gif
new file mode 100644
index 0000000..be8ab20
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/soundtrack.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/textboard-7.png b/mcguide/10-新内容/1-开发工作台/images/textboard-7.png
new file mode 100644
index 0000000..cd625ab
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/textboard-7.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/textboardattr.png b/mcguide/10-新内容/1-开发工作台/images/textboardattr.png
new file mode 100644
index 0000000..38f9dfd
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/textboardattr.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/tsgj.png b/mcguide/10-新内容/1-开发工作台/images/tsgj.png
new file mode 100644
index 0000000..7ed3374
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/tsgj.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/uv.gif b/mcguide/10-新内容/1-开发工作台/images/uv.gif
new file mode 100644
index 0000000..f74754a
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/uv.gif differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/xjwjxd.png b/mcguide/10-新内容/1-开发工作台/images/xjwjxd.png
new file mode 100644
index 0000000..e64f8a5
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/xjwjxd.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/zdykjk.png b/mcguide/10-新内容/1-开发工作台/images/zdykjk.png
new file mode 100644
index 0000000..1fc9cdb
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/zdykjk.png differ
diff --git a/mcguide/10-新内容/1-开发工作台/images/znlx.gif b/mcguide/10-新内容/1-开发工作台/images/znlx.gif
new file mode 100644
index 0000000..95d7571
Binary files /dev/null and b/mcguide/10-新内容/1-开发工作台/images/znlx.gif differ
diff --git a/mcguide/10-新内容/2-模组SDK/85-新版本.md b/mcguide/10-新内容/2-模组SDK/85-新版本.md
new file mode 100644
index 0000000..0de3577
--- /dev/null
+++ b/mcguide/10-新内容/2-模组SDK/85-新版本.md
@@ -0,0 +1,34 @@
+---
+front: https://nie.res.netease.com/r/pic/20221108/151b6d0d-5ea5-43fc-a346-45c25572a2ca.gif
+hard: 入门
+time: 分钟
+selection: 14
+---
+
+# 模组SDK版本更新
+
+更新信息请参考API文档的更新信息,如下图。
+
+
+
+或者点击下列链接进行跳转
+- 3.1更新信息
+- 3.0更新信息
+- 2.12更新信息
+- 2.11更新信息
+- 2.10更新信息
+- 2.9更新信息
+- 2.8更新信息
+- 2.7更新信息
+- 2.6更新信息
+- 2.5更新信息
+- 2.4更新信息
+- 2.3更新信息
+- 2.2更新信息
+- 2.1更新信息
+- 2.0更新信息
+- 1.25更新信息
+- 1.24更新信息
+- 1.23更新信息
+- 1.22更新信息
+- 1.21更新信息
\ No newline at end of file
diff --git a/mcguide/10-新内容/2-模组SDK/90-1.24版本.md b/mcguide/10-新内容/2-模组SDK/90-1.24版本.md
new file mode 100644
index 0000000..59590fb
--- /dev/null
+++ b/mcguide/10-新内容/2-模组SDK/90-1.24版本.md
@@ -0,0 +1,30 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/66507593-8572-4e47-a1a0-8a96efe02425.png
+hard: 入门
+time: 分钟
+selection: 1
+---
+
+# 1.24版本
+
+## 简介
+
+视频包含了1.24版本的重大功能,介绍了自定义流体,自定义重力方块,自定义粘液块,自定义冰块,自定义方块实体渲染,自定义附魔,自定义分组、分页以及渐晕效果。
+
+
+
+
+
+## 视频对应demo
+
+下载地址或出处如下:
+
+### 1、自定义附魔
+
+ [下载地址](https://g79.gdl.netease.com/EnchantDemo.zip)
+
+
+
+### 2、其他内容
+
+ [下载地址](https://g79.gdl.netease.com/1.24demo.zip)
\ No newline at end of file
diff --git a/mcguide/10-新内容/2-模组SDK/91-1.23版本.md b/mcguide/10-新内容/2-模组SDK/91-1.23版本.md
new file mode 100644
index 0000000..2ad80f8
--- /dev/null
+++ b/mcguide/10-新内容/2-模组SDK/91-1.23版本.md
@@ -0,0 +1,33 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# 1.23版本
+
+## 简介
+
+视频包含了1.22以及1.23版本的重大功能,介绍了全新的维度模板:下界、末地、超平坦世界、超平坦下界如何创建;展示了虚拟场景的游戏效果;展示微缩方块效果及其创建方式;展示骨骼模型的动作融合以及半透明材质效果。
+
+
+
+## 视频对应demo
+
+下载地址或出处如下:
+
+### 1、自定义维度模板
+
+ [下载地址](https://g79.gdl.netease.com/9d3b837a96af41958526f8e1ce373eae.zip)
+
+### 2、虚拟场景
+
+ 详见“基岩版服务器——服务器Mod——公共Mod——回合战斗” 
+
+### 3、微缩方块
+
+ [下载地址](https://g79.gdl.netease.com/micro_block_zhanshi.zip)
+
+### 4、骨骼模型支持动作融合、半透明材质
+
+ [下载地址](https://g79.gdl.netease.com/AnimRemixMod.zip)
\ No newline at end of file
diff --git a/mcguide/10-新内容/2-模组SDK/README.md b/mcguide/10-新内容/2-模组SDK/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/mcguide/10-新内容/2-模组SDK/images/gxxx.png b/mcguide/10-新内容/2-模组SDK/images/gxxx.png
new file mode 100644
index 0000000..615c5f7
Binary files /dev/null and b/mcguide/10-新内容/2-模组SDK/images/gxxx.png differ
diff --git a/mcguide/10-新内容/2-模组SDK/images/xunichangjing.png b/mcguide/10-新内容/2-模组SDK/images/xunichangjing.png
new file mode 100644
index 0000000..59114c7
Binary files /dev/null and b/mcguide/10-新内容/2-模组SDK/images/xunichangjing.png differ
diff --git a/mcguide/12-入门教程/10-注册成为开发者.md b/mcguide/12-入门教程/10-注册成为开发者.md
new file mode 100644
index 0000000..71acf80
--- /dev/null
+++ b/mcguide/12-入门教程/10-注册成为开发者.md
@@ -0,0 +1,103 @@
+---
+front: https://nie.res.netease.com/r/pic/20230524/e76f932d-0dda-464a-9b04-54f689d024c1.png
+hard: 入门
+time: 10分钟
+selection: true
+---
+
+# 如何注册开发者
+
+首先,在 **官网** 中找到注册页面([或点击此处直接进入网址](https://mcdev.webapp.163.com/#/login) )
+
+1 - 在搜索引擎中,搜索“我的世界”找到[官网](http://mc.163.com/),点击右上角 **【进入官网】** 按钮
+
+
+
+2 - 在[新的网页](http://mc.163.com/index.html )中,点击 **【成为创造者】** 按钮,前往开发者平台注册页面
+
+
+
+3 - 跳转至新的页面,根据提示填入信息,并勾选同意《隐私协议》,点击 **【注册】** 按钮(注意:开发者昵称注册后不可修改)。
+
+
+
+4 - 成功入驻后,需要进行实名认证,填写真实姓名、身份证、银行卡等信息,点击 **【去完善】** 跳转至实名认证界面。
+
+
+
+
+
+如实完成以上信息的正确填写并提交后,随后等待 **实名认证审核** 即可,通过后就可以发布作品啦!
+
+
+
+## 开发者注册常见问题答疑
+
+### 账号审核时间
+
+开发者账号审核通过一般在 **7 天工作日。**
+
+开发者账号催审请通过发送邮件至 **minecraftstarter@163.com** 与官方取得联系。
+
+邮件标题为:【开发者信息审核催审】+ 开发者昵称 + 开发者账号
+
+邮件内容为:
+
+> 开发者账号:xxxx@xxx.com
+>
+> 开发者昵称:xxx
+>
+> 真实姓名:xxx
+>
+> 手机号:xxx
+>
+> 联系QQ:xxx
+>
+> 身份证号:xxx
+>
+> 提交时间:xxx
+
+
+
+### 选择符合自身实际情况的结算方式
+
+在注册开发者时,需要选择 **结算方式** (指通过《我的世界》中国版投稿付费钻石组件后获得的收益结算),开发者应当选择 **符合自身实际情况** 的结算方式,共两种:
+
+1. 代扣代缴:由我司代为扣缴,请注意此选项仅针对非公司性质的个人开发者
+2. 自备税票:自行开票或者请税局代为开票
+
+建议个人开发者或小规模团队选择“代扣代缴”的结算方式,公司类型的开发者及个体工商户选择“自备税票”的结算方式。
+
+
+
+### 如何更换开发者平台的结算信息(如换绑银行卡、改结算方式等)
+
+**个人身份开发者:**
+
+1. 点击开发者平台右上角的头像,点击“修改结算信息”提交新的银行信息或结算方式。
+2. 提交内容前,请确保申请的信息与账号实名信息相符。更改结算信息后,还需等待审核通过方能生效。
+3. 变更成功后90天内将不可再次发起银行卡及结算类型信息修改申请。无论通过与否,平台都会通过开发者平台邮件和短信告知审核结果。
+
+**企业身份开发者** :
+
+1. 非特殊情况不支持更改,若有特殊情况请联系《我的世界》开发者频道管理staff。
+
+
+
+### 若在规定期限内结算收益,但在打款时未拿到款项
+
+在通常情况下,在结算收益后会在30个工作日左右收到款项。如果超出正常结算周期仍然没收到款 项,请检查您的资料信息是否有误。
+
+1. 若出现银行卡信息错误导致收益无法收到的,官方会为账号打开 **“更新结算信息”** 入口,请尽快点击开发者平台右上方头像,在个人信息窗口找到 **"更换结算信息"** 入口,上传正确的结算资料等待审核。打款失败的款目会在审核通过后的下一周到账。如无及时更改将会影响后续的正常结算的流程,敬请了解。
+2. 若出现过去可以正常收款,但在之后出现超出结算周期未收到款项。可以在 **【开发者平台】** - **【开发者常见问题答疑】** - **【反馈其他问题】** 与我们取得联系,填写表单时,请记得写好 **联系方式** 。在通常情况下,官方人员会通过留下的联系方式与您取得联系。
+3. 若结算开放后超过5天才点击结算,结算信息将会顺延至下个月打款。
+
+
+
+### 想要注销开发者/UP主,请问要怎么做呢?
+
+进入开发者平台后,点击右上角的个人昵称呼出 **个人信息窗口** ,点击 **申请注销账号** 按钮,并等待审核通过即可。注销申请提出后不可撤回, **且同个身份证、银行卡信息和手机号只允许注册一个开发者或一个UP主账号。当开发者或UP主账号被注册或注销时,所使用过的个人信息将不再支持作为第二次注册开发者/UP主账号时的凭证资料,请慎重操作。**
+
+
+
+**温馨提示:由于平台系统功能优化,从2023年5月16日起,平台已对up主带货系统进行逐步关停处理,因此原平台不再开放up主身份进行注册。**
\ No newline at end of file
diff --git a/mcguide/12-入门教程/11-认识开发者平台.md b/mcguide/12-入门教程/11-认识开发者平台.md
new file mode 100644
index 0000000..eb83ab5
--- /dev/null
+++ b/mcguide/12-入门教程/11-认识开发者平台.md
@@ -0,0 +1,225 @@
+---
+front: https://nie.res.netease.com/r/pic/20230524/67cd19f0-e57d-42f0-915f-120177c1e104.png
+hard: 入门
+time: 10分钟
+---
+
+# 认识开发者平台
+
+***最后一次更新于:2022/10/8,更换部分功能图片以适配新页面,新增多个新模块功能的介绍。***
+
+
+
+在注册开发者成功以后,使用开发者账号即可登录到开发者平台。广场、作品管理、收益等功能都在这里,活用开发者平台是成为开发者的第一步。
+
+
+
+在本教程中,您将学习以下内容:
+
+- 了解 **[开发者平台首页及工具栏](#开发者平台首页及工具栏)。**
+- 熟悉 **[作品管理模块](#作品管理模块)。**
+- 接触 **[推广与活动](#推广与活动)。**
+
+
+
+## 开发者平台首页及工具栏
+
+### 我的世界开发者协议
+
+在开发者平台的上方右侧位置,点击 **【协议】** 按钮,即可查看开发者协议内容。
+
+《我的世界》中国版推出的《开发者协议》,旨在为开发者创造良性发展的市场环境。帮助开发者展现创意、获取收益。一同打造一个优质、公平、健康、高效的内容创作平台。
+
+
+
+
+
+### 广场模块
+
+打开开发者平台默认显示的就是广场模块,在广场中,你可以看到很多有用的内容。从左至右分别为:
+
+- 技术支持:开发相关的知识和技巧都可以在这里找到。
+- 新闻资讯:第一时间了解官方最新的活动及新闻资讯。
+- 最新数据:以最直观、简洁的方式看到账号下的作品收益。
+- 发布:快速跳转作品管理页并发布作品。
+- 作品榜单:了解时下最受目标欢迎的玩法题材。
+
+
+
+
+
+### 问题与反馈中心
+
+在开发者平台上方中间位置,点击 **【问题与反馈中心】** 按钮,即可查看。
+
+
+
+这里有很多常见的问题,如:什么是开发者等级?、组件审核需要多久时间?等。选择相关的问题就可以看到官方给出的解答!
+
+
+
+
+
+### 测试版启动器
+
+为了方便开发者们测试自己的手机版组件,可以使用手机版测试工具,供大家在测试环境查看组件表现。
+
+
+
+在开发者平台的上方中间位置,找到 **【手机版测试工具下载】** 按钮,点击后会弹出手机版测试工具的下载二维码及按钮,根据自身手机的情况选择不同的二维码下载即可。
+
+
+
+
+
+### 开发者平台邮件
+
+官方会通过平台站内邮件的方式提供最新资讯,如:新的开发者平台、游戏客户端内、模组开发工具包、我的世界开发者工具台更新等信息,以及各类扶持计划或开发者活动。
+
+
+
+点击上方工具栏中的 **【邮件】** 按钮,即可打开邮箱,查看收到的邮件。通常会使用开发者平台的邮件通知开发者,记得时常查看邮件并定期清理已读邮件哦。
+
+
+
+### 查看、认证与修改开发者信息
+
+点击右上角的头像和开发者昵称可以打开个人信息,在这里可以查看开发者账号的相关信息:真实姓名、开户银行、头像等。 **开发者平台账号和密码等信息请勿轻易透露。**
+
+
+
+你可以在这里添加联系方式(手机、QQ号码),申请企业开发者认证、注销账号、修改头像、添加开发者信息,或是更改符合规范的结算信息等。
+
+
+
+
+
+### 加入开发者QQ小站讨论频道
+
+在开发者平台右上角有 **开发者QQ小站** 申请入口,点击进入扫码即可申请,请在申请信息内填写自己的开发者邮箱和开发者昵称。频道汇聚了五湖四海的开发者,可以学习开发知识、参与频道或官方活动、向官方提出反馈意见等。
+
+
+
+
+
+### 关注我的世界公众号获取最新资讯
+
+在开发者平台左下角有 **我的世界Minecraft开发者** 公众号二维码,扫码即可关注,第一时间获取开发圈最新资讯以及开发技巧!
+
+
+
+
+
+### 订阅开发者B站号观看开发教程视频
+
+在开发者平台右上角有 **开发者B站号** 跳转入口,点击即可进入,第一时间收看开发圈最新的教程视频。
+
+
+
+
+
+## 开发者平台主要功能
+
+开发者平台有很多关键性功能,其中包括发布作品、收益查看、推广等,下面将简单介绍一些主要的功能,后面的章节会展开并详细介绍。
+
+
+
+
+
+## [作品管理模块](../35-上架与入驻/课程04-认识作品管理模块.html)
+
+点击开发者平台左侧的 **【作品管理】** 按钮,作品发布、更新等都将在这里操作。
+
+### [上传资源](../35-上架与入驻/课程05-正确上传作品的方式及途径.html)
+
+在作品管理中,可以发布手机版或电脑版的新资源,在左上角选择版本然后点击右侧的 **【发布新资源】** 按钮。
+
+
+
+不同版本也有不同类型,如组件、网络游戏和联机大厅商品,要注意区分。
+
+
+
+### 玩家反馈管理
+
+使用 **玩家反馈管理功能** ,可以处理玩家在游戏客户端内对自己基岩版作品的反馈。功能提供多种搜素条件,并支持将反馈记录导出成表格至本地。点击回复即可回复玩家反馈,反馈得到再次回复时,将会与原先反馈内容一起组成邮件发至开发者邮箱。
+
+
+
+
+
+### [数据分析](../40-活动、推广与收益/课程06-使用数据分析统计资源消费者行为.html)
+
+在开发者平台左侧的数据与收益中点击 **【数据分析】** 按钮打开,数据分析页面有很多功能和实时数据提供给开发者,使开发者灵活统计资源消费者的行为。
+
+
+
+
+
+### [收益查看和结算](../40-活动、推广与收益/课程07-收益查看及结算.html)
+
+与数据分析类似,在开发者平台左侧的数据与收益中点击 **【收益查看】** ,页面上方可以修改不同的收益类型,在最右侧可以查看某个资源组件的收益。
+
+
+
+收益结算则有每个月的钻石收益,可以在这里结算收益。
+
+
+
+### [成员管理模块](../32-开发者账号与团队/课程15-使用成员管理模块实现多账号协作.html)
+
+在 **【账号管理】** 下点击成员管理,可以在这里添加开发者账号的成员,并且调整账号的权限与发起实名认证,协同开发网络游戏、使用手机端测试资源功能等。
+
+
+
+
+
+### [开发者等级](../32-开发者账号与团队/课程14-开发者等级.html)
+
+在 **【账号管理】** 下点击开发者等级,了解账号的基础等级、月度贡献能力与信用分。
+
+
+
+
+
+## [推广与活动](../40-活动、推广与收益/课程08-对作品进行推广与活动.html)
+
+为了帮助开发者更好地推广资源,通过 **【推广与活动】** 功能组合多项推广渠道,帮助自身提高资源曝光率与获客量,间接提升转化率。
+
+### 活动参与
+
+当官方有特殊活动时,可以在 **【活动参加】** 页面选择自己的作品并提交审核参与活动。
+
+
+
+
+
+### 内容推广
+
+内容推广是以收益分成的方式通过主播带货获得组件的曝光机会。在左侧推广与活动下的内容推广页面即可发布悬赏任务。
+
+
+
+
+
+### 作品活动
+
+作品活动功能会不定期发布官方性质的作品征集与推广渠道活动。请开发者在报名前仔细阅读活动公示,选择符合活动条件与自己满意的作品资源,将有机会入选并获得游戏内外的曝光资源,为作品收益提供助力。
+
+
+
+
+
+### [推广位申请与竞拍](../40-活动、推广与收益/课程16-推广位申请与竞拍试运行指南.html)
+
+手机版与电脑版客户端内的推广位入口已整合为 **推广位申请与竞拍** 功能纳入 **【推广与活动】** 模块。结合自助式申请流程,开发者可以更加清楚、便利和及时地收到推广位申请与竞拍的结果。
+
+
+
+
+
+### [作品推广券管理](../40-活动、推广与收益/课程17-开发者作品推广券使用指南.html)
+
+利用 **作品推广券管理** 功能搭配 **开发者作品推广券** ,开发者可以对想要推广的作品资源随时随地想推就推。实现热门档期的 **精准投放** ,争取获得最佳的曝光效果。目前已获取的 **开发者作品推广券** 时间向后推3个月为每张的到期日期。请尽快在到期日期前使用。
+
+
\ No newline at end of file
diff --git a/mcguide/12-入门教程/20-MC Studio使用说明.md b/mcguide/12-入门教程/20-MC Studio使用说明.md
new file mode 100644
index 0000000..12d0fc6
--- /dev/null
+++ b/mcguide/12-入门教程/20-MC Studio使用说明.md
@@ -0,0 +1,142 @@
+---
+front: https://nie.res.netease.com/r/pic/20210730/6b8ee910-f423-4421-9627-110415c820ca.png
+hard: 入门
+time: 15分钟
+selection: true
+---
+# MC Studio使用说明
+
+## 基本介绍
+
+MC Studio是集开发者启动器、地图编辑器、关卡编辑器、逻辑编辑器、特效编辑器、云端测试平台等功能于一体的开发工具,能够为《我的世界》开发者开发和发布作品提供极大的便利。这里主要介绍开发者启动器的功能,并简略介绍《我的世界》中国版组件的开发方式。
+
+先通过视频来快速了解吧:
+
+## 开发者账号
+
+目前MC Studio对《我的世界》中国版开发者开放,非开发者账号登录后,可在启动器中的“发布”分页提交资料,申请成为开发者。成为开发者后可以使用MC Studio的所有功能。
+
+## 开发者启动器
+
+当前的开发者启动器主要提供以下功能:
+
+1. 首页:了解开发者相关资讯
+2. AI知识助理:AI知识助理为你解答模组开发的疑问,助你快速找到参考文档。
+3. 创作:新建作品、导入导出作品、测试、管理工作流。
+4. 作品库:管理当前账号所有作品,包含基岩版和JAVA版的所有组件和服务器资源
+5. 发布与管理:跳转至开发者平台进行作品提审和发布
+
+
+
+### 新建作品
+
+目前仅支持通过MC Studio新建基岩版作品(其他类型作品需通过“本地导入”的方式导入MC Studio)。
+
+如果要新建一个地图,我们需要在创作页面点击 `新建基岩版组件`按钮,在弹窗中,选择推荐或旧版作品,将鼠标移到列表中第一项“空白地图”上,点击按钮“新建”。
+
+
+
+在弹出的对话框中,可以进行基本的地图设置。如果MC Studio中已经有非地图类型的基岩版作品,那么会显示在“导入功能玩法”、“导入材质光影”的列表中(下图中红框内)。导入的功能玩法和材质光影的文件会拷贝一份到新建地图中(所以只需导入一次即可)。
+
+点击“启动编辑”后就能够开启编辑器,开始制作自己的地图。
+
+
+
+除了新建地图,也可以新建空白AddOn。AddOn即为附加包,具体的解释可见[wiki](https://minecraft-zh.gamepedia.com/%E9%99%84%E5%8A%A0%E5%8C%85),AddOn不含地图文件。
+
+目前启动器中提供了一些模板,开发者可以在模板的基础上修改,提高开发效率。模板除了地图、AddOn的分类外,还有创建方式的区别,分为“纯编辑器开发”、“脚本开发”。
+
+**纯编辑器开发**:这部分模板完全用编辑器制作得到,新建后可直接启动编辑器进行编辑。
+
+**脚本开发**:这部分模板含有较为复杂的Python脚本,新建之后,可通过“更多”、“打开目录”查看和修改相关的文件。当然,也可以用编辑器编辑Python脚本以外的资源。
+
+
+
+
+
+### 基岩版组件
+
+基岩版组件分页中会列出当前账号下的所有的基岩版组件和网络游戏。其中“游戏地图”、“AddOn”、“其他作品”为本地作品,“云端列表”为开发者已经上传到《我的世界》中国版平台的作品。
+
+Studio中也可以导入已经制作好的组件。点击右上角的“本地导入”按钮,在弹出的对话框中,可以选择导入基岩版或Java版的地图、AddOn、材质、光影、皮肤。
+
+
+
+
+
+创建或者导入的作品,能够进行开发测试。开发测试会启动最新的Mod PC开发包对作品进行测试。
+
+
+
+MC Studio支持单台电脑测试多人联机玩法。首先启动作品的开发测试(此时就有了第一个客户端并自动建好了局域网房间),然后从工具箱中启动其它的Mod PC开发包。
+
+
+
+在新启动的Mod PC开发包中,点击主界面的“游戏”,点击“好友”中已经建立好的房间,这样就能够进入前面作品开发测试时自动建立好的房间,测试多人联机玩法。
+
+
+
+
+
+开发测试通过后,在作品页的“更多”菜单中,通过“发布”上传到开发者平台,详见下面的[发布作品](#发布作品)。
+在开发测试时,可按F11键在PC和PE操作模式间切换。
+
+### 发布作品
+
+组件类型的作品完成后,需发布到平台,玩家才能够从游戏里的资源中心搜索并下载到你的作品。在作品页的“更多”中,点击“发布”,则会跳转到[开发者平台](https://mcdev.webapp.163.com/#/login),并为你填写作品的基本信息。
+
+> 若您此前未登录开发者平台则会跳转到登录界面。
+
+
+
+在发布资源页面填写完相关信息后,点击立即提交审核,即可将作品提交到官方进行初步审核,为后续的发布和测试做准备。
+
+
+
+### 其他分页
+
+*首页*
+
+首页分页会为您提供与开发者息息相关的信息,如新闻资讯、更新信息、常用功能跳转入口、作品最新数据、近期开发动态等等,如图所示。
+
+
+
+*AI知识助理*
+
+AI知识助理可以为你解答在模组开发过程中遇到的问题,并为您定位到相关的官网文档,助力您快速入门我的世界模组开发,详细使用教程请参考[这篇文档](./25-AI知识助理.md)。
+
+
+
+*基岩版服务器*
+
+分页中会列出当前开发者账号下的所有网络游戏,可下载到本地进行测试。如果想开发网络游戏,需额外进行申请,通过审批后可获得开服工具和相关资料,进行网络游戏的开发。具体如何开发基岩版网络游戏请参考系列文档中的Apollo部分。
+
+
+
+*Java组件和服务器*
+
+Java作品分页的结构基本同基岩版作品分页。目前MC Studio不支持Java版作品的编辑,仅可导入Java作品进行测试。
+
+
+
+
+
+*发布与管理*
+
+发布与管理会跳转到开发者平台中,您可以在开发者平台中向《我的世界》中国版平台提交组件。通过审批后,所有玩家均可从《我的世界》中国版中下载到该组件。
+
+## 组件开发方式
+
+《我的世界》中国版的组件开发有多种方式,开发者可选择自己熟悉的的方式进行开发。选择MC Studio进行组件开发的优点在于:
+
+- 基本上都在图形化交互界面下进行操作;
+- 对编程能力无要求;
+- 无需关注繁琐的细节(如组件的文件结构要求、uuid等),MC Studio已经做好处理。
+
+如果组件中有较为复杂的逻辑,可以使用红石及命令方块、Mod SDK、逻辑编辑器三种方式来实现。
+
+**红石及命令方块**是游戏本身提供的实现复杂逻辑的途径,这里不再赘述。
+
+**Mod SDK**是《我的世界》中国版提供的一套控制游戏内各种元素的Python接口,利用这套接口,能够制作出各种创新好玩的组件。要使用Mod SDK,需有使用Python语言编程的能力,适用于有一定编程能力的开发者和开发团队。在官方网站中有着详细的Mod SDK的介绍。
+
+而**逻辑编辑器**把Mod SDK包装成了一套图形化编程语言,灵活性不如Python编程,但使用门槛较低,适用于入门开发者。但如果有一定的编程基础,或者有学习编程的能力,我们还是建议使用编程的方式来实现作品的逻辑。
diff --git a/mcguide/12-入门教程/25-AI知识助理.md b/mcguide/12-入门教程/25-AI知识助理.md
new file mode 100644
index 0000000..fbc4e05
--- /dev/null
+++ b/mcguide/12-入门教程/25-AI知识助理.md
@@ -0,0 +1,69 @@
+---
+front: https://nie.res.netease.com/r/pic/20240114/f37f189b-7800-46ba-8816-a8f3c4010f97.png
+hard: 入门
+time: 5分钟
+selection: true
+---
+# AI知识助理
+
+## 什么是AI知识助理?
+
+AI知识助理是我的世界开发工作台全新推出的生成式AI问答助手,它熟知开发者官网内的所有文档,你可以向它询问任意模组开发的问题,它会竭尽所能为你一一解答,并附上它引用和参考的文档链接,以便你前往相关文档了解更多细节。
+
+## 如何使用AI知识助理?
+
+1. 打开我的世界工作台,进入AI知识助理页面,如下图:
+
+
+
+2. 你可以在底部的输入框输入自己的问题,点击发送进行提问,另外,您也可以通过点击预设好的问题进行快速提问,如下图:
+
+
+
+3. 对于正在解答的问题,你还可以点击下图中的【取消生成】中断本次回答。
+
+
+
+4. 对于已经发送的问题,你可以点击消息气泡右侧的按钮进行删除和再次编辑,如下图:
+
+
+
+5. 对于AI知识助理的回答,你可以点击消息气泡右侧的按钮进行删除,复制和重新生成,如下图:
+
+
+
+6. 你还可以在每段回答的右下角对该答案的质量进行评价,每个回答只能评价一次。
+
+
+
+7. 当您进行了多次对话后,可以通过右上角的清理对话删除历史记录。
+
+
+
+
+
+
+## 进阶用法
+### 指定搜索范围
+您可以选择输入框左侧的下拉列表,选择您需要搜索的范围,则AI知识助理只会在指定的搜索范围内进行查找和组织回复。
+
+
+
+### 采用近期对话连续问答
+您可以勾选输入框下方的【采用近3次对话】选项,则AI知识助理在回答时,会参考仅3次对话内容,以此给您提供更连续和精准的结果。
+
+
+
+### 复制代码块内容
+对于回答中有json和python代码时,将会被自动渲染为代码块,您可以点击代码块区域右上角的复制按钮一键获取响应的代码内容。
+
+
+
+
+
+## 注意事项:
+
+AI知识助理目前处于**beta测试阶段**,功能仍在持续优化中,欢迎所有开发者踊跃向我们反馈问题与建议:
+
+1. 若您对知识助理的回答不满意,您可以通过点击回答右下角的【无帮助】按钮进行反馈。
+2. 若您对AI知识助理的功能上有任何建议和意见,可以通过开发者平台进行提单反馈:[开发者平台问题与反馈中心](https://mcdev.webapp.163.com/#/feedbackModal?target=browser) 。
diff --git a/mcguide/12-入门教程/5-学习路线导览.md b/mcguide/12-入门教程/5-学习路线导览.md
new file mode 100644
index 0000000..88c5d3b
--- /dev/null
+++ b/mcguide/12-入门教程/5-学习路线导览.md
@@ -0,0 +1,302 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/fd58eff7-ab4c-4f98-94b5-87912c6e8e4d.png
+hard: 入门
+time: 15分钟
+selection: true
+---
+
+# 学习路线导览
+
+## 欢迎制作我的世界中国版模组
+
+如果你致力于制作我的世界的模组,我们为你提供了一系列的工具,这些工具将显著的降低模组的开发难度,并且可以大大加速模组开发的过程。
+
+在使用这些工具前,你需要先注册成为开发者。
+
+[注册成为开发者](./10-注册成为开发者.html)
+
+## 什么是模组
+
+我的世界是一个广受欢迎的游戏,并且有着大量可爱且宽容并包的玩家。我们在我的世界(原版游戏)的基础上进行一些修改,给玩家带来不同的体验,这些修改就是模组。
+
+模组通常比原版游戏小得多,制作也更为简单,在进行过一系列的学习之后,相信你也可以做出自己的模组。
+
+
+
+## 模组开发流程
+
+不同种类的模组的开发流程可能截然不同,我们以比较复杂的角色扮演玩法地图为例,可以按下图分为大致5个阶段。
+
+除了“模组内容设计”之外,你均可以使用中国版提供的工具或第三方工具来辅助你的工作。接下来我们会针对模组开发可能遇到的每一个环节进行阐述。
+
+
+
+## 中国版提供的开发工具集
+
+中国版为上述环节提供了数个有效的工具,他们主要被集成与我的世界开发工作台(MC Studio),你可以在这里下载它。
+
+[下载开发工具](https://mc.163.com/dev/process.html#xz)
+
+目前中国版总共提供了4个大工具,见下图左侧部分,其中MC Studio里又包含了下图右侧部分的另一些工具。
+
+
+
+## 第一个作品(模组)
+
+我的世界的一个个模组被我们称呼为作品,你的所有作品都展示在开发工具台(MC Studio)中,你也可以通过工具台来新建和管理作品。除此之外,工作台还有许多其他的作用。
+
+[我的世界开发工作台使用说明](./20-MC%20Studio使用说明.html)
+
+工作台目前仅支持创建基岩版作品,如果你有创作好的Java版模组,可以使用工作台的导入功能。
+
+你可以通过一些简单的操作来完成你的第一个模组,现在就试试吧!
+
+[制作第一个附加包](../20-玩法开发/13-模组SDK编程/1-Mod开发简介/2-制作第一个Mod.html)
+
+## 地图、建筑制作
+
+如果你打算制作
+
+- 一张漂亮的地图
+- 一个建筑
+- 玩法模组里的一些局部地图
+
+你可以使用地图编辑器。地图编辑器是我的世界编辑器(MC Editor)的一部分,编辑器集成在开发工作台(MC Studio)中。
+
+[地图编辑器使用说明](../14-地图制作/2-地图编辑器使用说明.html)
+
+ 建筑搭建的思路及基本方法
+
+制作局部地图主要使用结构功能,你可以将部分地图保存为结构,并且在你的玩法模组中使用。要做到这点,除了地图编辑器之外,还需要使用模组SDK进行编程等其他工具辅助。
+
+
+
+## 模型和动作
+
+如果你希望在模组中引入全新的生物形象,或者外形千奇百怪的方块,那么你需要制作自己制作模型,如果你需要让你的模型动起来,你还需要为模型制作动画。
+
+我的世界中国版基岩版支持两种模型。一种是原生模型,我的世界中的大部分模型采用的都是这种模型。使用block bench可以很方便的制作原版模型,贴图和动画。
+
+[原版模型制作指南](../16-美术/6-模型和动作/01-原版模型制作指南.html)
+
+ BLOCKBENCH教学
+
+另一种是骨骼模型,骨骼模型被广泛应用于影视游戏行业的模型和动画制作,上手门槛较高,但是能提供比基岩版更好的效果。blender是一个免费且强大的软件,可以用于骨骼模型的制作。
+
+[骨骼模型制作指南(Blender)](../16-美术/6-模型和动作/03-骨骼模型制作指南(Blender).html)
+
+将制作好的原版模型或者骨骼模型实际应用到模组中需要后续的其他知识。
+
+
+
+## 制作光影或者特殊的美术效果
+
+如果你想要制作精美的光影,或者为你的模型制作自定义的材质,来达到特殊的美术效果,你需要使用材质和着色器(Shader)。
+
+[Shader使用简介](../16-美术/7-材质与着色器/1-材质介绍与着色器入门.html)
+
+需要注意的是,Shader的学习门槛非常高,相对应中国版的模组市场中光影的数量也非常之少,如果可以做出炫酷的光影,相信一定可以获得玩家的青睐!
+
+## 视觉特效
+
+黎明时燃烧的僵尸的火焰,野外的降雨,都属于视觉特效(visual effect)。
+
+我的世界中国版为你提供了两种制作和使用特效的方法,一种是原版特效,一种是中国版特效。
+
+你可以使用第三方软件Snow Storm,或者直接写Json来制作原版特效,并通过附加包来配置特效最终应用在模组中。
+
+ 原版特效示例教学
+
+除了原版特效外,我们专门为中国版特效提供了制作工具——特效编辑器。
+
+[特效编辑器基本介绍](../16-美术/9-特效/00-特效编辑器简介.md)
+
+注意:原版特效可以被挂接到原版模型上,与其共同使用;中国版特效则可以被挂接到骨骼模型上。两种技术方案不能混用。当然你可以在一种方块中使用原版模型和原版特效,在另一个生物中使用骨骼模型和中国版特效。
+
+
+
+## 界面与交互
+
+电子游戏(video game),当然也包括模组,与电影,漫画,小说等等最重要的不同就是,游戏是需要玩家参与的,而这种参与中很大的一部分就是交互,即玩家的操作可以影响游戏。
+
+实体按键和触摸界面都是交互的形式,对于移动端来说,界面交互的使用场景显然更多。
+
+中国版工具的界面编辑器为你提供了图形化操作制作界面的功能,以及可以在制作过程中对界面进行实时预览。
+
+[界面编辑器使用说明](../18-界面与交互/1-界面编辑器使用说明.html)
+
+ 认识界面控件
+
+
+
+## 玩法
+
+想让你的自定义生物可以在水中遨游,给方块更换模型,或者让你的史蒂夫可以打出帅气的连招,都需要进行玩法开发。
+
+对此,你有两种有力的武器可以使用,分别是附加包编辑和Python编程。
+
+附加包(Add On)是微软提供的一系列Json配置文件,你可以通过新增Json文件来修改游戏的方方面面。
+
+模组SDK(Mod SDK)是一套以事件为核心的中国版模组开发的Python编程工具,除了直接写代码之外,还可以使用预设架构结合编辑器一起使用,提高某些场景下的开发效率。
+
+在了解玩法开发之前,你可能需要了解一些我的世界的基本概念。
+
+[我的世界基础概念](../20-玩法开发/10-基本概念/1-我的世界基础概念.html)
+
+ 认识Minecraft世界
+
+
+
+## 组装简单玩法
+
+编辑器提供了一些内置的玩法模块,供开发者直接使用而无需编程,例如内置的预设和零件。
+
+[关卡编辑器使用说明](../20-玩法开发/11-组装简单玩法/0-关卡编辑器.md)
+
+内置资源包
+
+## 可视化编程(蓝图)
+
+编辑器内置的玩法模块可能不能满足你的野心,如果你需要更加特殊的玩法,就要开始接触编程了。目前我们为大家提供了一套全面的可视化编程工具,你可以通过连接节点的方式实现更加定制化的需求。这套工具内置在新版编辑器的逻辑编辑器中,目前可以几乎所有模组SDK编程能实现的需求。
+
+[新版逻辑编辑器概述](../20-玩法开发/12-可视化编程/10-新版逻辑编辑器使用说明/01-什么是逻辑编辑器.html)
+
+推荐大家观看下面的视频进行初步的学习:
+
+- [第一个蓝图Mod](../20-玩法开发/12-可视化编程/00-第一个蓝图Mod/00-教程视频.html)
+- [制作跑酷地图](../20-玩法开发/12-可视化编程/30-新版示例教程(视频)/05-制作跑酷地图(视频).md)
+- [制作简易射击附加包](../20-玩法开发/12-可视化编程/30-新版示例教程(视频)/07-制作简易射击附加包(视频)/01.md)
+
+
+
+## Python编程
+
+目前,一些较为复杂的玩法逻辑只能通过Python编程来实现。我们提供了强大的模组SDK(Mod SDK)供各位开发者使用。使用好这一工具需要一些Python编程的基础知识作为前置,你可以在[这个网站](https://www.liaoxuefeng.com/wiki/1016959663602400)进行学习。
+
+[脚本开发入门](../20-玩法开发/13-模组SDK编程/2-Python脚本开发/0-脚本开发入门.html)
+
+ 认识MODSDK
+
+编程离不开接口的使用,除了Python自带的接口之外,你还需要使用模组SDK提供的一系列接口(API),这些接口的文档在技术手册中,在编程的过程中你可能需要实时查阅。
+
+ Mod API - 通用接口 - 索引
+
+最近,我们推出了新的完全面向对象的预设架构,对于玩法地图,自定义生物/实体等等的制作带来了显著的效率提升。编辑器对预设架构进行了完整的支持,你可以很方便的新建、预览和编辑相关文件。
+
+[第一个预设Mod](../20-玩法开发/14-预设玩法编程/9-第一个预设Mod/)
+
+预设架构的具有一定的难度,我们为各位开发者提供了一段视频,推荐大家进行学习
+
+- [第一个预设模组(视频)](../20-玩法开发/14-预设玩法编程/10-第一个预设模组(视频)/01.html)
+
+预设架构同样提供了一系列的API供查阅。
+
+ 预设管理 API
+
+## 自定义游戏内容
+
+大部分情况下,想要修改或者新增方块,实体等等原版游戏包含的内容,都需要使用附加包(Add On)。附加包里玩法相关的部分主要是Json文件,你可以在开发工作台(MC Studio)的下载目录中找到我的世界自带的附加包,分为行为包和资源包:
+
+- 行为包:\MCStudioDownload\game\MinecraftPE_Netease\(版本号)\data\behavior_packs\vanilla
+- 资源包:\MCStudioDownload\game\MinecraftPE_Netease\(版本号)\data\resource_packs\vanilla
+
+编辑器对附加包的修改提供了全中文和界面化支持,可以免于手动编辑Json文件,目前对于行为包的支持已经比较完善,并且支持部分资源包的编辑,我们会在后续对所有附加包内容提供编辑器支持。
+
+[配置](../20-玩法开发/15-自定义游戏内容/0-配置.html)
+
+
+
+对于编辑器目前不支持的附加包编辑功能,你可以直接编辑Json文件实现。
+
+除了修改属性之外,通过附加包还可以编辑生物的AI,为实体和方块等指定模型,贴图,动画(包括动画逻辑),材质和特效(包括特效的播放逻辑)等等。
+
+[自定义基础物品](../20-玩法开发/15-自定义游戏内容/1-自定义物品/1-自定义基础物品.html)
+
+ 认识Add-on
+
+## 手机电脑适配
+
+将你做好的组件上架到中国版手机端(PE)是一个好主意。但是我的世界本身就提供了跨平台的功能,我们也贴心的为你提供了组件适配的教程,你可以花费非常小的工作量,将你精美优秀的组件同步上架到电脑端(PC),为你带来更多的粉丝和收入。
+
+何乐而不为!
+
+[PE模组适配PC](../20-玩法开发/19-手机电脑适配/1-PE模组适配PC.html)
+
+
+
+## 网络游戏
+
+网络服开服工具(Apollo)是用于开发和部署我的世界PE版网络游戏服务器集群的工具。集成插件、负载均衡、集群管理、运营指令等功能于一体。开发者只需专注于MOD业务逻辑,便可开发更多玩法组件,为我的世界网络服的创新拓展带来更多可能。
+
+网络服开发者简称“服主”,服主在申请成为开发者之后,还需要申请测试机器,用于网络服的部署开发。开发完成后,需要进行提审,申请正式机器,用于最终上线。
+
+测试机器申请可查看教程:入驻申请。
+
+获得测试机器之后,需要连接开发机,可查看课程:连接开发机。
+
+机器连接成功之后,可以按照指引视频,完成一系列的基本操作。可查看课程:简易网络服视频教程。
+
+其余的教学内容简介详见官网——教学中心——网络游戏以及官网——在线课程——网络服插件教程。
+
+
+
+
+
+
+
+## 测试
+
+制作游戏通常是在编辑器中,或者使用第三方的软件,但是在开发的过程中,你通常需要频繁的检测自己写的逻辑,或者制作/导入的资源是否可以在真正的游戏中正常运行。
+
+这时,你就需要用到我们提供的测试工具了。开发工作台提供了数种测试方法,包括在编辑器内点击运行,点击作品的开发测试,以及通过存档进行开发测试。
+
+开发测试使用的工具主要是基岩版开发板(Mod PC开发包),这个是专门用于测试的开发版本的我的世界。在测试中,你可以查看游戏运行时实时发送的日志,管理模组文件,使用调试代码。除了单人测试之外,我们还支持了联机测试和手机端测试。
+
+[用 Mod PC 开发包进行局域网多人测试](../30-测试/0-ModPC开发包多人测试.html)
+
+[使用调试工具进行手机和电脑端调试](../30-测试/1-使用调试工具进行手机和电脑端调试.html)
+
+## 上传你的作品
+
+在辛苦的完成你的模组,并且测试完毕,没有错误(bug)之后,你就可以上传你的作品到中国版的资源中心了。
+
+这一步你需要用到开发者平台。当然如果你想要在资源中心出售你的模组(即使是免费),你还是需要遵守我们制定的一系列规则。
+
+[正确上传作品的方式及途径](../35-上架与入驻/课程05-正确上传作品的方式及途径.html)
+
+[组件上架的规范及过审攻略](../35-上架与入驻/课程03-组件上架的规范及过审攻略.html)
+
+## 售卖和收益
+
+现在到了谈钱的时候了,不要害羞,我们既要自我实现,也要填饱肚子。
+
+当你的付费组件产生收益之后,我们会与你进行分成,相关的收益在开发者平台可以很方便的查询到。
+
+除了单纯的售卖之外,你可以在开发者平台参加我们为你准备的各种活动,使用我们的计划为你的组件进行推广。
+
+[收益查看及结算](../40-活动、推广与收益/课程07-收益查看及结算.html)
+
+[内容推广模块](../40-活动、推广与收益/课程08-对作品进行推广与活动.html)
+
+## 问题和反馈
+
+文档是有限的,我的世界和模组开发是无限的。
+
+总有文档覆盖不到的内容,如果你有其他的问题,可以先在这里查看我们是否已经有相应的回答了。
+
+[常见问题答疑](../50-常见问题答疑/)
+
+如果没有的话,任何你想知道的,我们做的不好的地方,我们非常,非常,非常欢迎你向我们进行反馈,你的反馈是我们进步的源泉。
+
+[点击此此链接](https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&inviteCode=1VX5Hn&from=181074&biz=ka&shareSource=5#/pc)加入我的世界开发者QQ频道。
+
+频道主要用于开发者之间的交流及官⽅活动发布,频道申请时需要备注开发者昵称及开发者邮箱。
+
+开发者邮箱:minecraftstarter@163.com
+
+⼀般⽤于申请推荐位,以及反馈平台上遇到的问题,建议等。
+
+开发者论坛:http://mc.netease.com/forum-111-1.html
+
+可以与其他开发者进行交流!根据板块反馈相对应问题,也可以举报违规组件,或是对违规处理结果存疑时进⾏申诉。
+
diff --git a/mcguide/12-入门教程/images/0_1.png b/mcguide/12-入门教程/images/0_1.png
new file mode 100644
index 0000000..3bd9b73
Binary files /dev/null and b/mcguide/12-入门教程/images/0_1.png differ
diff --git a/mcguide/12-入门教程/images/0_2.png b/mcguide/12-入门教程/images/0_2.png
new file mode 100644
index 0000000..294f934
Binary files /dev/null and b/mcguide/12-入门教程/images/0_2.png differ
diff --git a/mcguide/12-入门教程/images/0_4.png b/mcguide/12-入门教程/images/0_4.png
new file mode 100644
index 0000000..3993a45
Binary files /dev/null and b/mcguide/12-入门教程/images/0_4.png differ
diff --git a/mcguide/12-入门教程/images/0_5.png b/mcguide/12-入门教程/images/0_5.png
new file mode 100644
index 0000000..6986097
Binary files /dev/null and b/mcguide/12-入门教程/images/0_5.png differ
diff --git a/mcguide/12-入门教程/images/0_6.png b/mcguide/12-入门教程/images/0_6.png
new file mode 100644
index 0000000..8c1d19d
Binary files /dev/null and b/mcguide/12-入门教程/images/0_6.png differ
diff --git a/mcguide/12-入门教程/images/0_7.png b/mcguide/12-入门教程/images/0_7.png
new file mode 100644
index 0000000..247f269
Binary files /dev/null and b/mcguide/12-入门教程/images/0_7.png differ
diff --git a/mcguide/12-入门教程/images/1-1.png b/mcguide/12-入门教程/images/1-1.png
new file mode 100644
index 0000000..e0bb581
Binary files /dev/null and b/mcguide/12-入门教程/images/1-1.png differ
diff --git a/mcguide/12-入门教程/images/10_1.jpg b/mcguide/12-入门教程/images/10_1.jpg
new file mode 100644
index 0000000..2f8a626
Binary files /dev/null and b/mcguide/12-入门教程/images/10_1.jpg differ
diff --git a/mcguide/12-入门教程/images/1611573223356.png b/mcguide/12-入门教程/images/1611573223356.png
new file mode 100644
index 0000000..4da0040
Binary files /dev/null and b/mcguide/12-入门教程/images/1611573223356.png differ
diff --git a/mcguide/12-入门教程/images/1_3.jpg b/mcguide/12-入门教程/images/1_3.jpg
new file mode 100644
index 0000000..ee9ae76
Binary files /dev/null and b/mcguide/12-入门教程/images/1_3.jpg differ
diff --git a/mcguide/12-入门教程/images/20210828215544.png b/mcguide/12-入门教程/images/20210828215544.png
new file mode 100644
index 0000000..bff201b
Binary files /dev/null and b/mcguide/12-入门教程/images/20210828215544.png differ
diff --git a/mcguide/12-入门教程/images/6_1.png b/mcguide/12-入门教程/images/6_1.png
new file mode 100644
index 0000000..ef6bba0
Binary files /dev/null and b/mcguide/12-入门教程/images/6_1.png differ
diff --git a/mcguide/12-入门教程/images/6_10.png b/mcguide/12-入门教程/images/6_10.png
new file mode 100644
index 0000000..38cc81f
Binary files /dev/null and b/mcguide/12-入门教程/images/6_10.png differ
diff --git a/mcguide/12-入门教程/images/6_11.png b/mcguide/12-入门教程/images/6_11.png
new file mode 100644
index 0000000..ce1e7c4
Binary files /dev/null and b/mcguide/12-入门教程/images/6_11.png differ
diff --git a/mcguide/12-入门教程/images/6_12.png b/mcguide/12-入门教程/images/6_12.png
new file mode 100644
index 0000000..4621e76
Binary files /dev/null and b/mcguide/12-入门教程/images/6_12.png differ
diff --git a/mcguide/12-入门教程/images/6_13.png b/mcguide/12-入门教程/images/6_13.png
new file mode 100644
index 0000000..2cfa678
Binary files /dev/null and b/mcguide/12-入门教程/images/6_13.png differ
diff --git a/mcguide/12-入门教程/images/6_14.png b/mcguide/12-入门教程/images/6_14.png
new file mode 100644
index 0000000..49222f6
Binary files /dev/null and b/mcguide/12-入门教程/images/6_14.png differ
diff --git a/mcguide/12-入门教程/images/6_15.png b/mcguide/12-入门教程/images/6_15.png
new file mode 100644
index 0000000..0292010
Binary files /dev/null and b/mcguide/12-入门教程/images/6_15.png differ
diff --git a/mcguide/12-入门教程/images/6_16.png b/mcguide/12-入门教程/images/6_16.png
new file mode 100644
index 0000000..c1b70d4
Binary files /dev/null and b/mcguide/12-入门教程/images/6_16.png differ
diff --git a/mcguide/12-入门教程/images/6_17.png b/mcguide/12-入门教程/images/6_17.png
new file mode 100644
index 0000000..529c187
Binary files /dev/null and b/mcguide/12-入门教程/images/6_17.png differ
diff --git a/mcguide/12-入门教程/images/6_18.png b/mcguide/12-入门教程/images/6_18.png
new file mode 100644
index 0000000..c76e9a7
Binary files /dev/null and b/mcguide/12-入门教程/images/6_18.png differ
diff --git a/mcguide/12-入门教程/images/6_19.png b/mcguide/12-入门教程/images/6_19.png
new file mode 100644
index 0000000..bec2538
Binary files /dev/null and b/mcguide/12-入门教程/images/6_19.png differ
diff --git a/mcguide/12-入门教程/images/6_2.png b/mcguide/12-入门教程/images/6_2.png
new file mode 100644
index 0000000..eeadc7e
Binary files /dev/null and b/mcguide/12-入门教程/images/6_2.png differ
diff --git a/mcguide/12-入门教程/images/6_20.png b/mcguide/12-入门教程/images/6_20.png
new file mode 100644
index 0000000..a4c1da9
Binary files /dev/null and b/mcguide/12-入门教程/images/6_20.png differ
diff --git a/mcguide/12-入门教程/images/6_21.png b/mcguide/12-入门教程/images/6_21.png
new file mode 100644
index 0000000..5c39bc7
Binary files /dev/null and b/mcguide/12-入门教程/images/6_21.png differ
diff --git a/mcguide/12-入门教程/images/6_22.png b/mcguide/12-入门教程/images/6_22.png
new file mode 100644
index 0000000..b9c3f0c
Binary files /dev/null and b/mcguide/12-入门教程/images/6_22.png differ
diff --git a/mcguide/12-入门教程/images/6_23.png b/mcguide/12-入门教程/images/6_23.png
new file mode 100644
index 0000000..ae7f4ff
Binary files /dev/null and b/mcguide/12-入门教程/images/6_23.png differ
diff --git a/mcguide/12-入门教程/images/6_24.png b/mcguide/12-入门教程/images/6_24.png
new file mode 100644
index 0000000..580cacd
Binary files /dev/null and b/mcguide/12-入门教程/images/6_24.png differ
diff --git a/mcguide/12-入门教程/images/6_3.png b/mcguide/12-入门教程/images/6_3.png
new file mode 100644
index 0000000..9b0aaa5
Binary files /dev/null and b/mcguide/12-入门教程/images/6_3.png differ
diff --git a/mcguide/12-入门教程/images/6_4.png b/mcguide/12-入门教程/images/6_4.png
new file mode 100644
index 0000000..7aab1fc
Binary files /dev/null and b/mcguide/12-入门教程/images/6_4.png differ
diff --git a/mcguide/12-入门教程/images/6_5.png b/mcguide/12-入门教程/images/6_5.png
new file mode 100644
index 0000000..e7df02e
Binary files /dev/null and b/mcguide/12-入门教程/images/6_5.png differ
diff --git a/mcguide/12-入门教程/images/6_6.png b/mcguide/12-入门教程/images/6_6.png
new file mode 100644
index 0000000..119f4e8
Binary files /dev/null and b/mcguide/12-入门教程/images/6_6.png differ
diff --git a/mcguide/12-入门教程/images/6_7.png b/mcguide/12-入门教程/images/6_7.png
new file mode 100644
index 0000000..3f045e6
Binary files /dev/null and b/mcguide/12-入门教程/images/6_7.png differ
diff --git a/mcguide/12-入门教程/images/6_8.png b/mcguide/12-入门教程/images/6_8.png
new file mode 100644
index 0000000..b2ddc34
Binary files /dev/null and b/mcguide/12-入门教程/images/6_8.png differ
diff --git a/mcguide/12-入门教程/images/6_9.png b/mcguide/12-入门教程/images/6_9.png
new file mode 100644
index 0000000..d8ca17c
Binary files /dev/null and b/mcguide/12-入门教程/images/6_9.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_1.png b/mcguide/12-入门教程/images/aihelper_1.png
new file mode 100644
index 0000000..877212c
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_1.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_10.png b/mcguide/12-入门教程/images/aihelper_10.png
new file mode 100644
index 0000000..a36fbec
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_10.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_2.png b/mcguide/12-入门教程/images/aihelper_2.png
new file mode 100644
index 0000000..d941fd0
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_2.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_3.png b/mcguide/12-入门教程/images/aihelper_3.png
new file mode 100644
index 0000000..3e6f542
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_3.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_4.png b/mcguide/12-入门教程/images/aihelper_4.png
new file mode 100644
index 0000000..fee9d97
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_4.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_5.png b/mcguide/12-入门教程/images/aihelper_5.png
new file mode 100644
index 0000000..02f1606
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_5.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_6.png b/mcguide/12-入门教程/images/aihelper_6.png
new file mode 100644
index 0000000..9db754b
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_6.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_7.png b/mcguide/12-入门教程/images/aihelper_7.png
new file mode 100644
index 0000000..fbddeb4
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_7.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_8.png b/mcguide/12-入门教程/images/aihelper_8.png
new file mode 100644
index 0000000..e6a5b4c
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_8.png differ
diff --git a/mcguide/12-入门教程/images/aihelper_9.png b/mcguide/12-入门教程/images/aihelper_9.png
new file mode 100644
index 0000000..6ef36fc
Binary files /dev/null and b/mcguide/12-入门教程/images/aihelper_9.png differ
diff --git a/mcguide/12-入门教程/images/apollo_category.png b/mcguide/12-入门教程/images/apollo_category.png
new file mode 100644
index 0000000..7c81116
Binary files /dev/null and b/mcguide/12-入门教程/images/apollo_category.png differ
diff --git a/mcguide/12-入门教程/images/apollo_category_1.png b/mcguide/12-入门教程/images/apollo_category_1.png
new file mode 100644
index 0000000..1b14ded
Binary files /dev/null and b/mcguide/12-入门教程/images/apollo_category_1.png differ
diff --git a/mcguide/12-入门教程/images/blender_make_step7.png b/mcguide/12-入门教程/images/blender_make_step7.png
new file mode 100644
index 0000000..2f69692
Binary files /dev/null and b/mcguide/12-入门教程/images/blender_make_step7.png differ
diff --git a/mcguide/12-入门教程/images/config004.png b/mcguide/12-入门教程/images/config004.png
new file mode 100644
index 0000000..26adc5d
Binary files /dev/null and b/mcguide/12-入门教程/images/config004.png differ
diff --git a/mcguide/12-入门教程/images/road_1.png b/mcguide/12-入门教程/images/road_1.png
new file mode 100644
index 0000000..8dcbaa2
Binary files /dev/null and b/mcguide/12-入门教程/images/road_1.png differ
diff --git a/mcguide/12-入门教程/images/road_2.png b/mcguide/12-入门教程/images/road_2.png
new file mode 100644
index 0000000..4e8b150
Binary files /dev/null and b/mcguide/12-入门教程/images/road_2.png differ
diff --git a/mcguide/12-入门教程/images/road_3.png b/mcguide/12-入门教程/images/road_3.png
new file mode 100644
index 0000000..cc9436b
Binary files /dev/null and b/mcguide/12-入门教程/images/road_3.png differ
diff --git a/mcguide/12-入门教程/images/studio_image001.png b/mcguide/12-入门教程/images/studio_image001.png
new file mode 100644
index 0000000..0ff6a19
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image001.png differ
diff --git a/mcguide/12-入门教程/images/studio_image003.png b/mcguide/12-入门教程/images/studio_image003.png
new file mode 100644
index 0000000..8d3b7d4
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image003.png differ
diff --git a/mcguide/12-入门教程/images/studio_image004.png b/mcguide/12-入门教程/images/studio_image004.png
new file mode 100644
index 0000000..e86c824
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image004.png differ
diff --git a/mcguide/12-入门教程/images/studio_image005.png b/mcguide/12-入门教程/images/studio_image005.png
new file mode 100644
index 0000000..dbc4bc2
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image005.png differ
diff --git a/mcguide/12-入门教程/images/studio_image006.png b/mcguide/12-入门教程/images/studio_image006.png
new file mode 100644
index 0000000..f85102d
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image006.png differ
diff --git a/mcguide/12-入门教程/images/studio_image007.png b/mcguide/12-入门教程/images/studio_image007.png
new file mode 100644
index 0000000..68cf812
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image007.png differ
diff --git a/mcguide/12-入门教程/images/studio_image008.png b/mcguide/12-入门教程/images/studio_image008.png
new file mode 100644
index 0000000..65f4db3
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image008.png differ
diff --git a/mcguide/12-入门教程/images/studio_image009.png b/mcguide/12-入门教程/images/studio_image009.png
new file mode 100644
index 0000000..78d445b
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image009.png differ
diff --git a/mcguide/12-入门教程/images/studio_image010.png b/mcguide/12-入门教程/images/studio_image010.png
new file mode 100644
index 0000000..653100f
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image010.png differ
diff --git a/mcguide/12-入门教程/images/studio_image012.jpg b/mcguide/12-入门教程/images/studio_image012.jpg
new file mode 100644
index 0000000..6c7497f
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image012.jpg differ
diff --git a/mcguide/12-入门教程/images/studio_image014.jpg b/mcguide/12-入门教程/images/studio_image014.jpg
new file mode 100644
index 0000000..c26a8a8
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image014.jpg differ
diff --git a/mcguide/12-入门教程/images/studio_image_aihelper.png b/mcguide/12-入门教程/images/studio_image_aihelper.png
new file mode 100644
index 0000000..2c3c753
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image_aihelper.png differ
diff --git a/mcguide/12-入门教程/images/studio_image_homepage.png b/mcguide/12-入门教程/images/studio_image_homepage.png
new file mode 100644
index 0000000..d0c0c9d
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image_homepage.png differ
diff --git a/mcguide/12-入门教程/images/studio_image_javamod.png b/mcguide/12-入门教程/images/studio_image_javamod.png
new file mode 100644
index 0000000..ef837f7
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image_javamod.png differ
diff --git a/mcguide/12-入门教程/images/studio_image_javaserver.png b/mcguide/12-入门教程/images/studio_image_javaserver.png
new file mode 100644
index 0000000..7571532
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image_javaserver.png differ
diff --git a/mcguide/12-入门教程/images/studio_image_launch-1.png b/mcguide/12-入门教程/images/studio_image_launch-1.png
new file mode 100644
index 0000000..81827d5
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image_launch-1.png differ
diff --git a/mcguide/12-入门教程/images/studio_image_launch.png b/mcguide/12-入门教程/images/studio_image_launch.png
new file mode 100644
index 0000000..8e2c96d
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image_launch.png differ
diff --git a/mcguide/12-入门教程/images/studio_image_peserver.png b/mcguide/12-入门教程/images/studio_image_peserver.png
new file mode 100644
index 0000000..b0afc28
Binary files /dev/null and b/mcguide/12-入门教程/images/studio_image_peserver.png differ
diff --git a/mcguide/12-入门教程/images/ui_image004.png b/mcguide/12-入门教程/images/ui_image004.png
new file mode 100644
index 0000000..a2d51c4
Binary files /dev/null and b/mcguide/12-入门教程/images/ui_image004.png differ
diff --git a/mcguide/14-地图制作/2-地图编辑器使用说明.md b/mcguide/14-地图制作/2-地图编辑器使用说明.md
new file mode 100644
index 0000000..013e20b
--- /dev/null
+++ b/mcguide/14-地图制作/2-地图编辑器使用说明.md
@@ -0,0 +1,110 @@
+---
+front: https://nie.res.netease.com/r/pic/20221219/e57b7c1f-382e-4095-bbbd-573ca78fb57a.png
+hard: 入门
+time: 10分钟
+selection: 100
+---
+
+# 地图编辑器使用说明
+
+**在本文中**
+
+- [界面介绍](#界面介绍)
+- [预览窗功能](#预览窗功能)
+- [维度切换](#维度切换)
+- [主要工具](#主要工具)
+- [其他相关文档](#其他相关文档)
+- [常用快捷键](#常用快捷键)
+
+::: warning 注意
+
+以下内容仅适用于 **新版编辑器** 。旧版编辑器现已停止更新,请将作品升级至新版使用。
+
+:::
+
+使用本章可快速查找并了解地图编辑器的工具资源和其他相关文档,以及常用快捷键。
+
+
+
+## 界面介绍
+
+地图编辑器的功能分区如下图所示:
+
+
+
+1. ### 界面划分
+
+ - **工具栏:** 包含地图编辑器主要编辑功能的入口按钮,同时还有撤销重做、保存、游戏模式、运行等编辑常用功能入口。
+
+ - **副工具栏:** 用于展示工具栏中部分功能的配置项。在副工具栏中配置的功能通常较为简单,可配置项不多。
+
+ - **功能窗口:** 如果一个编辑工具的功能较为庞杂,需要很多配置项,则会单独为其展示一个功能窗口,比如材质、笔刷、地形、素材库等,都有单独的窗口供您使用。
+
+ - **预览窗:** 用于在编辑器内嵌游戏中提供编辑操作的预览效果。同时还兼具维度切换、坐标展示等功能。
+
+
+2. ### 窗口布局调整
+
+ -
+ 您可以根据自己的编辑需要,自行移动、开关功能窗口。
+
+
+
+
+## 预览窗功能
+
+编辑器预览窗里,默认的镜头移动方式类似我的世界创造模式的飞行:
+
+- WASD键控制前后左右的移动,Shift键向下移动,空格键向上移动;
+- 长按鼠标右键并移动鼠标,可调整当前视角;
+- 使用鼠标滚轮沿当前镜头方向前进/后退。
+
+在菜单栏点击【作品】-【设置】,可以调整操作方式为【镜头模式】:
+
+- 在镜头模式下,W/S键控制移动为沿镜头方向的前进/后退。
+
+
+
+
+## 维度切换
+
+如果您需要在主世界以外的其他维度进行地图编辑,可以点击预览窗左上角的维度下拉菜单,将内嵌游戏切换至其他维度,如下界、末地,或者您自行创建的自定义维度。
+
+
+
+如果在切换维度前存在自定义维度增删等操作,您可能会遇到弹窗提醒重载地图。详情请见关卡编辑器文档中[关于维度增删特殊情况的说明](../20-玩法开发/11-组装简单玩法/0-关卡编辑器.md#4-增删维度的特殊情况)。
+
+## 主要工具
+
+1. [选区工具](./3-选取工具.md)
+2. [编辑工具](./4-编辑工具.md)
+3. [材质选择](./5-材质选择.md)
+4. [笔刷工具](./6-笔刷工具.md)
+5. [地形工具](./7-地形工具.md)
+6. [素材库、结构与剪贴板](./8-素材库、结构与剪贴板.md)
+
+## 其他相关文档
+
+1. [方块状态值设置说明](./91-方块状态值设置说明.md)
+2. [蒙版工具说明](./92-蒙版工具说明.md)
+
+
+## 常用快捷键
+
+以下为常用的快捷键。
+
+| 功能 | 快捷键| | 功能 | 快捷键 |
+| :--- | :--- | :--- | :--- | :--- |
+| 撤销 | ctrl+Z | | 复制 | ctrl+C |
+| 重做 | ctrl+Y | | 剪切 | ctrl+X |
+| 保存地图 | ctrl+S | | 粘贴 | ctrl+V |
+| 笔刷 | B | | 打开材质 | E |
+| 地形 | L | | 切换材质 | 数字键1到0 |
+| 选取 | M | | 以当前材质填充 | alt+delete |
+| 取消选取 | ctrl+D | | 切换材质预设分页 | ~ |
+| 编辑 | Q | | 调整选区/模型位置 | ctrl+鼠标滚轮 |
+| 删除 | delete | | 吸管 | I |
+| 完成 | 回车 | | 堆叠 | ctrl+M |
+| 放弃编辑 | esc | | 填充 | ctrl+F |
+| 橡皮 | Y | | 替换 | ctrl+H |
+| 出生点 | ctrl+B || 偏移 | V |
\ No newline at end of file
diff --git a/mcguide/14-地图制作/3-选取工具.md b/mcguide/14-地图制作/3-选取工具.md
new file mode 100644
index 0000000..4a4b8e2
--- /dev/null
+++ b/mcguide/14-地图制作/3-选取工具.md
@@ -0,0 +1,122 @@
+---
+front: https://nie.res.netease.com/r/pic/20221221/2db6428c-4864-44b1-9f0d-109a1be77bbd.png
+hard: 入门
+time: 15分钟
+selection: 90
+---
+
+# 选取工具
+
+选取工具能让您能够更加方便地对范围内的方块进行选中。在开始之前,您应该知道如何启动 **MC Studio** 、 **创建项目** 、 **进入编辑器模式** 并学会在内嵌游戏中 **移动** 。
+
+在本指南中,您将学会:
+
+- 如何使用 **地图编辑器** 基础操作—— **选取工具** 。
+
+
+
+## 要求
+
+建议在开始本指南之前完成以下内容。
+
+- [MC Studio使用说明](../12-入门教程/20-MC%20Studio使用说明.md)
+- [地图编辑器使用说明](./2-地图编辑器使用说明.md)
+
+
+
+## 基础选取操作
+
+点击工具栏中的【选取】按钮,即可进入选取模式。在选取模式下,选择一个方块作为 **起点** ,然后 **按住左键** 拖拽至 **终点** ,以起点和终点为对角线生成 **选区(包围盒)** 。
+
+
+
+## 选区调整
+
+选好选区后,您可以对选区进行如下调整:
+
+- 拖动位移拖柄,对选区的位置进行X、Y、Z轴的移动.
+
+
+
+- 点击工具栏【偏移】按钮,可以对选区位置进行更精确地调整。
+
+
+
+::: tip 快捷键
+
+Ctrl+鼠标滚轮调整包围盒的纵向位置,用键盘↑↓←→方向键调整包围盒的水平位置。
+
+:::
+
+- 拖动某个平面,调整选区尺寸;
+
+
+
+- 点击空气区域或按ESC键取消选取选区。
+
+
+
+- 单选模式下,当选区存在时,可以直接框选另一处选区以创建新的包围盒。
+
+
+
+## 选区操作
+
+选定好选区之后,您就可以对选区内方块进行进一步的操作了。
+
+- **删除**(delete):快速删除选区内的方块。
+
+
+
+- **复制/剪切**(ctrl+X/ctrl+Z):将选区及内部方块复制/剪切至剪贴版。此时包围盒会变成黄色状态,并进入[编辑](./4-编辑工具.html)状态。
+
+
+
+- **堆叠**(ctrl+M):点击堆叠按钮,将选中区域沿X、Y、Z轴定向堆叠指定次数, **确定** 选择后即可生成。
+
+
+
+- **填充**(ctrl+F):将选中区域中的全部空间替换成选定的方块,按下 **填充** 后即可生成。
+
+
+
+- **替换**(ctrl+H):将选中区域中含有的一种方块全部替换为选定的方块。点击每一行替代方块的右槽方块,选取您想要的方块材质,点击 **替换** 按钮一键看到结果。
+
+
+
+::: tip 提示
+
+填充和替换工具可以指定所用方块的状态值,例如您可以指定使用朝东的原木楼梯来填充选区。关于状态值的使用,请查看[这篇文档](./91-方块状态值设置说明.md)。
+
+:::
+
+## 多选模式
+
+选取工具默认为【单选模式】,我们可以在副工具栏上切换为【多选模式】,这样我们可以同时选出多个选区。
+
+
+
+- 选中多个选区后,可以对其中单独一个选区进行位置、尺寸的调整。
+
+
+
+
+::: tip 提示
+
+复制、剪切、堆叠、填充、替换、偏移等工具将对全部选区共同生效。
+
+:::
+
+
+
+## 智能识别物体
+
+选中建筑区域后,右键选择 **智能识别物体**,即可框选出指定的建筑结构,并将包围盒缩小至建筑大小,方便进一步操作。
+
+
+
+
+
+## 下一步:编辑工具
+
+选取区域还仅仅只是第一步,使用[编辑工具](./4-编辑工具.md)对世界做些改变吧!
diff --git a/mcguide/14-地图制作/4-编辑工具.md b/mcguide/14-地图制作/4-编辑工具.md
new file mode 100644
index 0000000..d94b003
--- /dev/null
+++ b/mcguide/14-地图制作/4-编辑工具.md
@@ -0,0 +1,74 @@
+---
+front: https://nie.res.netease.com/r/pic/20221221/92b4fd40-9630-44a3-a4f4-247f5810ffa6.png
+hard: 入门
+time: 5分钟
+selection: 80
+---
+
+# 编辑工具
+
+选好选区后,编辑工具将选取方块模拟生成,并通过操作系列使其在世界中生效。在开始之前,您应该学会熟悉地图编辑器的布局与选取工具。
+
+
+
+在本指南中,您将学会:
+
+- 如何使用 **地图编辑器** 基础操作—— **编辑工具** 。
+
+::: danger 快捷键
+
+使用快捷键Q快速切换选区模式至编辑模式,对包围盒内的方块结构进行编辑。
+
+:::
+
+
+
+## 要求
+
+建议在开始本指南之前完成以下内容。
+
+- [选取工具](./3-选取工具.md)
+
+
+
+## 常用编辑操作
+
+在编辑模式下,我们可以:
+
+- **使用拖柄移动选区内的方块。**
+
+
+
+- **使用拖柄缩放选区内的方块。**
+
+
+
+- **选区方块绕轴旋转:** 在 **编辑工具** 的 **副工具栏** 可以选择沿一个轴旋转`90°`、`180°`或`-90°`。
+
+
+
+- **选区方块沿轴按倍数伸缩:** 在 **编辑工具** 的 **副工具栏** 可以选择沿一个轴旋转`90°`、`180°`或`-90°`。
+
+
+
+::: danger 提示
+
+需要注意的是,如果选区内有明确方向状态的方块,一般不适合直接对齐进行尺寸伸缩,或进行沿X、Z轴的旋转操作,因为在大多数情况下这样做并不能带来期望的效果。
+
+:::
+
+
+
+## 对多选选区的编辑
+
+在多选模式下,编辑操作影响所有子选区。点击 **编辑** 会显示一个大的包围盒,实际编辑人移动、旋转、缩放时,会将之前子选区内方块整合后统一处理。
+
+
+
+
+
+## 下一步:材质选择
+
+现在您已经学习了编辑工具的所有功能,包括如何将选取工具切换至编辑工具,并对所选区域进行移动、缩放、旋转。
+
+在下一节中,您将学习如何使用材质工具在地图中选取想要铺设的方块。
diff --git a/mcguide/14-地图制作/5-材质选择.md b/mcguide/14-地图制作/5-材质选择.md
new file mode 100644
index 0000000..b5ce5a9
--- /dev/null
+++ b/mcguide/14-地图制作/5-材质选择.md
@@ -0,0 +1,112 @@
+---
+front: https://nie.res.netease.com/r/pic/20221221/70a0fa58-73e0-4a59-ae80-7cfb91f1f781.png
+hard: 入门
+time: 10分钟
+selection: 70
+---
+
+# 材质选择
+
+在制作我的世界地图时,选择合适的方块至关重要。
+
+在本指南中,您将学会:
+
+- 如何使用 **地图编辑器** 基础操作—— **材质选择** 。
+
+
+
+## 要求
+
+建议在开始本指南之前先了解以下内容。
+
+- [地图编辑器使用说明](./2-地图编辑器使用说明.md)
+- [选取工具](./3-选取工具.md)
+- [编辑工具](./4-编辑工具.md)
+
+
+
+## 方块材质
+
+地图编辑器使用 [**材质预设功能**](#材质预设) 将方块类型包装为 **方块材质** ,就像在涂鸦软件中选择一个色值一样。每种方块类型即是色值的一种。
+
+在一个作品中,可能存在着非常多的自定义方块和原有的原版方块,这些方块材质都可以通过 **选择材质** 窗体找到。
+
+
+
+通过搜索框,可以快速匹配到想要的方块材质。
+
+
+
+::: danger 快捷键
+
+可以使用默认快捷键E打开 **选择材质** 窗体。
+
+:::
+
+
+
+## 材质预设
+
+材质预设指的是1个至多10个方块材质的组合。在材质预设中被选中的方块将作为笔刷、地形等工具的材质使用。
+
+::: danger 快捷键
+
+启用一个材质预设时,可以通过主键盘数字键1~0来快速切换当前预设中的材质,应用到工具中。
+
+:::
+
+
+
+### 创建、删除材质预设
+
+我们可以点击预设页签右侧的【+】按钮新增预设,或通过点击预设页签内的【×】按钮删除已存在的预设。
+
+
+
+### 预设内添加、删除材质
+
+点击材质右侧的【+】按钮,会打开材质选择框,选择好方块后点击【确认】按钮即可应用该方块到材质。想要删除预设中的材质,使用鼠标左键选中该材质后点击窗口右上角的【删除】按钮即可。
+
+::: info 注意
+
+材质方块选择支持指定状态值。详见[这篇文档](./91-方块状态值设置说明.md)。
+
+:::
+
+
+
+另外还有2个快捷的工具可以帮助您添加材质:
+
+- **吸管:** 可以直接选择地图中已有的方块,应用到材质中。
+- **复制:** 选中一个材质后点击复制按钮,即可创建一个与之完全相同的材质(包括状态值相同)。
+
+
+
+::: info 注意
+
+材质窗口有一个蒙版按钮,用于将当前材质应用到蒙版的快捷操作。是感兴趣的开发者可以阅读[这篇文档](./92-蒙版工具说明.md)了解蒙版的功能。
+
+:::
+
+
+
+## 混合材质
+
+混合材质有助于实现比较多样化的材质效果,避免单一材质应用到笔刷、地形工具后产生过于单一的效果。
+
+**使用方法如下:**
+1. 点击 **添加成分** 按钮,添加更多的方块。
+2. 修改每个方块的占比数值,使所有方块占比相加不超过100%(低于100%将有部分空间被留作空气。
+3. 直接使用笔刷或地形工具即可看到混合材质的效果。
+
+下图中我们展示了使用混合材质制作一条更加真实的石路效果。
+
+
+
+
+
+## 下一步:笔刷工具
+
+现在您已经学习了材质选择的所有功能,包括如何添加材质预设、改变方块材质、混合方块材质等。
+
+在下一节中,您将学习如何使用笔刷工具在地图中绘制想要的方块。学习结束时,您会重新将它们用于搭建基础地形、建造建筑框架。
\ No newline at end of file
diff --git a/mcguide/14-地图制作/6-笔刷工具.md b/mcguide/14-地图制作/6-笔刷工具.md
new file mode 100644
index 0000000..781857b
--- /dev/null
+++ b/mcguide/14-地图制作/6-笔刷工具.md
@@ -0,0 +1,216 @@
+---
+front: https://nie.res.netease.com/r/pic/20221221/e789927f-c71d-4218-a89d-8902fa4da1ad.png
+hard: 入门
+time: 15分钟
+selection: 60
+---
+
+# 笔刷工具
+
+使用笔刷工具,您可以直接在地图中快速生成指定形状的方块。笔刷首先需要指定材质,这需要用到上一篇介绍的[材质选择](./5-材质选择.md)功能。
+
+在本指南中,您将学会:
+
+- 如何使用 **地图编辑器** 基础操作—— **笔刷工具** 。
+
+
+
+下面将逐一展示当前地图编辑器支持的笔刷类型。
+
+
+
+## 要求
+
+建议在开始本指南之前先了解以下内容。
+
+- [地图编辑器使用说明](./2-地图编辑器使用说明.md)
+- [选取工具](./3-选取工具.md)
+- [编辑工具](./4-编辑工具.md)
+- [材质工具](./5-材质选择.md)
+
+
+
+## 单点笔刷
+
+单点笔刷用于放置单个方块。
+
+
+
+**笔刷参数**
+|参数名|参数说明|
+|:---|:---|
+|连续生成间距|在输入框中输入正整数,以指定当鼠标拖动多少格距离后生成一个笔刷形状。|
+|直线生成|勾选后,先单击一个坐标A,然后单击另一个坐标B,就会在以AB两点为端点的线段上生成笔刷形状。|
+|覆盖原方块|若勾选,则笔刷形状生成的方块会覆盖地图上位置重叠的已有方块。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+
+
+
+## 立方体笔刷
+
+立方体笔刷用于生成一个立方体形状,可指定该立方体在XYZ上的边长,同时可根据需要生成中空立方体、去除上下底面的中空立方体(可用于生成围墙)、立方体框架等。
+
+
+
+**笔刷参数**
+|参数名|参数说明|
+|:---|:---|
+|笔刷尺寸|输入立方体在XYZ三轴上的边长。|
+|结构选项|① 实心:生成实心立方体。
② 中空:生成空心立方体,搭配“厚度”参数可指定外壳部分厚度。
③ 去除底面:去除除立方体的上下底面,仅剩四周的4个面,支持配置“厚度”。
④ 仅框架:仅保留立方体框架结构,框架的粗细可使用“厚度”参数指定。
+|厚度|用于指定中空、去除底面情况下的面的厚度,以及仅框架情况下的框架粗细。|
+|连续生成间距|在输入框中输入正整数,以指定当鼠标拖动多少格距离后生成一个笔刷形状。|
+|直线生成|勾选后,先单击一个坐标A,然后单击另一个坐标B,就会在以AB两点为端点的线段上生成笔刷形状。|
+|覆盖原方块|若勾选,则笔刷形状生成的方块会覆盖地图上位置重叠的已有方块。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+
+
+
+## 球体笔刷
+
+用于生成一个球体,当半球体包围盒XYZ三个轴上的尺寸参数配置不等时,即生成椭球体。可根据需要生成空心球。
+
+
+
+**笔刷参数**
+|参数名|参数说明|
+|:---|:---|
+|笔刷尺寸|输入球体的包围盒在XYZ三轴上的边长。当三个数值不完全相等时,即生成椭球体。|
+|结构选项|① 实心:生成实心球体。
② 中空:生成空心球体,搭配“厚度”参数可指定外壳部分厚度。
+|厚度|用于指定中空情况下的球壳厚度。|
+|连续生成间距|在输入框中输入正整数,以指定当鼠标拖动多少格距离后生成一个笔刷形状。|
+|直线生成|勾选后,先单击一个坐标A,然后单击另一个坐标B,就会在以AB两点为端点的线段上生成笔刷形状。|
+|覆盖原方块|若勾选,则笔刷形状生成的方块会覆盖地图上位置重叠的已有方块。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+
+
+
+## 半球体笔刷
+
+用于生成一个球体,当半球体包围盒在X轴、Z轴上的边长不同时等于Y轴边长的2倍时,生成非标准半球体。可根据需要生成空心半球体、去除底面的空心半球体(可用于生成穹顶等)。
+
+
+
+**笔刷参数**
+|参数名|参数说明|
+|:---|:---|
+|笔刷尺寸|输入**默认状态下**半球体的包围盒在XYZ三轴上的边长。当X轴、Z轴上的数值不同时等于Y轴数值的2倍时,生成非标准半球体。
对于半球体默认状态指的是以+Y为放置方向的状态。改变放置方向后会出现XYZ数值与实际游戏内笔刷包围盒在XYZ轴上的三边不一样的情况。|
+|结构选项|① 实心:生成实心半球体。
② 中空:生成空心半球体,搭配“厚度”参数可指定外壳部分厚度。
③ 去除底面:去除半球体的底面,仅剩半球形外壳,支持配置“厚度”。|
+|厚度|用于指定中空、去除底面情况下的球壳厚度。|
+|连续生成间距|在输入框中输入正整数,以指定当鼠标拖动多少格距离后生成一个笔刷形状。|
+|直线生成|勾选后,先单击一个坐标A,然后单击另一个坐标B,就会在以AB两点为端点的线段上生成笔刷形状。|
+|覆盖原方块|若勾选,则笔刷形状生成的方块会覆盖地图上位置重叠的已有方块。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置方向|即半球切面正对的方向。共6种选项:+X,+Y,+Z,-X,-Y,-Z。|
+
+
+
+## 圆柱笔刷
+
+用于生成一个圆柱体,当圆柱体包围盒在X轴、Z轴上的边长不相等,生成一个椭圆柱体。可根据需要生成空心圆柱体、去除上下底面的空心圆柱体(可用于生成围墙、空心柱子等)。
+
+
+
+**笔刷参数**
+|参数名|参数说明|
+|:---|:---|
+|笔刷尺寸|输入**默认状态下**圆柱体的包围盒在XYZ三轴上的边长。当X轴、Z轴上的数值不同时,生成椭圆柱体。
对于圆柱体默认状态指的是以Y轴为放置方向的状态。改变放置方向后会出现XYZ数值与实际游戏内笔刷包围盒在XYZ轴上的三边不一样的情况。|
+|结构选项|① 实心:生成实心圆柱体。
② 中空:生成空心圆柱体,搭配“厚度”参数可指定侧面厚度。
③ 去除底面:去除圆柱体的上下底面,仅剩侧面,支持配置“厚度”。|
+|厚度|用于指定中空、去除底面情况下的厚度。|
+|连续生成间距|在输入框中输入正整数,以指定当鼠标拖动多少格距离后生成一个笔刷形状。|
+|直线生成|勾选后,先单击一个坐标A,然后单击另一个坐标B,就会在以AB两点为端点的线段上生成笔刷形状。|
+|覆盖原方块|若勾选,则笔刷形状生成的方块会覆盖地图上位置重叠的已有方块。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置方向|即与圆柱两地面中心点连线平行的轴。共3种选项:X,Y,Z。|
+
+
+
+## 圆锥笔刷
+
+用于生成一个圆锥体,当圆锥体包围盒在X轴、Z轴上的边长不相等,生成一个椭圆锥体。可根据需要生成空心圆锥体、去除底面的空心圆锥体(可用于生成建筑尖顶等)。
+
+
+
+**笔刷参数**
+|参数名|参数说明|
+|:---|:---|
+|笔刷尺寸|输入**默认状态下**圆锥体的包围盒在XYZ三轴上的边长。当X轴、Z轴上的数值不同时,生成椭圆锥体。
对于圆锥体默认状态指的是以+Y轴为放置方向的状态。改变放置方向后会出现XYZ数值与实际游戏内笔刷包围盒在XYZ轴上的三边不一样的情况。|
+|结构选项|① 实心:生成实心圆锥体。
② 中空:生成空心圆锥体,搭配“厚度”参数可指定侧面厚度。
③ 去除底面:去除圆锥体的上下底面,仅剩侧面,支持配置“厚度”。|
+|厚度|用于指定中空、去除底面情况下的厚度。|
+|连续生成间距|在输入框中输入正整数,以指定当鼠标拖动多少格距离后生成一个笔刷形状。|
+|直线生成|勾选后,先单击一个坐标A,然后单击另一个坐标B,就会在以AB两点为端点的线段上生成笔刷形状。|
+|覆盖原方块|若勾选,则笔刷形状生成的方块会覆盖地图上位置重叠的已有方块。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置方向|即与圆柱两地面中心点连线平行的轴。共3种选项:X,Y,Z。|
+
+
+
+## 多棱柱笔刷
+
+用于生成一个多棱柱。与之前的笔刷类型不同的是,多棱柱笔刷仅能生成底面为正多边形的多棱柱,并且以底面外接圆半径和边数,来定义多棱柱底面的大小和形状。可根据需要生成空心多棱柱、去除上下底面的空心多棱柱(可用于生成围墙、柱子等)。
+
+
+
+**笔刷参数**
+|参数名|参数说明|
+|:---|:---|
+|外接圆半径|底面外接圆圆心到任意顶点的距离,为1~999之间的整数。|
+|底面边数|底面多边形的边数,为1~100之间的整数。|
+|高度|多棱柱的高度,为1~300之间的整数。|
+|结构选项|① 实心:生成实心多棱柱。
② 中空:生成空心多棱柱,搭配“厚度”参数可指定侧面厚度。
③ 去除底面:去除多棱柱的上下底面,仅剩侧面,支持配置“厚度”。|
+|厚度|用于指定中空、去除底面情况下的厚度。|
+|连续生成间距|在输入框中输入正整数,以指定当鼠标拖动多少格距离后生成一个笔刷形状。|
+|直线生成|勾选后,先单击一个坐标A,然后单击另一个坐标B,就会在以AB两点为端点的线段上生成笔刷形状。|
+|覆盖原方块|若勾选,则笔刷形状生成的方块会覆盖地图上位置重叠的已有方块。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置方向|即与圆柱两地面中心点连线平行的轴。共3种选项:X,Y,Z。|
+|旋转角度|笔刷相对于0°的顺时针旋转度数,取值范围0-360°|
+
+
+
+## 素材笔刷
+
+素材笔刷用于直接将素材库中保存的自定义素材和编辑器内置素材直接作为笔刷形状,刷在地图中,从而大大减少我们的操作步骤,提升素材复用效率。
+
+
+
+**笔刷参数**
+|参数名|参数说明|
+|:---|:---|
+|素材|通过下拉框选择笔刷需要以哪个素材为形状。|
+|连续生成间距|在输入框中输入正整数,以指定当鼠标拖动多少格距离后生成一个笔刷形状。|
+|直线生成|勾选后,先单击一个坐标A,然后单击另一个坐标B,就会在以AB两点为端点的线段上生成笔刷形状。|
+|覆盖原方块|若勾选,则笔刷形状生成的方块会覆盖地图上位置重叠的已有方块。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置基点|① 停靠:笔刷形状会贴着鼠标选中的方块生成,比如鼠标选中方块的上表面,则笔刷形状生成在该方块上方,鼠标选中方块的下表面,则笔刷形状生成在方块下方。
② 居中:会以选中的方块作为中心生成笔刷形状。
③ 向上:会以选中的方块作为下顶点生成笔刷形状。
④ 向下:会以选中的方块作为上顶点生成笔刷形状。|
+|放置方向|即与圆柱两地面中心点连线平行的轴。共3种选项:X,Y,Z。|
+|旋转角度|笔刷相对于0°的顺时针旋转度数,共有0°、90°、180°、-90°四种选项。|
+
+
+
+## 拼图方块笔刷
+
+拼图方块笔刷主要用于在地图中快捷放置自定义大型特征中的拼图方块(线锯方块),通过可视化的属性编辑和放置,减少我们在游戏模式手动设置拼图方块参数的繁琐操作,详情可以参考[自定义大型特征](../20-玩法开发/15-自定义游戏内容/4-自定义维度/6-自定义大型特征.md)。
+
+
+
+|参数名|参数说明|
+|:---|:---|
+|类型|代表拼图方块的三种主要使用场景,类型1.目标方块:代表这个拼图方块所在的结构是放在目标池内的结构,被动等待其他【源】类型的拼图方块来拼接,这种类型的拼图方块会被省略掉【目标池】和【目标方块】属性;类型2.源方块,代表这个拼图方块会主动从目标池抽取结构,并且试图寻找对应的目标方块进行拼接,与目标方块相反,这个类型的拼图方块会被省略掉【名称】属性;类型3.自定义方块:实际上一个拼图方块既可以作为目标方块也可以作为源方块,即自定义方块可以是源方块和目标方块的并集,自定义拼图方块所有属性都可以自定义,但使用难度会比较高。|
+|名称|此拼图方块的名称,默认值为"minecraft:empty" 。|
+|目标池|此拼图方块用于选取结构的结构池,结构池的定义可查看[结构池配置](../20-玩法开发/15-自定义游戏内容/4-自定义维度/6-自定义大型特征.md#_1-4-2-结构池配置),默认值为"minecraft:empty",即为空。|
+|目标名称|当结构从目标池中生成时希望对接的拼图方块的名称,默认值为"minecraft:empty"。|
+|变为|指的是拼图方块在成功对接并且结构被放置后会转变的方块,默认值为"minecraft:air",即空气。|
+|放置方向|即拼图方块箭头所指的方向,只有箭头相对才能被视作拼接成功。|
+|接点类型|只在拼图方块朝上或朝下时有效。1.可滚动:生成时,拼图方块会随机将目标结构置于与该拼图方块处于同一XZ轴的结构方块的边界内,即对接的结构会随机绕Y轴旋转。默认为此类型。2.固定:生成时,拼图方块会直接把目标结构或实体置于自身所朝的方向(上方或下方),即不会随机绕Y轴旋转,可用于连接结构。|
+
+
+
+## 下一步:地形工具
+
+现在您已经了解了笔刷工具,它可以在地图区域内进行精细的局部修改。而地形工具则适用于大范围的地形调整和造景。
+
+在下一节中,您将学习如何使用地形工具来修改地图的高度、坡度和地形形状等方面。
diff --git a/mcguide/14-地图制作/7-地形工具.md b/mcguide/14-地图制作/7-地形工具.md
new file mode 100644
index 0000000..c43663f
--- /dev/null
+++ b/mcguide/14-地图制作/7-地形工具.md
@@ -0,0 +1,167 @@
+---
+front: https://nie.res.netease.com/r/pic/20221221/d8691720-1a4f-4d52-9fc4-8567f54fd553.png
+hard: 入门
+time: 10分钟
+selection: 50
+---
+
+# 地形工具
+
+地形工具用于对地图整体地形进行调整,例如让某块区域隆起、凹陷、平滑等等。
+
+在本指南中,您将学会:
+
+- 如何使用 **地图编辑器** 基础操作—— **地形工具** 。
+
+
+
+::: info 提示
+
+大部分地形工具的设置都会用到下列几种参数:
+
+| 参数名 | 参数说明 |
+| :------------- | :----------------------------------------------------------- |
+| 操作区域 | 可以选择地形工具影响的范围,有球体范围和立方体范围两个选项。 |
+| 区域直径 | 正整数,用于指定操作区域的直径。 |
+| 强度 | 正整数,取值范围1~10。指定每秒进行几次操作(数值越高越快)。 |
+| 不影响流体方块 | 指定地形操作是否会影响到已有的水或岩浆方块。 |
+
+:::
+
+
+
+## 要求
+
+建议在开始本指南之前先了解以下内容。
+
+- [地图编辑器使用说明](./2-地图编辑器使用说明.md)
+- [选取工具](./3-选取工具.md)
+- [编辑工具](./4-编辑工具.md)
+- [材质工具](./5-材质选择.md)
+- [笔刷工具](./6-笔刷工具.md)
+
+
+
+## 隆起
+
+让指定区域内的方块向相机所在位置隆起1格。
+
+
+
+## 凹陷
+
+让指定区域内的方块向远离相机的方向凹陷1格。
+
+
+
+## 侵蚀
+
+去掉突出的方块。
+
+
+
+## 平滑
+
+去掉突出的方块,填充凹陷的区域,让选中区域变得更加平滑。
+
+
+
+## 填充
+
+填充凹陷的区域和空洞。
+
+
+
+## 顶层覆盖
+
+顶层覆盖功能是3个子效果的集合:
+
+- **顶层覆盖:** 在选中区域顶部覆盖若干层[材质预设](./5-材质选择.md#材质预设)窗口中选定的材质。层数可指定。
+
+
+
+
+- **顶层替换:** 将选中区域顶部若干层方块替换为[材质预设](./5-材质选择.md#材质预设)窗口中选定的材质。层数可指定。
+
+
+
+- **表层替换:** 不限于顶层,可替换侧面方块,但仅可替换1层。
+
+
+
+## 植被工具
+
+植被工具用于在地图中放置植被特征(feature)。并且支持范围放置。
+
+
+
+### 单点放置
+
+将 **模式** 选项切换到 **单点模式** 后,您可以通过一次点击尝试放置一个指定类型的植物特性。
+
+
+
+
+### 范围放置
+
+选择 **范围模式** 后,您可以通过一次点击在鼠标选定的区域内生成多个植物特性。可以通过调整`操作区域`和`区域直径`参数来设置所选区域的大小,通过`密度`参数来调整区域内植被的生成密度。
+
+`密度`参数与所选区域内生成点的期望个数 E(n) 的关系如下:
+
+E(n) = [密度数值] × [选区内包含的格数] / 100
+
+结果**四舍五入**取整。
+
+
+
+::: danger 注意
+
+1. 密度数值也会影响指定区域内植物feature的生成。在所选区域面积较小的情况下,密度数值过低将无法生成植物。
+
+2. 您可以根据自身需求调整密度参数。通常情况下,对于较矮的树木(例如普通尺寸的橡树、白桦树等),密度设置为5已经相当茂密,过高的密度可能会影响玩家的正常游戏体验。
+
+3. 如果传入的`区域直径`和`密度`参数过小,导致无法生成有效的feature,预览窗口上方将弹出以下提示。
+
+ 
+
+:::
+
+
+
+### 植被类型选择
+
+植被工具支持原生游戏中大部分植被feature的放置生成,开发者可以先选择 **类型** ,然后在 **子类型** 中选择详细的子类型。
+
+
+
+::: danger 注意
+
+1. 植被工具能否如预期生成指定的植物类型,取决于原生游戏的特性生成逻辑。如果引擎判定该植物feature无法在指定位置生成,则不会生成。
+
+2. 部分具有特殊生成方块要求的植被feature已添加提示。这些子类型选项后面会显示一个感叹号标志,您可以将鼠标悬停在上面查看提示文本。
+
+ 
+
+3. 如果所选的植被类型无法在指定区域内生成,预览窗口上方将弹出以下提示。
+
+ 
+
+4. 由于原生游戏引擎的限制,部分植被在放置后无法撤销。这些子类型已添加提示文本,请您谨慎使用这些植被特性。生成后,如需清除,需手动操作。
+
+ 
+
+:::
+
+
+
+## 大型结构
+
+大型结构工具用于在地图中放置预配置的结构池,以生成相应的大型结构,便于在编辑器中快速验证结构池配置的正确性。有关结构池的定义,请参阅[结构池配置](../20-玩法开发/15-自定义游戏内容/4-自定义维度/6-自定义大型特征.md#_1-4-2-结构池配置)。
+
+
+
+
+
+## 下一步:素材库、结构与剪贴板
+
+在下一节中,您将学习如何使用素材库、结构与剪贴板功能。这些工具可以帮助您便捷地批量复制和存储某一区域的方块,并在另一位置复用。掌握这些功能后,您将能够高效管理和重复使用各种地图元素,从而提升地图编辑效率和创作自由度。
diff --git a/mcguide/14-地图制作/8-素材库、结构与剪贴板.md b/mcguide/14-地图制作/8-素材库、结构与剪贴板.md
new file mode 100644
index 0000000..8b08155
--- /dev/null
+++ b/mcguide/14-地图制作/8-素材库、结构与剪贴板.md
@@ -0,0 +1,224 @@
+---
+front: https://nie.res.netease.com/r/pic/20221221/8059bc9b-1eb0-410d-83aa-9d539ddc44f2.png
+hard: 入门
+time: 10分钟
+selection: 40
+---
+
+# 素材库、结构与剪贴板
+
+素材库、结构、剪贴板三个功能可以更便捷地对一个范围内的所有方块进行批量复制、存储,并在另一处位置复用。
+
+在本指南中,您将学会:
+
+- 如何使用 **地图编辑器** 基础操作—— **素材、结构保存与使用** 。
+- 如何使用 **剪贴板** 。
+
+
+
+## 要求
+
+建议在开始本指南之前先了解以下内容。
+
+- [地图编辑器使用说明](./2-地图编辑器使用说明.md)
+- [选取工具](./3-选取工具.md)
+- [编辑工具](./4-编辑工具.md)
+- [材质工具](./5-材质选择.md)
+
+
+
+## 素材库
+
+素材库是地图编辑器的一个重要功能,它可以保存方块为素材,并在同一作品内的其他位置,或同一设备上的不同作品进行重复利用,大大提升地图制作效率。
+
+
+
+### 素材的保存与使用
+
+使用选取工具选择好需要保存的方块后,可右键包围盒选择 **保存为素材** 按钮将选区内方块结构存入素材库长期使用。
+
+
+
+保存时可以修改素材名称,同时也可以指定是否需要保存空气、流体方块。
+
+
+
+::: info 素材文件存储位置
+
+素材数据保存在.mdl文件中,默认存储路径位于 `AppData\Roaming\Sunshine\Temp\Genesis\ModelPrefab\CustomModel`文件夹下。
+
+:::
+
+
+
+要将保存好的素材文件放置到地图中,只需要在 **素材库** 窗口单击需要放置的素材,即可在地图中通过左键单击放置,连续单击可以放置多个。
+
+
+
+
+
+#### 放置前的二次编辑
+
+在素材摆放到地图中但未确认生成时,可进行二次编辑,包括位移、旋转、缩放、翻转等操作。
+
+如下图所示,点击左键将`boxdata1`素材摆放进地图,此时移动鼠标时会发现素材形状仍在渲染。因为素材可连续摆放,您目前处于连续放置状态。
+
+
+
+**点击鼠标右键结束放置状态**,此时移动鼠标不会显示素材形状渲染。**左键单击刚放置的素材(此时有包围盒)表示选中,即可进行编辑操作。**
+
+
+
+此时可对选中的素材进行编辑操作,如位移、旋转、翻转、缩放等。调整完毕后,点击 **确定生成** 即可。
+
+
+
+对于已放置的多个素材,取消放置状态后,可左键点击不同素材分别进行调整,操作与上述一致。
+
+
+
+
+
+#### `.mdl`素材文件的导入与导出
+
+素材`.mdl`文件可以导出到电脑的指定位置,也可以从其他路径导入编辑器以供地图编辑使用。
+
+鼠标右键点击自定义素材库或素材库中的素材,选择 **导出** 即可将该素材`.mdl`文件导出到任意位置。
+
+
+
+点击素材库窗口 **自定义素材** 分页的 **导入** 按钮,即可从本地选择`.mdl`文件导入编辑器作为素材使用。
+
+
+
+
+
+#### 导入模型为素材
+
+素材库 **自定义素材** 分页的 **导入** 按钮还可以导入模型作为素材。
+
+
+
+当前地图编辑器支持的模型类型有:`.obj`、`.fbx`、`.3ds`、`.ply`、`.stl`。
+
+如果模型本身自带贴图,编辑器会读取其颜色,并做简单的颜色匹配,生成彩色素材。
+
+MC中可以与贴图颜色对应的方块有限,开发者可以在模型生成后按需要使用 **替换** 工具进行进一步的方块调整。
+
+
+
+
+
+#### 应用素材到预设
+
+您可以将素材导入为预设素材,这样在预设编辑器就可以将素材挂接到预设上。
+
+
+
+在预设编辑器打开一个空预设后,可以点击工具栏的 **添加素材** 按钮,将刚刚在地图编辑器中保存的素材导入到预设中。
+
+
+
+
+
+## 结构
+
+### 结构的保存
+
+使用选取工具创建选区后,右键选区点击 **保存为结构**,即可将包围盒选择范围内的方块保存为结构`.mcstructure`文件。
+
+
+
+保存时有如下选项可以选择:
+
+- **包含实体:** 保存的结构数据文件中将包含实体(动态,可移动)对象信息。
+
+- **去除空气方块:** 生成的结构数据文件中将不包含空气方块信息。
+
+- **保存为网易版优化结构:** 在文件尺寸和性能上做出一定优化。
+
+- **切分结构:** 会按照选择的结构边长,将结构切分成多个结构数据文件,适用于大范围的方块信息保存。
+
+::: info 切分结构
+
+切分结构生成的结构文件在当前作品的 行为包的`structures/命名空间` 文件夹下 。
+
+:::
+
+
+
+
+### 结构的使用
+
+保存的结构可在素材库窗口的 **结构** 分页找到。可以直接像摆放素材一样,通过鼠标点击将结构摆放至场景中。
+
+::: danger 注意
+
+需注意的是,【结构】分页仅会显示当前作品中的结构文件,并不会像素材一样可以跨作品使用。
+
+结构同样也可以连续摆放,并且支持[在放置前进行二次编辑](#放置前的二次编辑)。
+
+:::
+
+
+
+另外,我们也可以使用结构方块,输入对应结构文件所在文件夹和文件名称来使用此结构。
+
+
+
+如果选择了切分结构,将选择范围内的方块生成多个结构文件保存,则会同时生成对应的各个结构文件基础坐标的配置信息。
+
+
+
+
+
+解析此配置文件,通过`ModSDK`的 PlaceStructure 接口在脚本中设置对应的坐标和结构文件名称信息,即可在对应维度地图中生成还原出保存的地图数据。
+
+
+
+## 剪贴板
+
+剪贴板用于存放复制的选区方块。
+
+::: danger 素材库与剪贴板的区别
+
+- 素材库内容会长期储存,可以应用到同一个开发者账号、同一台设备上的全部地图作品中。
+- 剪贴板内容仅为临时储存,将在关闭编辑器后被清除。
+
+:::
+
+
+
+使用选取工具框选一个区域后,按下 **复制** 或 **剪切** 按钮,即可将选区方块保存到剪贴板。剪贴板可存储多个内容。新的内容会顶下旧的内容,显示在粘贴板的最上方。您可以左键点击选择需要的内容,再在地图中左键点击需要粘贴的位置,即可完成粘贴。
+
+
+
+
+
+::: info 剪贴板
+
+剪贴板内容同样也可以连续摆放,并且支持[在放置前进行二次编辑](#放置前的二次编辑)。内容可重新命名,方便辨识。
+
+:::
+
+
+
+剪贴板内容可以直接导入素材库使用。只需要在剪贴板中右键点击一个内容,选择 **添加到素材库** ,即可在素材库窗口中的 **自定义素材** 分页找到它。
+
+
+
+
+
+## 记住上次配置
+
+保存结构时,可以记住上次的配置。例如:勾选**“去除空气”**并记住该配置后,下次保存结构时无需重复选择同类选项。减少重复勾选步骤,提升开发效率。
+
+
+
+
+
+## 下一步:方块状态值设置说明
+
+在下一节中,您将学习如何使用方块状态值设置功能来配置笔刷、填充和替换工具所用的方块材质状态值。
+
+这些状态值决定了方块的外观和行为,使得建筑更具多样性与美观性。
diff --git a/mcguide/14-地图制作/91-方块状态值设置说明.md b/mcguide/14-地图制作/91-方块状态值设置说明.md
new file mode 100644
index 0000000..e531eda
--- /dev/null
+++ b/mcguide/14-地图制作/91-方块状态值设置说明.md
@@ -0,0 +1,81 @@
+---
+front: https://nie.res.netease.com/r/pic/20221221/a099e669-7013-4b97-b5b3-9d057613e070.png
+hard: 入门
+time: 10分钟
+selection: 30
+---
+
+# 方块状态值设置
+
+方块状态值进一步定义了方块的外观和行为。通过设置方块状态值,您可以在地图中快速生成指定形状的方块。
+
+在本指南中,您将学会:
+
+- 如何使用 **地图编辑器** 基础操作—— **方块状态值设置** 。
+
+
+
+下面来具体看下方块状态值设置功能是如何使用的吧!
+
+
+
+## 要求
+
+建议在开始本指南之前先了解以下内容。
+
+- [地图编辑器使用说明](./2-地图编辑器使用说明.md)
+- [选取工具](./3-选取工具.md)
+- [编辑工具](./4-编辑工具.md)
+- [材质工具](./5-材质选择.md)
+
+
+
+## 材质预设状态值设置
+
+首先,创建一个新的材质预设。在 **选择材质** 窗口中,选择一个带有多种状态值的方块,可以看到窗口右下角出现了 **状态值设置** Tab。
+
+展开Tab,我们可以看到当前所选方块的可配置状态值,直接通过下拉选框调整即可修改所选方块的状态值,并应用到材质预设中。
+
+
+
+- 从上图的示例中可看出,混合材质中的每个材质都能进行单独的状态值编辑。
+- 方块贴图无法直接反映状态值变化。为方便判断混合材质中的每个材质,当鼠标悬停在混合材质面板的某个方块上时,提示框将展示该方块的具体状态值配置。
+
+配置好的材质预设可以应用到笔刷、填充等多个功能,并且能够保留其中的状态值设置。
+
+
+
+## 填充工具状态值设置
+
+填充工具的方块选择也可以使用状态值设置进行精确调整。
+
+您可以直接使用在材质预设中设置好的预设项进行填充,也可以直接选择需要使用的方块,在下方设置其状态值后直接应用。
+
+
+
+
+
+## 替换工具状态值设置
+
+在引入了状态值之后,不同状态值的同种方块在替换窗口会分别显示,这样可以单独对其中一种状态值进行替换处理,而不影响其他状态值的该方块。
+
+您可以将鼠标悬停在左侧窗口的方块上,查看提示框上显示的状态值信息,判断是否是自己需要替换的状态值。
+
+
+
+
+
+## 其他说明
+
+- 材质预设窗口的 **吸管** 、 **复制** 工具均会保留方块状态值信息。
+- 工具栏中的 **方块统计** 功能会将不同状态值的同种方块合并统计,而不会每种状态值单独统计。
+
+
+
+## 下一步:蒙版工具
+
+使用地形与笔刷工具,您可以调整地图的地形与方块区域。但是,有时您不希望对整个区域进行全局调整,而希望对特定区域进行校正。
+
+例如,您在使用地形工具时,只希望对地图里的草方块进行修改而不影响其他方块。要在地图编辑器里进行局部校正,就需要使用蒙版工具。
+
+您已经走得很远了,坚持下去!
\ No newline at end of file
diff --git a/mcguide/14-地图制作/92-蒙版工具说明.md b/mcguide/14-地图制作/92-蒙版工具说明.md
new file mode 100644
index 0000000..b331820
--- /dev/null
+++ b/mcguide/14-地图制作/92-蒙版工具说明.md
@@ -0,0 +1,173 @@
+---
+front: https://nie.res.netease.com/r/pic/20221221/d7f1b4f3-162d-4f21-a6f6-be2feeb563f0.png
+hard: 进阶
+time: 15分钟
+selection: 20
+---
+
+# 蒙版工具说明
+
+在本指南中,您将学会:
+
+- 如何使用 **地图编辑器** 进阶操作—— **蒙版工具** 。
+
+
+
+下面就一起来看看蒙版工具的使用方法吧!
+
+
+
+## 要求
+
+建议在开始本指南之前先了解以下内容。
+
+- [地图编辑器使用说明](./2-地图编辑器使用说明.md)
+- [选取工具](./3-选取工具.md)
+- [编辑工具](./4-编辑工具.md)
+- [材质工具](./5-材质选择.md)
+- [笔刷工具](./6-笔刷工具.md)
+- [地形工具](7-地形工具.md)
+
+
+
+## 什么是蒙版
+
+蒙版可以用来限制开发者地图编辑操作的生效对象。蒙版一共有2种:
+
+
+
+### 对以下方块生效
+
+地图编辑操作仅会修改蒙版成分中的方块。例如当您希望笔刷只会覆盖掉地图里的草方块而不影响其他的方块,就可以使用这种蒙版。
+
+
+
+### 对以下方块不生效
+
+地图编辑操作仅会修改除蒙版成分中方块以外的其他方块。例如当你希望你的顶层覆盖操作不影响到你的石头小路,只覆盖旁边的其他方块时,就可以使用这种蒙版。
+
+
+
+
+
+## 蒙版基础设置
+
+### 蒙版工具栏选项
+
+打开地图编辑器,在顶部工具栏即可找到【蒙版】按钮。点击【蒙版】按钮,会在次级工具栏显示蒙版选项。
+
+
+
+- **蒙版开关**:勾选框,用于启用或关闭蒙版功能。
+- **蒙版模式**:下拉选框,共有两个可选项,【对以下方块生效】和【对以下方块不生效】。
+- **蒙版成分**:当前蒙版中包括的方块。
+- **更多设置**:对蒙版的更详细配置,点击即会打开蒙版设置窗口。
+
+::: info 提示
+
+蒙版开启状态会在预览窗左上角显示。
+
+:::
+
+
+
+### 蒙版设置窗口
+
+蒙版设置窗口允许开发者对蒙版进行更详细的配置。除了工具栏中已有的【蒙版开关】和【蒙版模式】两项外,在设置窗口中还可以进行对蒙版成分方块的直接增删。
+
+
+
+#### 增加蒙版成分
+
+想要为蒙版成分中增加更多方块,只需要在下方搜索、选择到相应的方块,点击下方蓝色【添加】按钮即可。选择完毕后点击【关闭】按钮即可立即生效蒙版改动。
+
+::: info 提示
+
+蒙版工具支持对成分中方块的状态值进行详细设置。例如你可以选择进包含上下颠倒的橡木楼梯方块。
+**不同状态值 ** 的 **同种** 方块将在【当前蒙版包含的方块】一栏分别列为不同的成分方块。
+
+:::
+
+
+
+
+
+#### 删除蒙版成分
+
+只需要在 **当前蒙版包含的方块** 一栏中再次点击想要删除的方块,即可将其从蒙版成分中删除。
+
+
+
+
+
+### 材质预设应用至蒙版
+
+您可以直接将材质预设中选好的方块组合直接一键应用至蒙版成分设置。只需要点击吸管工具左侧的 **应用为蒙版** 按钮即可将当前蒙版的成分设置为所选方块预设里的全部方块。
+
+::: danger 注意
+
+方块预设里包含百分比信息,但是应用为蒙版成分后不会生效。即使在方块预设中某个方块的百分比为0%,它仍然会被应用至蒙版成分中。
+方块预设应用为蒙版会保留方块预设中每个方块的状态值设置。
+
+:::
+
+
+
+
+
+## 蒙版与其他工具的配合使用
+
+蒙版是一个全局控制选项,当蒙版开启后,会对地图编辑器中所有能够产生方块修改的操作生效,所以您需要根据自己的需要,在合适的情况下使用蒙版工具。
+
+### 笔刷与地形
+
+我们在[前文](#什么是蒙版)中已通过动图的形式举例过蒙版在笔刷与地形操作中的应用。
+在进行笔刷或地形操作时,蒙版次级工具栏同样会显示出来,方便开发者直接对蒙版进行快捷配置,而不需要进行多余的切换步骤。
+
+
+
+
+
+### 填充
+
+蒙版开启后,会对开发者的【填充】操作生效。
+1. 当蒙版模式为【对以下方块生效】时,填充操作不会修改选区中非蒙版成分的方块。
+2. 当蒙版模式为【对以下方块不生效】时,填充操作不会修改选区中的蒙版成分方块。
+
+
+
+### 替换
+
+蒙版开启后,会对开发者的【替换】操作生效。被蒙版判定为不可修改的方块,在替换窗口中不可点击。
+
+
+
+### 橡皮
+
+蒙版开启后,被蒙版判定为不可修改的方块,不会被橡皮工具擦除。
+
+
+
+### 编辑
+
+蒙版在编辑操作中的应用可能会有些反直觉,您需要了解其中的原理,从而确定是否要在编辑操作时开启蒙版。
+
+举个例子:尝试将下面这个选区中的桦木板方块向上移动。我们将蒙版设置为“仅对桦木板方块生效”,然后开始移动操作。
+
+
+
+从上图中可发现,我们点击确定生成后,桦木板方块直接消失了,有悖于我们的直觉。
+
+主要的原因是:MC中无法直接对方块进行偏移、旋转等操作,而是需要把旧方块删除之后生成新方块,而这又分为2步:① 原方块的删除;② 新方块的生成。
+
+在第①步中,蒙版生效,仅会删除桦木板方块。在第②步中,蒙版生效,我们尝试在新的位置生成桦木板失败了,因为新的位置当前是空气,我们尝试用桦木板方块替换这里的空气方块时会被蒙版阻止,导致生成失败。所以最终的表现就是仅仅删除了旧的桦木板方块而没有在移动后的新位置生成新的桦木板方块。
+
+类似的情况还可能发生在进行旋转、伸缩、翻转等操作时。
+
+
+
+### 其他
+
+除了上述工具外,其他任何对方块产生修改的操作都会受到蒙版工具的影响,例如素材库的素材放置等。
+
+
\ No newline at end of file
diff --git a/mcguide/14-地图制作/images/1611577352671.png b/mcguide/14-地图制作/images/1611577352671.png
new file mode 100644
index 0000000..39f4ac8
Binary files /dev/null and b/mcguide/14-地图制作/images/1611577352671.png differ
diff --git a/mcguide/14-地图制作/images/1611578367866.png b/mcguide/14-地图制作/images/1611578367866.png
new file mode 100644
index 0000000..8c2015e
Binary files /dev/null and b/mcguide/14-地图制作/images/1611578367866.png differ
diff --git a/mcguide/14-地图制作/images/1611578584871.png b/mcguide/14-地图制作/images/1611578584871.png
new file mode 100644
index 0000000..51a32e4
Binary files /dev/null and b/mcguide/14-地图制作/images/1611578584871.png differ
diff --git a/mcguide/14-地图制作/images/A1.png b/mcguide/14-地图制作/images/A1.png
new file mode 100644
index 0000000..d7de1de
Binary files /dev/null and b/mcguide/14-地图制作/images/A1.png differ
diff --git a/mcguide/14-地图制作/images/A2.png b/mcguide/14-地图制作/images/A2.png
new file mode 100644
index 0000000..436fb06
Binary files /dev/null and b/mcguide/14-地图制作/images/A2.png differ
diff --git a/mcguide/14-地图制作/images/A3.png b/mcguide/14-地图制作/images/A3.png
new file mode 100644
index 0000000..a771892
Binary files /dev/null and b/mcguide/14-地图制作/images/A3.png differ
diff --git a/mcguide/14-地图制作/images/B1.gif b/mcguide/14-地图制作/images/B1.gif
new file mode 100644
index 0000000..d783f20
Binary files /dev/null and b/mcguide/14-地图制作/images/B1.gif differ
diff --git a/mcguide/14-地图制作/images/B10.gif b/mcguide/14-地图制作/images/B10.gif
new file mode 100644
index 0000000..bdd8965
Binary files /dev/null and b/mcguide/14-地图制作/images/B10.gif differ
diff --git a/mcguide/14-地图制作/images/B11.gif b/mcguide/14-地图制作/images/B11.gif
new file mode 100644
index 0000000..ec691ad
Binary files /dev/null and b/mcguide/14-地图制作/images/B11.gif differ
diff --git a/mcguide/14-地图制作/images/B2.gif b/mcguide/14-地图制作/images/B2.gif
new file mode 100644
index 0000000..2cceffd
Binary files /dev/null and b/mcguide/14-地图制作/images/B2.gif differ
diff --git a/mcguide/14-地图制作/images/B3.gif b/mcguide/14-地图制作/images/B3.gif
new file mode 100644
index 0000000..e2562fd
Binary files /dev/null and b/mcguide/14-地图制作/images/B3.gif differ
diff --git a/mcguide/14-地图制作/images/B4.gif b/mcguide/14-地图制作/images/B4.gif
new file mode 100644
index 0000000..51caa2c
Binary files /dev/null and b/mcguide/14-地图制作/images/B4.gif differ
diff --git a/mcguide/14-地图制作/images/B5.gif b/mcguide/14-地图制作/images/B5.gif
new file mode 100644
index 0000000..c14025f
Binary files /dev/null and b/mcguide/14-地图制作/images/B5.gif differ
diff --git a/mcguide/14-地图制作/images/B6.gif b/mcguide/14-地图制作/images/B6.gif
new file mode 100644
index 0000000..33f3516
Binary files /dev/null and b/mcguide/14-地图制作/images/B6.gif differ
diff --git a/mcguide/14-地图制作/images/B7.gif b/mcguide/14-地图制作/images/B7.gif
new file mode 100644
index 0000000..cc38c24
Binary files /dev/null and b/mcguide/14-地图制作/images/B7.gif differ
diff --git a/mcguide/14-地图制作/images/B8.gif b/mcguide/14-地图制作/images/B8.gif
new file mode 100644
index 0000000..27b183c
Binary files /dev/null and b/mcguide/14-地图制作/images/B8.gif differ
diff --git a/mcguide/14-地图制作/images/B9.gif b/mcguide/14-地图制作/images/B9.gif
new file mode 100644
index 0000000..da48086
Binary files /dev/null and b/mcguide/14-地图制作/images/B9.gif differ
diff --git a/mcguide/14-地图制作/images/C1.gif b/mcguide/14-地图制作/images/C1.gif
new file mode 100644
index 0000000..b937e1b
Binary files /dev/null and b/mcguide/14-地图制作/images/C1.gif differ
diff --git a/mcguide/14-地图制作/images/jigsawblock.gif b/mcguide/14-地图制作/images/jigsawblock.gif
new file mode 100644
index 0000000..5d507e2
Binary files /dev/null and b/mcguide/14-地图制作/images/jigsawblock.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/A0.png b/mcguide/14-地图制作/images/new_docs/A0.png
new file mode 100644
index 0000000..9cf681e
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A0.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A0_1.png b/mcguide/14-地图制作/images/new_docs/A0_1.png
new file mode 100644
index 0000000..d7fec32
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A0_1.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A1.png b/mcguide/14-地图制作/images/new_docs/A1.png
new file mode 100644
index 0000000..c524c16
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A1.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A10.png b/mcguide/14-地图制作/images/new_docs/A10.png
new file mode 100644
index 0000000..3de85b0
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A10.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A11.png b/mcguide/14-地图制作/images/new_docs/A11.png
new file mode 100644
index 0000000..58c26a4
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A11.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A12.png b/mcguide/14-地图制作/images/new_docs/A12.png
new file mode 100644
index 0000000..0f071f8
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A12.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A13.png b/mcguide/14-地图制作/images/new_docs/A13.png
new file mode 100644
index 0000000..afb1244
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A13.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A14.png b/mcguide/14-地图制作/images/new_docs/A14.png
new file mode 100644
index 0000000..60687db
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A14.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A15.png b/mcguide/14-地图制作/images/new_docs/A15.png
new file mode 100644
index 0000000..51077f2
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A15.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A16.png b/mcguide/14-地图制作/images/new_docs/A16.png
new file mode 100644
index 0000000..f62fd0c
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A16.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A18.png b/mcguide/14-地图制作/images/new_docs/A18.png
new file mode 100644
index 0000000..22237d6
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A18.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A19.png b/mcguide/14-地图制作/images/new_docs/A19.png
new file mode 100644
index 0000000..dc80d77
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A19.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A2.png b/mcguide/14-地图制作/images/new_docs/A2.png
new file mode 100644
index 0000000..d9bbd01
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A2.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A20.png b/mcguide/14-地图制作/images/new_docs/A20.png
new file mode 100644
index 0000000..2cff5a1
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A20.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A21.png b/mcguide/14-地图制作/images/new_docs/A21.png
new file mode 100644
index 0000000..8b215cb
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A21.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A22.png b/mcguide/14-地图制作/images/new_docs/A22.png
new file mode 100644
index 0000000..9778674
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A22.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A23.png b/mcguide/14-地图制作/images/new_docs/A23.png
new file mode 100644
index 0000000..0742890
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A23.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A3.png b/mcguide/14-地图制作/images/new_docs/A3.png
new file mode 100644
index 0000000..502cdc1
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A3.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A4.png b/mcguide/14-地图制作/images/new_docs/A4.png
new file mode 100644
index 0000000..7489997
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A4.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A5.png b/mcguide/14-地图制作/images/new_docs/A5.png
new file mode 100644
index 0000000..0c02fd1
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A5.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A6.png b/mcguide/14-地图制作/images/new_docs/A6.png
new file mode 100644
index 0000000..501a99b
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A6.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A7.png b/mcguide/14-地图制作/images/new_docs/A7.png
new file mode 100644
index 0000000..7d6f8ee
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A7.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A8.png b/mcguide/14-地图制作/images/new_docs/A8.png
new file mode 100644
index 0000000..f4192de
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A8.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/A9.png b/mcguide/14-地图制作/images/new_docs/A9.png
new file mode 100644
index 0000000..87165a2
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/A9.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/B1.gif b/mcguide/14-地图制作/images/new_docs/B1.gif
new file mode 100644
index 0000000..65d2e1c
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B1.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B10.gif b/mcguide/14-地图制作/images/new_docs/B10.gif
new file mode 100644
index 0000000..eec71ee
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B10.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B11.gif b/mcguide/14-地图制作/images/new_docs/B11.gif
new file mode 100644
index 0000000..34f7847
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B11.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B12.gif b/mcguide/14-地图制作/images/new_docs/B12.gif
new file mode 100644
index 0000000..a6927d0
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B12.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B13.gif b/mcguide/14-地图制作/images/new_docs/B13.gif
new file mode 100644
index 0000000..9313772
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B13.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B14.gif b/mcguide/14-地图制作/images/new_docs/B14.gif
new file mode 100644
index 0000000..56e548e
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B14.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B15.gif b/mcguide/14-地图制作/images/new_docs/B15.gif
new file mode 100644
index 0000000..7d3c39f
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B15.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B16.gif b/mcguide/14-地图制作/images/new_docs/B16.gif
new file mode 100644
index 0000000..b6e44b2
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B16.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B17.gif b/mcguide/14-地图制作/images/new_docs/B17.gif
new file mode 100644
index 0000000..041ef6a
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B17.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B18.gif b/mcguide/14-地图制作/images/new_docs/B18.gif
new file mode 100644
index 0000000..420ec51
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B18.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B19.gif b/mcguide/14-地图制作/images/new_docs/B19.gif
new file mode 100644
index 0000000..9b045e4
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B19.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B2.gif b/mcguide/14-地图制作/images/new_docs/B2.gif
new file mode 100644
index 0000000..06a8605
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B2.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B20.gif b/mcguide/14-地图制作/images/new_docs/B20.gif
new file mode 100644
index 0000000..34a37de
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B20.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B21.gif b/mcguide/14-地图制作/images/new_docs/B21.gif
new file mode 100644
index 0000000..ea02627
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B21.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B22.gif b/mcguide/14-地图制作/images/new_docs/B22.gif
new file mode 100644
index 0000000..e557f87
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B22.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B23.gif b/mcguide/14-地图制作/images/new_docs/B23.gif
new file mode 100644
index 0000000..708583b
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B23.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B24.gif b/mcguide/14-地图制作/images/new_docs/B24.gif
new file mode 100644
index 0000000..9dee471
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B24.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B25.gif b/mcguide/14-地图制作/images/new_docs/B25.gif
new file mode 100644
index 0000000..9f5a4d5
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B25.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B26.gif b/mcguide/14-地图制作/images/new_docs/B26.gif
new file mode 100644
index 0000000..5ae0cf8
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B26.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B27.gif b/mcguide/14-地图制作/images/new_docs/B27.gif
new file mode 100644
index 0000000..e212769
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B27.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B28.gif b/mcguide/14-地图制作/images/new_docs/B28.gif
new file mode 100644
index 0000000..94d0eb8
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B28.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B29.gif b/mcguide/14-地图制作/images/new_docs/B29.gif
new file mode 100644
index 0000000..f1f0d92
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B29.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B3.gif b/mcguide/14-地图制作/images/new_docs/B3.gif
new file mode 100644
index 0000000..2ae4004
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B3.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B30.gif b/mcguide/14-地图制作/images/new_docs/B30.gif
new file mode 100644
index 0000000..32c44a2
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B30.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B31.png b/mcguide/14-地图制作/images/new_docs/B31.png
new file mode 100644
index 0000000..82708a3
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B31.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/B32.gif b/mcguide/14-地图制作/images/new_docs/B32.gif
new file mode 100644
index 0000000..e4818fd
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B32.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B32.png b/mcguide/14-地图制作/images/new_docs/B32.png
new file mode 100644
index 0000000..566ed02
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B32.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/B33.gif b/mcguide/14-地图制作/images/new_docs/B33.gif
new file mode 100644
index 0000000..1e4cbde
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B33.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B34.gif b/mcguide/14-地图制作/images/new_docs/B34.gif
new file mode 100644
index 0000000..66677dc
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B34.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B35.gif b/mcguide/14-地图制作/images/new_docs/B35.gif
new file mode 100644
index 0000000..efc62b6
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B35.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B36.gif b/mcguide/14-地图制作/images/new_docs/B36.gif
new file mode 100644
index 0000000..ca0e631
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B36.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B37.gif b/mcguide/14-地图制作/images/new_docs/B37.gif
new file mode 100644
index 0000000..7faea87
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B37.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B38.gif b/mcguide/14-地图制作/images/new_docs/B38.gif
new file mode 100644
index 0000000..ce025d0
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B38.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B39.gif b/mcguide/14-地图制作/images/new_docs/B39.gif
new file mode 100644
index 0000000..71e0f23
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B39.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B4.gif b/mcguide/14-地图制作/images/new_docs/B4.gif
new file mode 100644
index 0000000..97c446d
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B4.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B40.png b/mcguide/14-地图制作/images/new_docs/B40.png
new file mode 100644
index 0000000..147de59
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B40.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/B41.png b/mcguide/14-地图制作/images/new_docs/B41.png
new file mode 100644
index 0000000..4277dbc
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B41.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/B42.gif b/mcguide/14-地图制作/images/new_docs/B42.gif
new file mode 100644
index 0000000..f0bf18b
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B42.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B43.gif b/mcguide/14-地图制作/images/new_docs/B43.gif
new file mode 100644
index 0000000..f1859c6
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B43.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B44.gif b/mcguide/14-地图制作/images/new_docs/B44.gif
new file mode 100644
index 0000000..162ee02
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B44.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B45.png b/mcguide/14-地图制作/images/new_docs/B45.png
new file mode 100644
index 0000000..1e9a7ca
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B45.png differ
diff --git a/mcguide/14-地图制作/images/new_docs/B46.gif b/mcguide/14-地图制作/images/new_docs/B46.gif
new file mode 100644
index 0000000..e621dd4
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B46.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B47.gif b/mcguide/14-地图制作/images/new_docs/B47.gif
new file mode 100644
index 0000000..4c6d92b
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B47.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B5.gif b/mcguide/14-地图制作/images/new_docs/B5.gif
new file mode 100644
index 0000000..aa20610
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B5.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B6.gif b/mcguide/14-地图制作/images/new_docs/B6.gif
new file mode 100644
index 0000000..f4bba73
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B6.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B7.gif b/mcguide/14-地图制作/images/new_docs/B7.gif
new file mode 100644
index 0000000..feb8a20
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B7.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B8.gif b/mcguide/14-地图制作/images/new_docs/B8.gif
new file mode 100644
index 0000000..5695252
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B8.gif differ
diff --git a/mcguide/14-地图制作/images/new_docs/B9.gif b/mcguide/14-地图制作/images/new_docs/B9.gif
new file mode 100644
index 0000000..02a8235
Binary files /dev/null and b/mcguide/14-地图制作/images/new_docs/B9.gif differ
diff --git a/mcguide/14-地图制作/images/placelargefeature.gif b/mcguide/14-地图制作/images/placelargefeature.gif
new file mode 100644
index 0000000..67e84f1
Binary files /dev/null and b/mcguide/14-地图制作/images/placelargefeature.gif differ
diff --git a/mcguide/15-资源管理/10-资源包.md b/mcguide/15-资源管理/10-资源包.md
new file mode 100644
index 0000000..86f7e1b
--- /dev/null
+++ b/mcguide/15-资源管理/10-资源包.md
@@ -0,0 +1,80 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/8607da19-6e64-4f3e-bbaf-2432573d305b.png
+hard: 入门
+time: 5分钟
+selection: true
+---
+
+
+# 资源包
+
+## 什么是资源包
+1. 资源包是存储我的世界编辑器作品的一部分资源文件的压缩包文件,它一般包含了组件中的可以公用的一部分内容。
+2. 资源包可从我的世界编辑器的某个组件中导出,也可以被导入到其他组件中,来实现一些共用资源的备份和复用。
+3. 我的世界开发工作台提供的官方内容库中,有资源包和作品模板两个分页,其中的资源包分页的内容均可下载和导入到任意作品中。
+
+## 资源包导出
+
+您可以使用资源管理器中的“导出”功能来制作一个资源包:
+
+
+
+点击“导出”按钮后,会弹出“导出为资源包” 界面, 在该界面,您可以选择相应的文件,然后点击“导出”按钮进行导出。
+
+
+
+点击“导出”按钮后,选择对应的文件路径进行保存为资源包(mep文件),一个资源包就成功导出了。
+
+
+
+## 外部资源包导入
+
+您可以使用资源管理器中的“导入”按钮来进行资源包的导入:
+
+选择二级菜单中的“资源包”,您可以直接导入外部的资源包。
+
+
+
+在弹出的文件选择框中选择你需要的资源包(mep格式),即可导入对应内容。
+
+
+
+## 内容库资源包导入
+您可以直接打开内容库的资源包分页,选择你需要的作品并下载,此时点击该作品卡片上的导入按钮,即可将其一键导入到当前编辑器所打开的作品中,详情可参考[内容库文档](./11-内容库.md#导入资源)。
+
+
+
+
+## 导入规则
+
+1、对于资源包中一般的文件,若目标组件中不存在对应的文件,将会直接复制到对应的路径。若目标组件中存在相同的文件,则直接跳过。若目标组件中存在同名但内容不同的文件,则中止本次导入,并提示冲突。
+
+2、对于behavior_pack_XXX和resource_pack_XXX中的文件,将会合并到目标组件中第一个behavior_pack_XXX和resource_pack_XXX中对应的路径 。
+
+3、对于resource_pack_XXX中特殊公用文件,如block.json等,将会对各个文件进行对应的合并处理,无法正确的合并时,将会中止本次导入,并提示冲突。
+
+4、特殊文件的相对路径为有:
+- ` resource_pack/blocks.json`
+- ` resource_pack/materials/common.json`
+- ` resource_pack/models/mobs.json、`
+- ` resource_pack/models/netease_models.json`
+- ` resource_pack/sounds/sound_definitions.json`
+- ` resource_pack/textures/flipbook_textures.json`
+- ` resource_pack/textures/flipbook_textures_items.json`
+- ` resource_pack/textures/item_texture.json`
+- ` resource_pack/textures/terrain_texture.json`
+- ` resource_pack/ui/_ui_defs.json`
+- ` resource_pack/texts/zh_CN.lang文件`
+
+
+
+## 注意事项
+
+1、资源包导出时,如果相关路径的文件发生了改变,需要重新导出。
+
+2、暂不支持Script目录的导入导出。
+
+
+
+
+
diff --git a/mcguide/15-资源管理/11-内容库.md b/mcguide/15-资源管理/11-内容库.md
new file mode 100644
index 0000000..c931b2e
--- /dev/null
+++ b/mcguide/15-资源管理/11-内容库.md
@@ -0,0 +1,107 @@
+---
+front: https://nie.res.netease.com/r/pic/20220711/2b99dca5-e81c-45f1-9b88-3a97966ebd75.png
+hard: 入门
+time: 10分钟
+selection: true
+---
+
+# 内容库
+
+
+## 一、简介
+1. 内容库是一个在线的模组开发资源库,这里存放了附加包配置、预设零件、结构素材、特效贴图等一切与MC模组开发有关的资源,这里的素材可供开发者灵活改编和复用,助力开发者更快制作出更好的模组!
+2. 内容库分为**资源包**、**作品模板**和**其他**、**我的资源**四个分页:
+ > 资源包:用于存放可直接导入到当前已有作品的资源包文件(.mep后缀)。
+ > 作品模板:用于存放可创建为作品的模板文件,与新建作品的参考模板类似。
+ > 其他:用于存放所有无法直接用于编辑器,但对模组开发仍有帮助的第三方格式的模型、工具、示例等资源。
+ > 我的资源:类似组件的云端列表,用于存放开发者自己账号下的内容库资源,方便开发者进行自测,详情参考[内容库资源投递指南](../35-上架与入驻/课程15-内容库资源投递指南.md)。
+
+## 二、使用说明
+> 温馨提示:下列示意图中的下载量和评分等数据均为开发阶段随机测试值,请以线上数据为准。
+### 访问与浏览
+1. 开发者每次打开我的世界开发工作台时,都可以在内容库分页获取到当前所有可用的资源包,也可点击刷新按钮刷新内容库的资源。
+
+
+
+2. 通过搜索、筛选、标签功能,开发者可快速查询自己想要的资源。
+> 标签默认为多选模式,即筛选出同时符合多个标签的资源,当勾选图中的**标签单选**时,则会将标签设为单选模式,点击一个标签会自动将其他标签取消选择。
+
+
+
+3. 点击资源卡片的详情按钮,可在资源详情弹窗查看该资源包的详细介绍,如作者、版本信息和使用说明等等。
+
+
+
+4. 资源详情页中可点击收藏按钮,再次点击则取消收藏
+
+
+
+5. 在分类标签右侧可勾选【仅显示已收藏】选项,快速筛选所需的资源
+
+
+
+
+6. 在资源详情页,可点击评分按钮,为对应资源评分
+
+
+
+
+### 下载资源
+
+
+1. 当确认需要该资源时,可以点击下载,将资源包下载到本地,如过资源包较大或网速较差时,需要耐心等待进度条完成,如下图所示:
+
+
+
+
+
+2. 下载完毕后,资源卡片的下载按钮消失,把鼠标移动到该资源,即可看到导入和更多菜单,如下图所示:
+
+
+
+### 导入
+#### 1.导入【资源包】
+1. 当我们需要将资源包分页中的资源文件导入到作品中时,我们需要保证已经使用编辑器打开该作品,否则就会出现如下提示:
+
+
+
+2. 如果已经使用编辑器打开了该作品,则点击导入按钮后,会自动切换到编辑器界面,并且弹出导入资源包弹窗,如下图所示:
+
+
+
+3. 我们可以参考每个资源右侧的图标提示,并根据自己的需要勾选自己想要的文件,一般情况下,只需要保持默认状态导入即可。
+
+
+
+> 1. 文件右侧的图标为绿色的"new"字样时,说明该文件是全新的文件,可以直接导入该作品。
+> 2. 文件右侧的图标为黄色的警告样式时,说明该文件可能是该文件在作品中已有完全相同的文件,默认不为您勾选,勾选则覆盖本地资源。
+> 3. 文件右侧的图标为红色的冲突样式时,说明该文件与作品中现有的资源存在冲突且无法修复,勾选则会强制覆盖本地资源,请谨慎确认后选择是否导入。
+
+
+#### 2.导入【地图】或【附加包】
+1. 点击导入按钮,可直接将该模板资源导入到开发者的作品库,导入结束后会出现弹窗提示,点击**前往查看**可前往创作页查看刚创建的作品,也可以选择**开始编辑**直接打开编辑器。
+
+
+
+#### 3. 导入【其他】资源
+
+1. 点击导入按钮,可直接将该资源导入至指定的目录中,可在弹窗中打开对应目录并使用该资源。
+
+
+
+
+
+
+## 三、投稿资源
+如您希望将自己的资源投递到内容库,分享给其他开发者,帮助他们提升开发模组的效率和能力,请参考[内容库资源投递指南](../35-上架与入驻/课程15-内容库资源投递指南.md)。
+
+
+## 四、其他事项
+1. 在编辑器内的资源管理器左上角也增加了内容库按钮,点击后可呼出我的世界开发工作台并切换到内容库分页,如下图所示:
+
+
+
+2. 在启动器的新建模板界面也增加了内容库入库,点击后可跳转至内容库,如下图所示:
+
+
+
diff --git a/mcguide/15-资源管理/13-配置数据模板.md b/mcguide/15-资源管理/13-配置数据模板.md
new file mode 100644
index 0000000..98ff700
--- /dev/null
+++ b/mcguide/15-资源管理/13-配置数据模板.md
@@ -0,0 +1,54 @@
+---
+front:
+hard: 入门
+time: 5分钟
+selection: true
+---
+
+
+# 配置数据模板
+
+## 什么是配置数据模板
+1. 配置:配置是编辑器管理模组数据驱动附加包的基本单位,按照游戏内容将可以自定义的实体、物品、方块等抽象成一个配置,方便管理和属性编辑,关于如何使用配置,你可以查看[这篇文档](../20-玩法开发/11-组装简单玩法/0-关卡编辑器.md#五、配置面板)。
+2. 数据模板:数据模板记录了某个状态下的配置属性,用于同类配置之间的批量迁移和复用。
+3. 示例:开发者定义好了一个具有复杂行为逻辑的实体配置,并希望在另一个作品中再次使用这个配置,在过去,开发者需要手动在作品目录找到该配置的所有配套文件,并逐一迁移至新作品的对应目录中去,而现在,数据模板可以作为一个整体一键导出和导入配置的相关配套文件,让开发者轻松完成迁移和复用的过程。
+## 数据模板导出
+在配置的整体模板属性中,可以点击导出按钮,将当前配置的所有配套文件的属性进行统一导出,最终导出的文件格式为**identifier.dt**。
+
+
+
+> 目前有部分配置暂无整体模板属性,我们将在后续版本逐一补充,请耐心等待~
+
+## 外部数据模板导入
+1. 属性面板导入:
+与导出类似,开发者也可在配置的【整体模板】属性中点击导入按钮,导入上一步导出的dt文件,如图所示:
+
+
+
+2. 导入菜单
+
+在资源管理器的导入菜单,开发者也可以找到导入配置数据模板的选项,如图所示:
+
+
+
+1. 新建文件向导导入
+
+在新建文件向导选择数据模板的界面,开发者也可以找到导入选项,如图所示:
+
+
+
+
+成功导入后,可以在对应类型的配置属性中找到该模板并应用,如图所示:
+
+
+
+
+## 注意事项
+
+1. 目前导出数据模板仅导出**配套文件**的相关文件,而配置中引用的贴图、模型、动画文件,暂时不支持导出;
+
+2. 导入后的数据模板可以在.mcs/data_template文件夹找到对应数据模板的配置,该文件夹的内容不会包含在导出发布的作品包体中,不影响最终的包体大小。
+
+
+
+
diff --git a/mcguide/15-资源管理/2-文件结构.md b/mcguide/15-资源管理/2-文件结构.md
new file mode 100644
index 0000000..cbf7c67
--- /dev/null
+++ b/mcguide/15-资源管理/2-文件结构.md
@@ -0,0 +1,61 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/d8abda42-e83f-4375-9124-5e0847d224b2.png
+hard: 入门
+time: 10分钟
+selection: true
+---
+# 文件结构
+
+我的世界游戏引擎会从Mod中固定的路径读取所需的文件,因此文件要放到对应的文件夹中,否则在游戏内不会生效。例如,生物的行为JSON文件必须放在行为包下的entities文件夹中。
+
+下面是地图类型作品的文件夹结构。
+
+作品文件夹
+|-- .mcs *//文件夹,保存了编辑器配置信息。*
+|-- behavior_packs *//文件夹,行为包集合,下面可放置多个行为包。*
+| |-- behavior_pack_\*\*\* *//文件夹,行为包,命名并没有固定的格式。*
+| |-- entities *//文件夹,放置实体的JSON文件,配置实体的血量、攻击、行为等。*
+| |-- script_\*\*\* *//文件夹,Python脚本文件夹,一般为script加特定字符串。*
+| |-- Parts *//文件夹,里面是零件文件夹的子文件夹的链接,自动生成,无需处理。*
+| |-- items *//文件夹,放置物品的原版JSON文件,配置物品的使用时间、效果等。*
+| |-- netease_items *//文件夹,放置网易版自定义物品的JSON文件。*
+| |-- netease_blocks *//文件夹,放置网易版自定义方块的JSON文件。*
+| |-- Parts *//文件夹,放置所有的零件文件夹。*
+| |-- \*\*\* *//文件夹,放置一个零件的所有文件,名称在新建时确认,不要修改。*
+| |-- \*\*\*.part *//零件本体文件。*
+| |-- \*\*\*Part.py *//零件脚本文件。*
+| |-- \*\*\*PartMeta.py *//零件元数据文件。*
+| |-- \_init\_.py *//导入用,不要删除。*
+| |-- Presets *//文件夹,放置所有的预设。*
+| |-- loot_tables *//文件夹,放置掉落配置JSON文件。*
+| |-- recipes *//文件夹,放置原版的配方JSON文件,如工作台、熔炉配方。*
+| |-- spawn_rules *//文件夹,放置原版的生物生成规则的JSON文件。*
+| |-- trading *//文件夹,放置原版的交易配置文件。*
+| |-- storyline *//文件夹,放置逻辑编辑器生成的逻辑文件。*
+| |-- Galaxy *//文件夹,放置逻辑编辑器中的宏文件。*
+| |-- pack_manifest.json *//文件,配置行为包的信息,包括uuid、版本信息。*
+|-- resource_packs *//文件夹,资源包集合,下面可放置多个资源包。*
+| |-- resource_pack_\*\*\* *//文件夹,资源包,命名并没有固定的格式。*
+| |-- entity *//文件夹,放置实体客户端的配置JSON文件。*
+| |-- attachables *//文件夹,放置原版装备模型的文件。*
+| |-- models *//文件夹,放置模型文件,包括原版生物模型文件、骨骼模型文件等。*
+| |-- materials *//文件夹,放置材质文件,一般来说无需关心。*
+| |-- effects *//文件夹,放置网易版的粒子和序列帧JSON文件。*
+| |-- textures *//文件夹,放置各类图片文件,文件夹内按用途又分成了不同文件夹。*
+| |-- netease_items_res *//文件夹,放置网易版自定义物品的客户端配置文件。*
+| |-- sounds *//文件夹,放置音效文件。*
+| |-- texts *//文件夹,放置文本lang文件。*
+| |-- ui *//文件夹,放置界面JSON文件。*
+| |-- font *//文件夹,放置字体文件,一般来说无需关心。*
+| |-- pack_manifest.json *//文件,配置资源包的信息,包括uuid、版本信息。*
+|-- .db *//文件夹,保存了地图信息。*
+| |-- presets.json *//预设存档,记录地图中的所有实例信息。*
+|-- level.dat *//文件,地图相关数据,无需关心。*
+|-- level.dat_old *//文件,地图相关数据,无需关心。*
+|-- levelname.txt *//文件,记录了存档名字。*
+|-- world_behavior_packs.json *//文件,配置这个存档会使用哪些行为包。*
+|-- world_resource_packs.json *//文件,配置这个存档会使用哪些资源包。*
+|-- world_icon.jpeg *//文件,原版中部分地方会用到该图标作为作品封面。*
+|-- work.mcscfg *//文件,保存了编辑器配置信息。*
+
+Addon类型的作品内没有地图文件、behavior_packs、resource_packs,只有行为包、资源包。Addon中的行为包和资源包的结构和上面的说明一样。
diff --git a/mcguide/15-资源管理/2.5-资源管理器.md b/mcguide/15-资源管理/2.5-资源管理器.md
new file mode 100644
index 0000000..7bbdbb6
--- /dev/null
+++ b/mcguide/15-资源管理/2.5-资源管理器.md
@@ -0,0 +1,79 @@
+# 资源管理器(新版)
+在本次更新中,我们对资源管理器进行了全新的升级,以期给各位开发者带来更便捷的文件定位、搜索与管理体验。下面就让我们来认识一下新版资源管理器吧!
+
+## 新版界面概览
+
+新版资源管理器界面被划分为5大功能区:
+1. 导航栏
+2. 作品目录
+3. 精简/完整模式切换
+4. 搜索筛选区
+5. 资源视图
+
+我们将在下文中对这5大功能区进行逐一介绍。
+
+
+
+## 导航栏
+
+在导航栏处集中了【**新建**】、【**导入**】、【**导出**】3个较为重要的操作按钮。
+
++ 新建按钮点击后会自动打开新建文件向导,用于新建各类编辑器支持的文件。
++ 导入按钮整合了编辑器所有可导入的文件类型,开发者再也不用到各个编辑器找不同的按钮导入不同类型的文件了!
++ 导出按钮一般用于将作品目录下的部分文件以资源包的形式导出,以便进行单独保存或复用到其他作品中。
+
+同时,新版资源管理器在导航栏还提供了【**前进**】、【**后退**】按钮和**面包屑导航**。
+
+
+
+## 作品目录
+这里展示的是当前作品的文件目录,点击需要的目录即可在右侧展示该路径下的所有文件。
+
+作品目录有两种展示形式:
+
+#### 精简模式
+新版编辑器默认显示模式是【精简模式】。精简模式旨在为不完全熟悉我的世界附加包文件结构的开发者提供一个比较简单明了的资源分类方式。在这个模式下,开发者定位自己需要的文件时,不再需要一层一层地展开完整的文件结构树,而是可以直接点击一个带图标的分类按钮,并直接在右侧找到该分类的所有文件。精简模式更适合日常的轻量级使用,以及新手开发者上手编辑器。
+
+ 
+
+#### 完整模式
+完整模式即传统的完整树状结构显示模式。在完整模式下,作品目录界面被划分成了两块:
+1. **常用目录:** 在这里会展示一些默认的使用频率较高的目录。开发者可以自定义常用目录:① 想要将某个文件夹添加到常用目录,只需要在作品目录窗口对其点击右键,并选择【**添加到常用目录**】即可;② 想要将某个常用目录删除,只需要对其右键,并点击【**从常用中删除**】即可。
+
+ 
+
+2. **完整目录:** 完整目录从根目录开始,可层层展开显示每一个子文件夹,点击子文件夹可以在右侧显示该文件夹内的所有文件。
+
+ 
+3. **切换编辑包体**:编辑器只能同时修改一个行为包和一个资源包,对于有多个行为包和资源包的作品,可以通过右键菜单切换编辑的包体,如下图:
+> 注意:切换编辑包体会影响文件创建、导入、保存的初始路径,请在了解组件的包体构成和内容之间的关联关系后再使用此功能。
+
+
+
+## 精简/完整模式切换
+
+新版编辑器默认显示模式是【**精简模式**】。精简模式旨在为不完全熟悉我的世界附加包文件结构的开发者提供一个比较简单明了的资源分类方式。在这个模式下,开发者定位自己需要的文件时,不再需要一层一层地展开完整的文件结构树,而是可以直接点击一个带图标的分类按钮,并直接在右侧找到该分类的所有文件。**精简模式更适合日常的轻量级使用,以及新手开发者上手编辑器。经验丰富的成熟开发者,可以在此点击【完整】,切换到传统的树状文件结构,进行更加精确的文件定位和管理。**
+
+
+
+## 搜索筛选区
+
+在这里我们提供了搜索框,开发者可以输入关键词以定位到该目录下所有文件名包含该关键词的文件。**新版资源管理器的搜索功能支持对所选目录的各级子文件夹进行穿透搜索**,而不是像以前一样只能搜索当前文件夹了。
+
+另外我们还提供了【筛选器】供开发者在当前展示的文件中进行进一步的筛选,已达到更精确定位的效果。
+ > 需要注意的是,在精简模式下筛选器被隐藏,但搜索框依然是可以使用的。
+
+
+
+## 资源视图
+
+在新版资源管理器中,我们使用了卡片样式,以展示更多的文件信息(包括更长的文件名展示,以及文件类型展示)。当鼠标悬浮到文件卡片上方时,会通过悬浮窗展示该文件的详细信息;图片类文件还会额外显示缩略图。
+
+
+
+选中一个文件或文件夹后,会在底部显示其文件路径,点击复制后可以复制其完整路径(本地计算机磁盘路径)。
+
+点击右下角的视图按钮,可在卡片平铺和列表两种视图间切换。
+
+
+
diff --git a/mcguide/15-资源管理/4-新建文件.md b/mcguide/15-资源管理/4-新建文件.md
new file mode 100644
index 0000000..b73627f
--- /dev/null
+++ b/mcguide/15-资源管理/4-新建文件.md
@@ -0,0 +1,41 @@
+---
+front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/content002.a08fa47a.png
+hard: 入门
+time: 5分钟
+---
+
+# 新建文件
+
+## 从新建文件向导创建内容
+点击资源管理器中的新建按钮,弹出新建文件向导。
+你可以在新建文件向导中创建配置、预设、零件、特效、界面等文件。
+
+
+
+使用新建文件向导创建文件除了可以新建文件之外,还提供:
+
+- 文件类型说明
+- 实体预设,部分配置等选择数据模板(如下图所示)
+- 文件命名
+- 预设和零件的配套文件创建
+- ModMain脚本文件和配套文件的创建
+- 脚本代码文件中自动生成必要代码
+
+我们非常推荐您使用新建文件向导的方式进行文件的新建,可有效避免各类不必要的目录配置工作。
+
+
+
+
+## 从作品文件夹创建内容
+
+除了新建文件向导之外,我们还在完整模式下提供了通过文件夹新建的方法。
+
+在完整模式下点击对应的文件夹的“+”,可以通过弹出的菜单进行快捷新建,可以通过这种方式新建的文件类型包括:
+
+- 预设(Presets文件夹)
+- 零件(Parts文件夹)
+- 网易版特效(effects文件夹)
+- 界面(ui文件夹)
+- 素材(BoxData文件夹)
+
+
diff --git a/mcguide/15-资源管理/5-文件导入.md b/mcguide/15-资源管理/5-文件导入.md
new file mode 100644
index 0000000..7b95217
--- /dev/null
+++ b/mcguide/15-资源管理/5-文件导入.md
@@ -0,0 +1,33 @@
+---
+front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/content002.a08fa47a.png
+hard: 入门
+time: 10分钟
+---
+
+# 文件导入
+
+## 导入菜单
+
+点击资源管理器左侧的导入按钮(如下图),在这里你可以导入:
+
+1. 资源包
+导入专属于编辑器的资源格式,具体详情可参考[资源包](./10-资源包.md)。
+1. 预设
+将.preset后缀的预设文件导入到当前作品的Presets文件夹下。
+1. 零件
+将存放有.part后缀的零件及其相关python代码的文件夹一起导入到当前作品的Parts目录下。
+1. 地图素材
+将外部的.mdl素材文件导入到当前作品的BoxData文件夹下。
+1. 模型
+导入骨骼模型和原版模型,详细导入教程可参考[模型的导入与使用](../16-美术/9-特效/10-模型导入.md)。
+6. 特效
+导入中国版特效(包含序列帧和粒子特效)和原版粒子特效,详情可参考[导入特效](../16-美术/9-特效/30-中国版特效创建与使用.md#创建导入中国版特效)。
+7. 材质
+导入材质和对应所需要的着色器(shader)。
+8. 界面
+导入界面文件,用于在界面编辑器进行编辑,详情可参考[界面资源管理](../18-界面与交互/1-界面编辑器使用说明.md#界面资源管理)。
+9. 贴图
+导入贴图文件,用于实体、方块、物品等需要贴图的属性,具体支持的贴图类别如下图。
+
+
+> 虽然开发者可以直接拖拽文件到作品目录,但上述内容文件结构较复杂,推荐使用编辑的导入功能进行导入。
diff --git a/mcguide/15-资源管理/images/1.png b/mcguide/15-资源管理/images/1.png
new file mode 100644
index 0000000..2721f34
Binary files /dev/null and b/mcguide/15-资源管理/images/1.png differ
diff --git a/mcguide/15-资源管理/images/2.gif b/mcguide/15-资源管理/images/2.gif
new file mode 100644
index 0000000..2df90e3
Binary files /dev/null and b/mcguide/15-资源管理/images/2.gif differ
diff --git a/mcguide/15-资源管理/images/3.gif b/mcguide/15-资源管理/images/3.gif
new file mode 100644
index 0000000..7a6829b
Binary files /dev/null and b/mcguide/15-资源管理/images/3.gif differ
diff --git a/mcguide/15-资源管理/images/4.png b/mcguide/15-资源管理/images/4.png
new file mode 100644
index 0000000..1b25ecd
Binary files /dev/null and b/mcguide/15-资源管理/images/4.png differ
diff --git a/mcguide/15-资源管理/images/5.png b/mcguide/15-资源管理/images/5.png
new file mode 100644
index 0000000..5146e44
Binary files /dev/null and b/mcguide/15-资源管理/images/5.png differ
diff --git a/mcguide/15-资源管理/images/6.png b/mcguide/15-资源管理/images/6.png
new file mode 100644
index 0000000..644e0f5
Binary files /dev/null and b/mcguide/15-资源管理/images/6.png differ
diff --git a/mcguide/15-资源管理/images/7.gif b/mcguide/15-资源管理/images/7.gif
new file mode 100644
index 0000000..472ac9a
Binary files /dev/null and b/mcguide/15-资源管理/images/7.gif differ
diff --git a/mcguide/15-资源管理/images/8.png b/mcguide/15-资源管理/images/8.png
new file mode 100644
index 0000000..8f4bece
Binary files /dev/null and b/mcguide/15-资源管理/images/8.png differ
diff --git a/mcguide/15-资源管理/images/9.gif b/mcguide/15-资源管理/images/9.gif
new file mode 100644
index 0000000..67543bc
Binary files /dev/null and b/mcguide/15-资源管理/images/9.gif differ
diff --git a/mcguide/15-资源管理/images/applydt.png b/mcguide/15-资源管理/images/applydt.png
new file mode 100644
index 0000000..0a89f37
Binary files /dev/null and b/mcguide/15-资源管理/images/applydt.png differ
diff --git a/mcguide/15-资源管理/images/content005.png b/mcguide/15-资源管理/images/content005.png
new file mode 100644
index 0000000..9f13bb7
Binary files /dev/null and b/mcguide/15-资源管理/images/content005.png differ
diff --git a/mcguide/15-资源管理/images/content006.png b/mcguide/15-资源管理/images/content006.png
new file mode 100644
index 0000000..cff8fce
Binary files /dev/null and b/mcguide/15-资源管理/images/content006.png differ
diff --git a/mcguide/15-资源管理/images/content007.png b/mcguide/15-资源管理/images/content007.png
new file mode 100644
index 0000000..55f6536
Binary files /dev/null and b/mcguide/15-资源管理/images/content007.png differ
diff --git a/mcguide/15-资源管理/images/contentlib01.png b/mcguide/15-资源管理/images/contentlib01.png
new file mode 100644
index 0000000..8946b16
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib01.png differ
diff --git a/mcguide/15-资源管理/images/contentlib02.png b/mcguide/15-资源管理/images/contentlib02.png
new file mode 100644
index 0000000..6a19e3a
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib02.png differ
diff --git a/mcguide/15-资源管理/images/contentlib021.png b/mcguide/15-资源管理/images/contentlib021.png
new file mode 100644
index 0000000..508904d
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib021.png differ
diff --git a/mcguide/15-资源管理/images/contentlib022.png b/mcguide/15-资源管理/images/contentlib022.png
new file mode 100644
index 0000000..4be973a
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib022.png differ
diff --git a/mcguide/15-资源管理/images/contentlib023.png b/mcguide/15-资源管理/images/contentlib023.png
new file mode 100644
index 0000000..9ef7cfc
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib023.png differ
diff --git a/mcguide/15-资源管理/images/contentlib024.png b/mcguide/15-资源管理/images/contentlib024.png
new file mode 100644
index 0000000..1a30aa8
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib024.png differ
diff --git a/mcguide/15-资源管理/images/contentlib03.png b/mcguide/15-资源管理/images/contentlib03.png
new file mode 100644
index 0000000..83cb193
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib03.png differ
diff --git a/mcguide/15-资源管理/images/contentlib04.png b/mcguide/15-资源管理/images/contentlib04.png
new file mode 100644
index 0000000..6501d2e
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib04.png differ
diff --git a/mcguide/15-资源管理/images/contentlib05.png b/mcguide/15-资源管理/images/contentlib05.png
new file mode 100644
index 0000000..6d4c6d9
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib05.png differ
diff --git a/mcguide/15-资源管理/images/contentlib06.png b/mcguide/15-资源管理/images/contentlib06.png
new file mode 100644
index 0000000..7c86efb
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib06.png differ
diff --git a/mcguide/15-资源管理/images/contentlib07.png b/mcguide/15-资源管理/images/contentlib07.png
new file mode 100644
index 0000000..8d6d26a
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib07.png differ
diff --git a/mcguide/15-资源管理/images/contentlib08.png b/mcguide/15-资源管理/images/contentlib08.png
new file mode 100644
index 0000000..f3c4422
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib08.png differ
diff --git a/mcguide/15-资源管理/images/contentlib09.png b/mcguide/15-资源管理/images/contentlib09.png
new file mode 100644
index 0000000..3243018
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib09.png differ
diff --git a/mcguide/15-资源管理/images/contentlib10.png b/mcguide/15-资源管理/images/contentlib10.png
new file mode 100644
index 0000000..3822cd2
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib10.png differ
diff --git a/mcguide/15-资源管理/images/contentlib11.png b/mcguide/15-资源管理/images/contentlib11.png
new file mode 100644
index 0000000..ef9c43d
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib11.png differ
diff --git a/mcguide/15-资源管理/images/contentlib12.png b/mcguide/15-资源管理/images/contentlib12.png
new file mode 100644
index 0000000..758abf9
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib12.png differ
diff --git a/mcguide/15-资源管理/images/contentlib_import.gif b/mcguide/15-资源管理/images/contentlib_import.gif
new file mode 100644
index 0000000..5581b0b
Binary files /dev/null and b/mcguide/15-资源管理/images/contentlib_import.gif differ
diff --git a/mcguide/15-资源管理/images/editpack.png b/mcguide/15-资源管理/images/editpack.png
new file mode 100644
index 0000000..f35e3aa
Binary files /dev/null and b/mcguide/15-资源管理/images/editpack.png differ
diff --git a/mcguide/15-资源管理/images/exportdt.png b/mcguide/15-资源管理/images/exportdt.png
new file mode 100644
index 0000000..f8ef69b
Binary files /dev/null and b/mcguide/15-资源管理/images/exportdt.png differ
diff --git a/mcguide/15-资源管理/images/image-20210823120000970.png b/mcguide/15-资源管理/images/image-20210823120000970.png
new file mode 100644
index 0000000..abbcf9e
Binary files /dev/null and b/mcguide/15-资源管理/images/image-20210823120000970.png differ
diff --git a/mcguide/15-资源管理/images/image-20210823140555212.png b/mcguide/15-资源管理/images/image-20210823140555212.png
new file mode 100644
index 0000000..73e70c6
Binary files /dev/null and b/mcguide/15-资源管理/images/image-20210823140555212.png differ
diff --git a/mcguide/15-资源管理/images/image-20210823140842423.png b/mcguide/15-资源管理/images/image-20210823140842423.png
new file mode 100644
index 0000000..5198e87
Binary files /dev/null and b/mcguide/15-资源管理/images/image-20210823140842423.png differ
diff --git a/mcguide/15-资源管理/images/image-20210823143920438.png b/mcguide/15-资源管理/images/image-20210823143920438.png
new file mode 100644
index 0000000..44894a0
Binary files /dev/null and b/mcguide/15-资源管理/images/image-20210823143920438.png differ
diff --git a/mcguide/15-资源管理/images/image-20210823144250187.png b/mcguide/15-资源管理/images/image-20210823144250187.png
new file mode 100644
index 0000000..2912287
Binary files /dev/null and b/mcguide/15-资源管理/images/image-20210823144250187.png differ
diff --git a/mcguide/15-资源管理/images/importbutton.png b/mcguide/15-资源管理/images/importbutton.png
new file mode 100644
index 0000000..dc864f7
Binary files /dev/null and b/mcguide/15-资源管理/images/importbutton.png differ
diff --git a/mcguide/15-资源管理/images/importcontentlib.png b/mcguide/15-资源管理/images/importcontentlib.png
new file mode 100644
index 0000000..b193d1b
Binary files /dev/null and b/mcguide/15-资源管理/images/importcontentlib.png differ
diff --git a/mcguide/15-资源管理/images/importdatatemplate.png b/mcguide/15-资源管理/images/importdatatemplate.png
new file mode 100644
index 0000000..c832ac5
Binary files /dev/null and b/mcguide/15-资源管理/images/importdatatemplate.png differ
diff --git a/mcguide/15-资源管理/images/importdt.png b/mcguide/15-资源管理/images/importdt.png
new file mode 100644
index 0000000..0ba64ab
Binary files /dev/null and b/mcguide/15-资源管理/images/importdt.png differ
diff --git a/mcguide/15-资源管理/images/importtext.png b/mcguide/15-资源管理/images/importtext.png
new file mode 100644
index 0000000..1ce83a6
Binary files /dev/null and b/mcguide/15-资源管理/images/importtext.png differ
diff --git a/mcguide/15-资源管理/images/tmpdt.png b/mcguide/15-资源管理/images/tmpdt.png
new file mode 100644
index 0000000..d9961f7
Binary files /dev/null and b/mcguide/15-资源管理/images/tmpdt.png differ
diff --git a/mcguide/15-资源管理/pictures/2.png b/mcguide/15-资源管理/pictures/2.png
new file mode 100644
index 0000000..56ab1ea
Binary files /dev/null and b/mcguide/15-资源管理/pictures/2.png differ
diff --git a/mcguide/15-资源管理/pictures/3.gif b/mcguide/15-资源管理/pictures/3.gif
new file mode 100644
index 0000000..b18dee1
Binary files /dev/null and b/mcguide/15-资源管理/pictures/3.gif differ
diff --git a/mcguide/15-资源管理/pictures/6.png b/mcguide/15-资源管理/pictures/6.png
new file mode 100644
index 0000000..c677f88
Binary files /dev/null and b/mcguide/15-资源管理/pictures/6.png differ
diff --git a/mcguide/15-资源管理/pictures/certificate.png b/mcguide/15-资源管理/pictures/certificate.png
new file mode 100644
index 0000000..9ee6c5e
Binary files /dev/null and b/mcguide/15-资源管理/pictures/certificate.png differ
diff --git a/mcguide/15-资源管理/pictures/function.png b/mcguide/15-资源管理/pictures/function.png
new file mode 100644
index 0000000..761cf6d
Binary files /dev/null and b/mcguide/15-资源管理/pictures/function.png differ
diff --git a/mcguide/15-资源管理/pictures/mail.png b/mcguide/15-资源管理/pictures/mail.png
new file mode 100644
index 0000000..2c39405
Binary files /dev/null and b/mcguide/15-资源管理/pictures/mail.png differ
diff --git a/mcguide/15-资源管理/pictures/output.png b/mcguide/15-资源管理/pictures/output.png
new file mode 100644
index 0000000..7c756a7
Binary files /dev/null and b/mcguide/15-资源管理/pictures/output.png differ
diff --git a/mcguide/15-资源管理/pictures/resource.png b/mcguide/15-资源管理/pictures/resource.png
new file mode 100644
index 0000000..538d9c0
Binary files /dev/null and b/mcguide/15-资源管理/pictures/resource.png differ
diff --git a/mcguide/15-资源管理/pictures/reward.png b/mcguide/15-资源管理/pictures/reward.png
new file mode 100644
index 0000000..9c9eef0
Binary files /dev/null and b/mcguide/15-资源管理/pictures/reward.png differ
diff --git a/mcguide/16-美术/50-贴图规范及九宫格使用.md b/mcguide/16-美术/50-贴图规范及九宫格使用.md
new file mode 100644
index 0000000..00a724e
--- /dev/null
+++ b/mcguide/16-美术/50-贴图规范及九宫格使用.md
@@ -0,0 +1,79 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# MC九宫格使用与贴图规范
+
+## 九宫格使用
+
+#### 写在前面——我们的九宫格与微软的九宫格
+
+在微软支持九宫格拉伸之前我们自己实现了一套九宫格拉伸的工具,但是该工具无法适配微软原生的自动UI scale缩放。微软会根据当前屏幕尺寸对UI整体进行缩放,我们的九宫格是在ui缩放后再对图片进行九宫格处理,而微软原生的是先对图片进行九宫格处理后再进行UI缩放。这就会导致贴图资源四边如果只有1像素细节的话,用我们的九宫格拉伸后四边会特别细,而微软的就比较正常,如下图所示,左侧为我们的九宫格,右侧为微软原版九宫格:
+
+
+
+同时,由于计算精度问题,我们自己实现的九宫格会出现计算精度有问题导致四角显示异常,如下图所示:
+
+
+
+因此我建议使用微软原版九宫格来对图片进行拉伸,后文贴图规范均建立在使用微软原版九宫格基础上。
+
+#### 九宫格拉伸原理
+
+
+
+如上图所示,九宫格是将一张图分为9个部分,其中四边的间距对应微软原版九宫格的参数依次是[left, top, right, bottom],具体json中的配置如下图所示:
+
+
+
+在拉伸过程中,1、3、7、9四个部分是不会被拉伸的,2、8部分被横向拉伸,4、6部分被纵向拉伸,中间5部分则是横纵向均被拉伸。因此美术同学在出图的时候应该避免将一些不能被拉伸的元素放在2468区域,比如对话框的尖角,如下图所示:
+
+
+
+美术在设计的时候尽量将这个尖角放偏移一下,避免放在正中间,这样程序可以通过代码设置将其置于1379这四个不被拉伸的区域,效果如下:
+
+
+
+
+
+#### 一些可以使用九宫格的示例
+
+原图:
+
+拉伸后效果:
+
+
+
+
+
+原图:
+
+拉伸后效果:
+
+注意:此处的“寻找原木”的背景是深灰,实际上是直接通过直接设置一张空白图片的颜色得到的,也就是说这种可以通过拼接实现的是可以不用出纯色资源的。
+
+
+
+原图:
+
+拉伸后效果:
+
+
+
+## 贴图规范及建议
+- 大部分贴图首次显示是需要进行异步加载的,程序可以通过指定预先加载贴图避免一些贴图闪烁问题,详见 贴图预加载 。
+
+- 纯色资源可以不出,程序可以通过在对应的位置参考下图配置json实现纯色资源,其中color色号和alpha透明度直接设置即可,如有需要还可以设置对应的size和offset:
+
+
+
+- 贴图的长宽建议选择2的幂次方,比如2、4、8、16、32、64、128、256、512。例:如果一张图完成之后大小为30x130,建议重新切成32x128,不然在实际中该贴图将会占用32x256的内存空间,造成额外的浪费。
+- **建议模型特效贴图最大不要超过128x128,超过该尺寸的贴图数量应作严格限制,一张256x256的图占用内存等于4张128x128,而一张1024x1024的图就等于64张128x128了**。
+- 可以通过九宫格拉伸的如果四边规整,切图建议16x16即可;如果四边细节不规则,如上述例子的第一个,那么保证四边比例的基础上中间拉伸区域5可以只留1像素。——理论上四边规整也可以只留中间1像素进行拉伸,不过因8x8和16x16差距不大不做更严格要求。
+- 除此之外,下图中的图片可作参考:张望、绕圈、高兴等动作图标出128x128、成长指引树中的图标出64x64、返回按钮下方的眼睛按钮出32x32,在手机上均能表现出非常好的效果,无需更大的图标。原版物品贴图大小均为16x16,看起来就是像素风的,美术同学可以参考这几个尺寸出图标。
+
+
+
+
diff --git a/mcguide/16-美术/6-模型和动作/00-模型制作方案.md b/mcguide/16-美术/6-模型和动作/00-模型制作方案.md
new file mode 100644
index 0000000..bd75818
--- /dev/null
+++ b/mcguide/16-美术/6-模型和动作/00-模型制作方案.md
@@ -0,0 +1,30 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/16639574-e3de-4603-b64d-664b1fa77236.png
+hard: 入门
+time: 5分钟
+selection: 37
+---
+
+# 模型制作方案
+
+我的世界中国版支持两种模型格式,分别为原版模型与普通的骨骼模型。
+
+| | 原版模型 |骨骼模型 |
+| :---: | :---: | :---: |
+| 制作工具 | Blockbench等 | 3D Max、CINEMA 4D、Autodesk Maya、Blender等 |
+| 资源大小 | 小 | 略大于原版模型 |
+| 模型风格 | 方块风格| 可支持各种风格,模型中可有曲面 |
+
+两种模型在游戏中支持不同的使用场景,可根据需求调整模型制作方案。
+| 使用场景 | 原版模型 |骨骼模型 |
+| :---: | :---: | :---: |
+| 生物模型 | 支持 | 支持 |
+| 玩家模型 | 支持 | 支持 |
+| 玩家第一人称模型 | 不支持 | 支持 |
+| 模型骨骼绑定特效 | 不支持 | 支持 |
+| 方块模型 | 模型文件格式做一定调整后可用于方块模型 | 不支持 |
+| 装备模型 | 模型文件格式做一定调整后可用于装备模型 | 不支持 |
+| PaperDoll | 支持模型显示,不支持指定动作播放 | 支持模型显示,也支持指定动作播放 |
+| 模型贴图序列帧动画 | 不支持 | 支持 |
+
+两种格式的模型制作请参照后续的文档。
\ No newline at end of file
diff --git a/mcguide/16-美术/6-模型和动作/01-原版模型制作指南.md b/mcguide/16-美术/6-模型和动作/01-原版模型制作指南.md
new file mode 100644
index 0000000..53e2d06
--- /dev/null
+++ b/mcguide/16-美术/6-模型和动作/01-原版模型制作指南.md
@@ -0,0 +1,225 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# 原版模型制作指南
+
+## 1. Blockbench
+
+Blockbench 是由 JannisX11 开发的一款专门用于 Minecraft 3D 建模的免费软件。
+
+使用软件:Blockbench 3.4.2
+
+官方网站:https://blockbench.net/
+
+因为官网源地址下载太慢,依据软件的MIT协议,这里提供一个国内的下载备份[地址](https://mcrealms.gdl.netease.com/Blockbench_3.4.2.exe)。
+
+
+
+Blockbench有以下优点:
+
+* 软件操作简单,上手几乎没有门槛;
+* 免费开源软件,任何人都可以自由的使用它 ;
+* 支持插件功能,可以方便的添加功能强大的插件;
+* 制作的模型可以导出为 OBJ 文件,你可以使用任意现代化的 3D 建模软件渲染它,制作出好看的图片;
+* 支持 Minecraft Java 版的方块物品建模,Minecraft Java 版实体建模,Minecraft 基岩版本的实体建模,OptiFine 模组的实体建模等诸多功能。是你制作 Minecraft 模型不可或缺的工具。
+
+
+
+
+
+本文档我们将介绍如何使用Blockbench制作生物模型与动作。
+
+**注意**:Blockbench 3.x版本默认启用1.12.0版本基岩版模型。
+
+下面,我们以制作“松鼠”模型和动作为例,详细说明如何制作模型和动作,最终输入资源路径为:示例\6-4 资源制作\工具和示例\bbmodel
+
+
+
+## 2.模型制作流程
+
+### 2.1 创建工程
+
+
+
+### 2.2 参数设置
+
+这里创建一个松鼠的模型,文件名为squirrel,模型Identifier为netease:squirrel,贴图大小为64,设置完直接点击“Confirm”进入下一步。
+
+
+
+### 2.3 导入贴图
+
+在软件界面的左下角中找到贴图界面,导入模型将要使用的贴图,该贴图的大小应该和上一步中设置的参数一致,如下所示:
+
+
+
+### 2.4 创建模型几何
+
+
+
+如上图所示,在"**Edit**"标签下,我们可以编辑几何模型,区域1可以编辑模型,区域2实时显示模型。
+
+* 创建分组与立方体
+
+在大纲栏(Outliner)中,可以通过创建分组来管理立方体。
+
+
+
+如上图所示,创建一个分组body,里面包含两个立方体(命名为body)
+
+* 编辑立方体
+
+在创建分组与立方体完成之后,选中指定的立方体(如上图中第二个body),便可以编辑其位置(Position)、大小(Size)、 轴心点 (Pivot Point)、旋转角度(Rotation)等信息。
+
+* 编辑立方体贴图UV
+
+
+
+如图所示,在左上角可以通过调整**X**和**Y**的值来调整“**当前编辑立方体**”使用的贴图。
+
+### 2.5 导出模型
+
+在完成模型编辑之后,我们可以通过导出模型json,便可以在游戏中使用。
+
+
+
+在本示例中,导出名称为squirrel.geo.json,内容如下所示:
+
+```json
+{
+ "format_version": "1.12.0",
+ "minecraft:geometry": [
+ {
+ "description": {
+ "identifier": "geometry.netease:squirrel", # 对应参数设置中的模型Identifier
+ "texture_width": 64, # 对应参数设置中的贴图大小
+ "texture_height": 64,
+ "visible_bounds_width": 4,
+ "visible_bounds_height": 1,
+ "visible_bounds_offset": [0, 0.5, 0]
+ },
+ "bones": [
+ {
+ "name": "body",
+ "pivot": [0, 5, 8],
+ "rotation": [-20, 0, 0],
+ "mirror": true,
+ "cubes": [
+ {"origin": [-3, 2, -2], "size": [6, 5, 10], "uv": [0, 0], "mirror": false},
+ {"origin": [-3, 7, 1], "size": [6, 1, 7], "uv": [22, 0], "mirror": false}
+ ]
+ },
+ ...
+ ]
+ }
+ ]
+}
+```
+
+
+
+## 3.动作制作流程
+
+首先,有一点我们需要清楚:动作是在模型的基础上,对模型的节点的位置、旋转角度进行调整。
+
+### 3.1 界面说明
+
+我们先来初步了解一下动作制作界面。
+
+
+
+* 区域1:编辑动作需要切换到"**Animate**"标签
+* 区域2:动作增加、动作删除、动作长度设置、动作预览、动作属性设置(如:是否循环播放等)
+* 区域3:动作关键帧编辑
+* 区域4:动作编辑管理
+* 区域5:模型分组大纲栏
+* 区域6:模型分组对应的骨骼瞄点
+
+
+
+### 3.2 新建动作
+
+
+
+步骤如下:
+
+* 点击创建动作按钮,弹出输入框;
+* 输入动作名称,如animation.squirrel.idle;
+* 点击确定
+
+
+
+### 3.3 编辑动作
+
+
+
+* 选中需要编辑的动作
+
+如图,选中动作animation.squirrel.idle
+
+* 选中模型立方体
+
+如图,选中节点head
+
+* 选中动作时间节点
+
+如图,选中时间线上的0.5ms
+
+* 插入关键帧信息
+
+如图,点击head下的Rotation右边的“+”按钮增加关键帧
+
+* 编辑关键帧信息
+
+如图,编辑关键帧信息Rotation(5,0,0)
+
+### 3.4 导出动作
+
+
+
+输入命名squirrel.animation.json后保存便得到我们需要的动作。
+
+```json
+{
+ "format_version": "1.8.0",
+ "animations": {
+ "animation.squirrel.idle": {
+ "loop": true,
+ "animation_length": 2,
+ "bones": {
+ "rearFootLeft": {
+ "rotation": {
+ "0.0": [0, 0, 0],
+ "0.4833": [15, 0, 0],
+ "1.6": [10, 0, 0],
+ "1.8833": [-10, 0, 0],
+ "2.0": [0, 0, 0]
+ }
+ },
+ ...
+ }
+ },
+ "animation.squirrel.move": {
+ "loop": true,
+ "animation_length": 0.48,
+ "bones": {
+ "rearFootLeft": {
+ "rotation": {
+ "0.0": [5, 0, 0],
+ "0.1667": [125, 0, 0],
+ "0.4333": [5, 0, 0]
+ }
+ },
+ ...
+ }
+ }
+ }
+}
+```
+
+
+
+至此,我们可以将导出的模型和动作用于制作自定义生物了。
\ No newline at end of file
diff --git a/mcguide/16-美术/6-模型和动作/02-骨骼模型制作指南(3DMAX).md b/mcguide/16-美术/6-模型和动作/02-骨骼模型制作指南(3DMAX).md
new file mode 100644
index 0000000..8db7f1f
--- /dev/null
+++ b/mcguide/16-美术/6-模型和动作/02-骨骼模型制作指南(3DMAX).md
@@ -0,0 +1,241 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# 骨骼模型制作指南(3DMAX)
+
+## 1. 模型制作技术规范
+
+本文档说明了如何使用软件MAX 2014制作符合《我的世界》规范的模型。
+
+### 1.1 模型单位
+
+
+
+### 1.2 朝向
+
+
+
+### 1.3 贴图
+
+- 只支持一张贴图,贴图名称必须为英文
+
+- **模型制作当中,避免使用镜像或者对称!**
+
+### 1.4 顶点
+
+- **每个长方体通常是8个顶点,整个模型应控制在300个顶点,特殊模型可在1000以内**
+
+- **每个顶点只绑定一根骨骼**
+
+- **注意事项:法线检查**
+
+模型制作完成提交前必须完成以下4个步骤:
+
+1. 属性中将模型设置为背面消隐,查看模型是否有反面,如果有的话 **(flip)。(检查过程当中多尝试)**
+
+
+
+2. Reset Xform **(多点击几次,然后塌陷)**
+
+
+
+3. Mesh Select **(与4一起,点击完后,不用操作,直接塌陷)**
+
+
+
+4. STL Check
+
+ 并最终转化为Poly模型提交,此步骤可避免模型在引擎中显示出错。
+
+ 如果模型出现法线问题,将法线出错的位置选择并反相 **(flip)** 即可。
+
+ 
+
+### 1.5 动作输出注意事项
+
+#### 1.5.1 关于蒙皮
+
+- 骨骼架设使用纯bone
+
+- 骨骼控制在20根以内,最多不能超过50(这种是为了做特殊boss用)
+
+- 需要添加root,up,down 三根骨骼
+ - root,是质心的父级,位移旋转都要归于坐标原点(0.0)
+ - up,控制上半身,质心的子级,身体的父级
+ - down,控制下半身,质心的子级,双脚的父级
+
+- 所有的骨骼都要有链接,(武器挂件坐骑等都要链接给相应的手,质心等位子,可使用link)
+
+- 蒙皮选项当中的高级参数中,有个**骨骼影响限制,需要调为1**
+
+
+
+#### 1.5.2 动作输出
+
+- 文件版本为MAX 2014
+
+- 输出文件命名使用拼音如(技能_狂气)输出(spell_kuangqi)
+
+- 文件需要输出FBX,输出文件夹命名英文
+
+- 输出文件需要塌陷骨骼动画
+
+- root、up、down骨骼不可以有动画
+
+- 缩放动画必须用等比缩放,且不能有单轴向缩放
+
+- 蒙皮与待机pose确认后再进行其余动作制作
+
+**注意事项:模型当中不能有任何的中文**
+
+#### 1.5.3 FBX输出设置
+
+
+
+
+
+
+
+输出为FBX格式的文件后,参考[教学中心-编辑器基础-关卡编辑器使用说明-资源管理-资源导入](../../15-资源管理/5-文件导入.md)转化为我的世界中可用的模型格式。
+
+
+## 2. 制作导出流程
+
+以大天狗制作流程为例
+
+### 2.1 原画概念设计
+
+1. 打开人形式神基础模型(基础模型的每个格子单位为1,就是像素单位,不要改变这个大小)
+
+ 
+
+2. 利用材质球上色截图或者PS上色均可,正面的效果可以比较快地确定颜色分布。
+
+ 
+
+3. 增加外轮廓的辨识度,突出的部分尽量归纳,减少细节,这一步使用PS绘制概念图。
+
+ 
+
+4. 进一步增加轮廓的辨识度,注意角色身上最具有特点的部位,一个角色身上只有一到两个特征需要这样强调,比如大天狗的翅膀。这一步同样使用PS绘制示意图,背面也需要有设计。
+
+ 因为风格限制,不强制侧面的效果,但是需要考虑到4分之一侧面的效果。
+
+ 
+
+ 
+
+ 参考:《阴阳师》大天狗设计图,在转换为我的世界模型风格时,需要减少没有代表性的琐碎细节。
+
+ * 鞋子的造型需要直接归纳到腿部
+
+ * 翅膀的3层羽毛层次减少到2层,边缘细节概括处理
+
+ **注意:设计归纳的时候注意估算一下顶点数量,小怪在300以下,复杂模型在700以下,BOSS在1000以下,尽量低于最高值,以免制作完成后超过难以修改。**
+
+
+
+ 
+
+### 2.2 建模附材质
+
+#### 2.2.1 制作模型
+
+根据绘制草图制作模型,建模部分可以在原本的格子上直接挤出来造型。**注意挤出的高度单位也是1**。
+
+建模方法如下:
+
+1. 根据游戏中的规范,用头部放大,然后删去不要的部分来建模(比如大天狗)。
+
+ **注意方法1与方法2不能使用在同一个部件上**。
+
+2. 如果头发造型过于复杂或者有动作上的可能性,则需要另外建模(比如酒吞童子)。
+
+ **注意检查挤出后不要有一些废面藏在模型里。**
+
+
+
+#### 2.2.2 开始上色
+
+因为我们使用的是一像素单位的像素格,使用为单个面赋予材质球的方式来上色。
+
+**给同一个色相类型的材质球命名好,编好号,方便管理。(比如黄色以Y开头,Y-1 、Y-2类似)**
+
+区分好固有色后,开始细分色阶,同样一个固有色细分2~4个色阶,不要太多,细分太过细腻会削弱像素元素本身的美感。
+
+
+
+
+
+### 2.3 材质球(贴图)处理
+
+本步骤是为了方便整理材质,也可以不做
+
+
+
+在上一步模型以及材质赋予步骤完成之后,参考上图步骤清空材质球选框,依次从左至右吸取头发、头部、身体等材质。(将会得到如上的多维子材质球)
+
+制作中需要注意单个颜色的ID的排序参考上图由浅至深依次排列,方便制作以及修改。
+
+1. 按照下图中三个步骤,新建一个材质库
+
+ 
+
+2. 保存材质库的命名(以角色名称为命名),之后材质目录中会出现该材质库(下图示例:yunv)
+
+ 
+
+3. 选择单一材质球,依下图标识将该材质球加入材质库(所有材质球依次制作一遍)
+
+ 
+
+ 注意材质球需要以部件名称为命名
+
+ 
+
+4. 再次打开材质库,可见所有材质球已经被导入材质库,在材质库中右键,保存入第一步中创建的mat文件中即可。**这么做的原因是为了方便整理材质球,便于调整颜色。**
+
+ 
+
+### 2.4 后处理
+
+#### 2.4.1 分UV
+
+
+
+- 所有的UV线都必须横平竖直,不能有倾斜,否则会出现锯齿。
+
+- UV边界需要像素填充,通过烘焙可以扩边4个像素
+
+- UV摆放原则,身体结构按部位从上到下摆放,不能颠倒朝向
+
+- UV格子大小需要基本一致,不能有太大的差别
+
+#### 2.4.2 烘焙
+
+**注意烘焙之前上传一版NXN做备份**
+
+
+
+启用填充,烘焙贴图有扩边效果
+
+
+
+贴图大小可以烘焙得大一点提高精度,然后在PS里面缩小到**512X512**,注意缩小的时候使用邻近(硬边缘),因为都是像素格,这样缩小不会损失任何精度。
+
+#### 2.4.3 减面
+
+只留下必须的点面,多余的点面全部减掉,注意贴上烘焙好的贴图进行减面,**减的时候注意不要出现贴图拉伸变形的情况。**
+
+
+
+
+
+### 2.5 完成
+
+制作完的MAX文件,贴上烘焙好的贴图的效果截图
+
+
\ No newline at end of file
diff --git a/mcguide/16-美术/6-模型和动作/03-骨骼模型制作指南(Blender).md b/mcguide/16-美术/6-模型和动作/03-骨骼模型制作指南(Blender).md
new file mode 100644
index 0000000..3d25d3b
--- /dev/null
+++ b/mcguide/16-美术/6-模型和动作/03-骨骼模型制作指南(Blender).md
@@ -0,0 +1,182 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# 骨骼模型制作指南(Blender)
+
+## 1.模型制作技术规范
+
+使用软件:blender 2.82
+
+### 1.1 模型单位设置
+
+模型单位设置为:英寸
+
+
+
+
+
+### 1.2 朝向
+
+背对y轴,x轴朝右,z轴朝上
+
+
+
+
+
+### 1.3 贴图
+
+只支持一张贴图,贴图名称必须为英文
+
+**模型制作当中,避免使用镜像或者对称!**
+
+
+
+### 1.4 顶点
+
+每个长方体通常是8个,整个模型控制在300个顶点,特殊模型可以在1000以内
+
+每个顶点只绑定一根骨骼
+
+注意事项:法线检查
+
+模型制作完成提交前必须完成2个步骤:
+
+- 检查法线朝向
+
+
+
+- 游标归于模型中心,模型位于场景中心
+
+
+
+
+
+### 1.5 关于蒙皮
+
+对于蒙皮,主要注意以下几点:
+
+ 1)骨骼需要有总控root骨骼,且每部分只能用一根骨骼,骨骼示意以及层级关系如下图:
+
+
+
+2)骨骼命名也需要按照肢体去规范名字
+
+- 总控=root
+- 身体=body
+- 头=head
+- 左胳膊=arm_l
+- 右胳膊= arm_r
+- 左腿=leg_l
+- 右腿=leg_r
+
+3)骨骼数要控制在20根以内,最多不能超50(某种特殊boss可能会用到50根以内的骨骼,常规要控制在20根以内)
+
+4)蒙皮需要注意的,每个模块只能受一根骨骼影响,如下图所示,头部只能受“head”骨骼影响。
+
+
+
+5)FBX输出设置
+
+
+
+
+
+## 2.制作流程
+
+下面以大天狗制作流程为例说明骨骼模型的制作过程。
+
+### 2.1 原画概念设计
+
+1)打开人形式神基础模型(基础模型的每个格子单位为1,就是像素单位,不要改变这个大小)
+
+
+
+2)利用材质球上色截图或者PS上色均可,正面的效果可以比较快的确定颜色分布
+
+
+
+3)增加外轮廓的辨识度,突出的部分尽量归纳,减少细节,这一步使用PS绘制概念图
+
+
+
+4)进一步增加轮廓的辨识度,注意角色身上最具有特点的部位,一个角色身上只有一到两个特征需要这样强调,比如大天狗的翅膀。这一步同样使用PS绘制示意图,背面也需要有设计,因为风格限制,不强制侧面的效果,但是需要考虑到4分之一侧面的效果
+
+
+
+
+
+参考:《阴阳师》大天狗设计图,在转换为我的世界模型风格时,需要减少没有代表性的琐碎细节。
+
+鞋子的造型需要直接归纳到腿部
+
+翅膀的3层羽毛层次减少到2层,边缘细节概括处理
+
+**注意:设计归纳的时候注意估算一下顶点数量,小怪300以下,复杂模型700以下,BOSS1000以下,尽量低于最高值,以免制作完成后超过难以修改。**
+
+
+
+### 2.2 建模和着色
+
+#### 2.2.1 制作模型
+
+根据原画,制作模型,建模部分可以在提供的标模的格子上直接挤出来造型。注意挤出的高度单位也是1。
+
+1:根据游戏中的规范,用头部放大,然后删去不要的部分来建模。(比如大天狗)
+
+2:如果头发造型过于复杂或者有动作,则需要另外建模。(比如酒吞童子)
+
+**注意:关节处的模型体块必须分开制作(胳膊,腿,身体的体块都是要分开的,动物类模型尾巴有转折的话,尾巴的转折处也要分开制作)**
+
+#### 2.2.2 开始上色
+
+
+
+ 材质属性面板,选中需要着色的面,赋予不同颜色的材质球,因为颜色会比较多,材质球命名上可以用类似:green_01,green_02这种方便查找对应的颜色。
+
+
+
+### 2.3 后处理
+
+#### 2.3.1 UV拆分
+
+所有的uv必须横平竖直,不能有倾斜,否则会出现锯齿
+
+每块uv边界之间要留至少两个像素的距离,贴图要制作扩边
+
+uv摆放时可以导入一张对应贴图像素大小的棋盘格,每一条uv边缘线都必须要和棋盘格的格子对齐
+
+
+
+#### 2.3.2 减面
+
+
+
+
+
+复制一个模型减面,(或拓扑,用拓扑的话,就可以拓扑后再拆分uv,uv摆放的规则一定要重视)只留下轮廓线,多余的线全部删掉。
+
+填色的高模备份一个,后面烘焙颜色用。
+
+
+
+#### 2.3.3 烘焙颜色
+
+烘焙类型选择漫射,烘焙颜色的时候可以提高贴图精度,之后再用PS缩小到128像素大小
+
+
+
+注意缩小图像大小的时候使用邻近(硬边缘),因为都是像素格,不会损失精度。
+
+
+
+### 2.4 完成
+
+贴上烘焙好的贴图效果截图如下:
+
+
+
+
+
diff --git a/mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.md b/mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.md
new file mode 100644
index 0000000..b0c17a4
--- /dev/null
+++ b/mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.md
@@ -0,0 +1,343 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# 骨骼模型的使用
+
+骨骼模型、骨骼动画的制作请参考[骨骼模型制作指南(3DMAX)](02-骨骼模型制作指南(3DMAX).html)等相关文档。
+
+通过专业的模型制作软件完成模型后,导出为FBX格式,然后再转换为《我的世界》中的模型格式(JSON格式),相应的方法请查阅[教学中心-编辑器基础-特效编辑器-入门教程01-模型导入与使用](../9-特效/10-模型导入.md#1-导入fbx模型)。
+
+> 如需将已转换为我的世界中国版格式的骨骼模型导入至其他作品中,可以参考[骨骼模型(json)的导入](../9-特效/10-模型导入.md#2-导入骨骼模型json)
+
+在将骨骼模型转换为JSON格式后,我们就可以准备在游戏内使用骨骼模型了。以离线文档中 **示例/6-4 资源制作/工具和示例/fbxRes/xuenv** 资源为例,先在编辑器中导入这个模型,然后按下面的步骤进行。实际上下面的1~3步目前编辑器已经自动完成了,需要手动操作文件时可以参考。
+
+
+
+## 1. 填入模型路径信息
+
+在`mod_resource/models/netease_models.json`里面填入模型的骨骼,网格及动作的文件路径(目前编辑器已经自动做好这一步了),如下图所示:
+
+
+
+**骨骼模型动画的命名最好使用英文单词/拼音/数字/下划线组成。**
+
+## 2. 将资源放入对应目录
+
+将skeleton、mesh、animation资源放入`mod_resource/models`下对应的文件夹:
+
+
+
+## 3. 指定贴图
+
+mesh文件中会有指定material,如下图所示:
+
+名称对应到`mod_resource/textures/models/xuenv.png`,所以需要在此位置放置贴图资源。
+
+
+
+## 4. 代码调用
+
+采用component的结构来创建模型与控制动画播放
+
+创建模型替换原有模型
+
+```python
+modelComp = self.CreateComponent(playerId, 'Minecraft', 'model')
+# 'xuenv'即为netease_models.json里配置的骨骼模型名称
+modelComp.SetModel('xuenv')
+```
+
+播放动画
+
+```python
+modelComp = self.GetComponent(playerId, 'Minecraft', 'model')
+# 播放动画'prepare',第二个参数设置为True表示循环播放该动画,接口详细信息可以查看modAPI接口文档
+modelComp.PlayAnim('prepare', True)
+```
+
+## 5. 第一人称模型
+
+上面部分完成了第三人称视角的骨骼模型显示及动画播放,当我们想在游戏中切换到第一人称也有骨骼模型与动作时,需要另外做一套骨骼模型和动作(如下图的steve_fp),并且使动作的名称与第三人称模型的动作一致。然后把他配置为第三人称模型的“arm_model”,例如:
+
+
+
+在上图中,我们可以看到steve有骨骼模型动画,这些属于第三人称视角的骨骼模型动画,steve中的”arm_model”属性可关联第一人称视角的骨骼模型。配置第一人称视角骨骼模型之后,当玩家切换到第一人称视角时,如果手上无物品或者手上物品不显示,则会显示第一人称骨骼模型(即这里的“steve_fp”)。
+
+当播放动作时,第一人称视角模型的动作会跟随第三人称模型。例如给本地玩家替换steve模型后,播放walk动作,那么切换到第一人称视角时,显示的steve_fp模型也会播放walk动作。
+
+如果替换的第三人称骨骼模型没配置”arm_model”字段(例如上述的”xuenv”模型),则在第一人称视角下手上无物品或者手上物品不显示时,不会显示任何模型。
+
+## 6. 模型贴图序列帧动画
+
+骨骼模型动画除了支持上述在animation文件夹下放置相应的json文件这一方式外,也支持另一种只是单纯贴图变化的序列帧动画:
+
+
+
+制作这种贴图序列帧动画需要两个步骤,我们以上述的雪女为例:
+
+1) 用图片处理工具修改`mod_resource/textures/models/xuenv.png` 路径下的这张贴图:
+根据动画需要的帧数横竖方向重复铺开,此例中我们以6行5列总共30帧进行制作,处理每一帧中贴图需要变化的部分,序列帧播放的顺序由贴图的左上角先横再竖播放到贴图的右下角。
+
+原图:
+
+
+处理后:
+
+
+2) 修改`mod_resource/models/netease_models.json`中雪女的json配置,新增frame_anim字段:
+
+
+
+字段中各参数意义如下:
+row: 贴图动画中分了多少行,此例中6行5列即6行,所以此处填6
+col: 贴图动画中分了多少列,此例中6行5列即5列,所以此处填5
+frames: 帧数,此例中为30帧(此数字不一定为row乘col的值,允许贴图留有空白,假如贴图右下角留了一帧的空白区域,此处可填29)
+time: 动画总时长,此例中为5秒,代表5秒内播放完30帧,然后开始循环
+
+注意:
+为了节省运行时的内存,建议资源制作时尽量秉持宽高最邻近二次幂数相乘最小原则。
+所谓最邻近二次幂数,即数字往上寻找最靠近自己的二次幂,二次幂就是1,2,4,8,16,32,64,128,256,512,1024,2048等等。
+比如一张贴图为200 * 200的分辨率,200的最邻近二次幂数为256,则加载入内存后即占用256 * 256的大小,此处为了讲解方便,简化了一些计算细节,读者可简单理解为内存占用与宽高成正比。
+在此例中,我们雪女单帧的图片大小256 * 256,6行5列排放后为1280 * 1536, 宽高最邻近二次幂数分别为2048和2048,所以占用内存为2048 * 2048。
+但假如我们调整一下,用横4,竖8的方式排放,宽高即为1024 * 2048,此方式最高可支持 4 * 8 = 32帧,宽高最邻近二次幂数分别也为1024和2048,占用内存即为1024 * 2048,内存占用可降低到原来的一半!
+
+最后,在代码调用时无须添加额外代码即可生效:
+```python
+modelComp = self.CreateComponent(playerId, 'Minecraft', 'model')
+# 'xuenv'即为netease_models.json里配置的骨骼模型名称
+modelComp.SetModel('xuenv')
+```
+
+
+
+## 7. 模型使用自定义材质及更多贴图
+
+若我们想要实现更为复杂的渲染效果,则可能会需要使用特殊的shader及shader所需要采样的贴图,这时候我们需要修改材质,并配置为使用我们的shader。我们可以在netease_models.json中为模型指定material_cpu和material字段,则骨骼模型将使用指定材质进行渲染。自定义材质都需要先在资源包resource_pack/materials/entity.material中进行定义。
+
+以雪女模型为例:
+
+```json
+"xuenv_1": {
+ "skeleton": "skeleton/xuenv_skeleton.json",
+ "mesh": "mesh/xuenv_mesh_frame.json",
+ "animation": {
+ "idle": "animation/xuenv_animation_idle.json",
+ "walk": "animation/xuenv_animation_idle.json",
+ "skill1": "animation/xuenv_animation_skill1.json",
+ "behited": "animation/gun_animation_idle.json",
+ "prepare": "animation/xuenv_animation_prepare.json",
+ "win": "animation/xuenv_animation_win.json"
+ },
+ // 定义自己的自定义材质
+ "material": "xuenv_custom",
+ // 自定义CPU蒙皮材质,可不进行配置,根据开发者的需要也可配置
+ "material_cpu": "xuenv_custom_cpu",
+ // 这个自定义材质所需要的自定义贴图,最多可配置4张
+ "texture": {
+ //"tex0": "my_custom_texture0",
+ "tex1": "my_custom_texture1",
+ "tex2": "my_custom_texture2",
+ "tex3": "my_custom_texture3",
+ },
+ "frame_anim": {
+ "row": 6,
+ "col": 5,
+ "frames": 30,
+ "time": 5
+ }
+}
+```
+
+`material`:为GPU骨骼渲染的形式下所使用的材质,会全局存储所有骨骼的变换矩阵列表,顶点着色器中每个顶点只存储对应的骨骼下标,在执行过程中用通过该下标从列表中查询得出变换矩阵,因为会有不同的顶点共用相同的骨骼,相比于后文的CPU骨骼蒙皮渲染形式,使用此方式能更为节省GPU带宽。材质的配置可参考官方骨骼模型材质(data/vanilla_netease/materials/entity.material/entity_for_skeleton)。**几乎所有情况下引擎都会使用该形式的材质**。
+
+`material_cpu`:为传统的CPU骨骼蒙皮渲染形式,顶点着色器中每个顶点存储自己的变换矩阵。**目前引擎只会在部分安卓设备且该设备不支持使用大顶点Uniform变量(large vertex shader uniforms)时才会使用的CPU骨骼蒙皮渲染,其它情况下则使用GPU骨骼渲染的渲染形式**。**因此,开发者如无特别需要,可以不定义该材质,也可以直接指定为GPU骨骼渲染材质。**如开发者有需要,则材质的配置可参考官方骨骼模型材质(data/vanilla_netease/materials/entity.material/entity_for_skeleton_cpu),与GPU所使用的的材质不同的是,该材质没有定义`USE_SKINNING`以及`BoneId0`.
+
+两种材质的差别基本如图所示:
+
+
+
+在上面我们为模型配置了自己的材质及shader,接着如果我们的材质及shader需要有更多的自定义贴图,我们就可以增加如下`texture`字段:
+
+```json
+ // 这个自定义材质所需要的自定义贴图,最多可配置4张
+ "texture": {
+ //"tex0": "my_custom_texture0",
+ "tex1": "my_custom_texture1",
+ "tex2": "my_custom_texture2",
+ "tex3": "my_custom_texture3",
+ },
+```
+
+关于自定义贴图,我们一共可以配置且最多配置4张,字段名称分别为`tex0`,`tex1`,`tex2`,`tex3`。 字段的值为贴图的路径,即`textures/models/`路径下的贴图名称,不需要后缀名。
+
+其中`tex0`所配置的贴图会覆盖`mesh`文件中`material`字段所指定的贴图,即上文第3节-指定贴图中所配置的贴图。所以一般不需要额外配置`tex0`。如果`mesh`文件中`material`字段没有配置模型贴图,则可以使用`tex0`来配置。
+
+而`tex1`,`tex2`,`tex3`,则可供开发者按需求进行配置。
+
+在配置了以上贴图后,我们则可以在我们的自定义材质中指定了的fragment shader当中通过声明`LAYOUT_BINDING`使用这些贴图:
+
+```glsl
+LAYOUT_BINDING(0) uniform sampler2D TEXTURE_0; // TEXTURE_0对应tex0, 也对应mesh文件中material字段指定的贴图
+LAYOUT_BINDING(1) uniform sampler2D TEXTURE_1; // TEXTURE_1对应tex1,
+LAYOUT_BINDING(2) uniform sampler2D TEXTURE_2; // TEXTURE_2对应tex2,
+LAYOUT_BINDING(3) uniform sampler2D TEXTURE_3; // TEXTURE_3对应tex3,
+
+void main(){
+ vec4 base_color = texture( TEXTURE_0, uv );
+ vec4 base_color1 = texture( TEXTURE_1, uv );
+ vec4 base_color2 = texture( TEXTURE_2, uv );
+ vec4 base_color3 = texture( TEXTURE_3, uv );
+
+ // do what you want
+ //...
+}
+```
+
+
+
+## 8. 模型使用多个材质及贴图
+
+2.8版本后,可以对同一个骨骼模型的不同骨骼定义不同的材质及所使用的贴图,也可以使用骨骼模型渲染屏蔽接口 SetModelPartVisible 进行指定骨骼的渲染屏蔽。
+
+想要对骨骼模型配置多个材质以及使用骨骼渲染屏蔽功能,需要在netease_models.json中增加如下字段的配置:
+
+1)`useSplitMeshes` bool类型字段,决定了骨骼模型在读取时是否按照指定的骨骼来拆分生成多个mesh,值默认为fasle。当设为true时,读取该模型的时候将按来分`splitBonesGroup`中指定的骨骼来分别生成和存储mesh,而不会按过往方法来合成一整个mesh。骨骼模型渲染时也会变成多个mesh一起渲染,因此如果不是要进行骨骼模型按骨骼进行渲染屏蔽,或者并没有使用到骨骼模型多材质功能时,不要设置为true。
+
+2)`splitBonesGroup` 字典类型字段,可以指定拆分的骨骼名称,以及这个骨骼所使用的材质及这个材质所需要的贴图。指定后,骨骼模型将拆分为本体模型以及这些骨骼各自所组成的模型。
+
+以雪女模型为例:
+
+```json
+ "xuenv_1": {
+ "skeleton": "skeleton/xuenv_skeleton.json",
+ "mesh": "mesh/xuenv_mesh_frame.json",
+ "animation": {
+ "idle": "animation/xuenv_animation_idle.json",
+ "walk": "animation/xuenv_animation_idle.json",
+ "skill1": "animation/xuenv_animation_skill1.json",
+ "behited": "animation/gun_animation_idle.json",
+ "prepare": "animation/xuenv_animation_prepare.json",
+ "win": "animation/xuenv_animation_win.json"
+ },
+ // 定义本体模型的自定义材质
+ "material": "xuenv_custom",
+ "material_cpu": "xuenv_custom_cpu",
+ "texture": {
+ //"tex0": "my_custom_texture0",
+ "tex1": "my_custom_texture1",
+ "tex2": "my_custom_texture2",
+ "tex3": "my_custom_texture3",
+ },
+ "frame_anim": {
+ "row": 6,
+ "col": 5,
+ "frames": 30,
+ "time": 5
+ },
+ // 设置useSplitMeshes为true,设置后骨骼模型将按splitBonesGroup中的骨骼来拆分渲染。
+ "useSplitMeshes": true,
+ // 指定需要分离出来的骨骼名称,指定后,骨骼模型将拆分为本体模型以及这些骨骼各自所组成的模型。
+ // 骨骼名称需要与该骨骼模型的"skeleton"所指定的skeleton.json文件中存在的骨骼名称一致,大小写一致,否则无效。
+ // 可以对分离出来的骨骼指定自定义材质及所使用的贴图。
+ "splitBonesGroup": {
+ "Bone007":{
+ // material 如果没有定义,则使用本体模型的材质
+ // texture 如果没有定义,则该骨骼使用骨骼模型"mesh"字段所指定的mesh.json文件中该骨骼所属的mesh中"material"字段所定义的贴图路径,如果这个也没有,则使用本体模型的贴图
+ },
+ "Bip001 Head":{
+ // 这个骨骼模型的本体模型使用了frame帧动画贴图,如果想要这个骨骼也使用同样的帧动画贴图,为了保证帧动画贴图显示正常,则可以为这个骨骼的贴图tex0指定同样的帧动画贴图,如下:
+ "texture": {
+ "tex0": "xuenv-1"
+ }
+ // 当然也可以不用指定tex0贴图。不指定帧动画贴图的情况下,如果想要这个骨骼也显示跟本体模型同样的帧动画效果,则请保证mesh.json中所有包含这个骨骼的mesh的"material"字段都定义了相同的帧动画贴图。
+ },
+ // 雪女模型的身躯骨骼,我们为这个骨骼指定自定义的材质
+ "Bip001 Spine": {
+ // 自定义的材质,材质的定义在资源包/materials/entity.material中定义
+ "material": "xuenv_special",
+ // 自定义CPU蒙皮材质,可根据需要配置
+ "material_cpu": "xuenv_special",
+ // 该材质里的shader所使用的到的贴图名称,不需要后缀名,最多为4张。贴图放置于资源包/textures/models中。
+ // 如只需使用1张,则定义"tex0"即可,使用2张,则定义"tex0"及"tex1",如此类推。"tex0"对应shader中的TEXTURE_0, "tex1"对应shader中的TEXTURE_1,如此类推。
+ "texture": {
+ "tex0": "special_1",
+ "tex1": "special_2",
+ "tex2": "special_3",
+ "tex3": "special_4"
+ }
+ }
+ }
+ }
+```
+
+骨骼的材质会按照如下顺序来优先适用:
+
+(1)是否指定了`material`,如果有,则该骨骼优先适用`material`中指定的材质;
+
+(2)如果没有指定`material`,则该骨骼采用与本体模型相同的材质。
+
+骨骼的贴图会按照如下顺序来优先适用:
+
+(1)是否指定了`texture`,如果有,则该骨骼会优先适用`texture`中定义的贴图,至于这些贴图如何被使用,则由自定义材质中的shader来决定。
+
+(2)如果没有指定`texture`,则该骨骼优先适用骨骼模型的mesh.json文件中该骨骼所属的mesh中"material"字段指定的贴图。
+
+(3)如果以上均没有,则使用本体模型的贴图。
+
+经过如上配置后,如果在游戏中实时隐藏某个骨骼,则可以调用 SetModelPartVisible :
+
+```python
+import mod.client.extraClientApi as clientApi
+comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
+modelId = comp.SetModel("xuenv_1")
+# 屏蔽指定骨骼
+print comp.SetModelPartVisible(modelId, "Bip001 Head", False)
+```
+
+
+
+## 9.骨骼模型自定义多pass
+
+
+2.8版本开放了自定义多pass的特性,目前开发者可以通过对骨骼模型配置多pass材质,实现更多效果。开发者仅需修改`netease_models.json`中的模型配置,将模型配置中的`material`字段配置成数组即可:
+
+```json
+{ // netease_models.json
+ "model_example": {
+ "dy_load": true,
+ "mesh": "mesh/model_example_mesh.json",
+ "skeleton": "skeleton/model_example_skeleton.json",
+ "material": ["entity_for_skeleton", "netease_drawline_example"] // ****多pass材质数组****
+ }
+}
+```
+可以看到模型`model_example`中的`material`字段被配置为了由两个材质组成的数组,第一个材质是网易骨骼模型材质`entity_for_skeleton`,第二个材质是2.8新增的内置描边材质`netease_drawline_example`。
+在渲染模型时,引擎会**按顺序**渲染配置中的材质数组,在这个例子中,模型`model_example`会首先使用材质`entity_for_skeleton`渲染一次,再使用材质`netease_drawline_example`渲染一次。
+
+详细示例可参考[多pass演示:描边效果](../7-材质与着色器/4-材质实战.md#自定义多pass)。
+
+
+
+## 10.支持半透明渲染的材质
+
+骨骼模型在默认情况下使用不透明材质进行渲染。片段着色器输出中gl_FragColor的第四个参数alpha在不透明渲染中并没有效果,即gl_FragColor.a无论是什么值都不影响最终渲染效果。
+开启半透明渲染之后,gl_FragColor.a代表透明度,范围为[0.0, 1.0], 1.0代表完全不透明,0.0代表完全透明看不见。开启方式如下,只需要在材质的定义中声明如下部份即可:
+
+
+
+Blending代表使用混合模式进行渲染,blendSrc代表使用SourceAlpha作为混合源因子, blendDst代表使用OneMinusSrcAlpha作为目标混合因子。
+
+关于混合因子说明可看[材质配置说明](../7-材质与着色器/3-材质配置说明.md#材质属性)中关于Blend 半透明对象颜色混合的说明。
+
+接下来,我们尝试修改gl_FragColor.a进行测试,修改为透明度0.5:
+
+
+
+修改完成后游戏中该骨骼模型即会出现半透明效果:
+
+
+
+注意:因为半透明材质无法通过深度检测优化性能,所以尽量不要过多使用,不然会造成一定渲染压力。
\ No newline at end of file
diff --git a/mcguide/16-美术/6-模型和动作/05-原版模型的使用.md b/mcguide/16-美术/6-模型和动作/05-原版模型的使用.md
new file mode 100644
index 0000000..26f7e15
--- /dev/null
+++ b/mcguide/16-美术/6-模型和动作/05-原版模型的使用.md
@@ -0,0 +1,66 @@
+---
+front:
+hard: 入门
+time: 10分钟
+---
+
+# 原版模型的使用
+
+## 导入前的准备
+
+原版模型使用Blockbench制作,制作完成后需要导出三个文件:
+
+1. 以.geo.json结尾的模型配置文件
+2. 以.animation.json结尾的动画配置文件(可选)
+3. 以.png结尾的模型贴图文件(可选)
+
+将这三个文件保存在同一个文件夹中,并且尽量以相同的文件名命名这些文件。例如我们需要导入蜘蛛精的原版模型文件,就需要将它们命名为:
+
+
+
+## 将模型导入编辑器
+
+我们点击资源管理器目录上方的资源导入按钮,在下拉菜单中选中【原版生物模型】。
+
+
+
+选择刚才保存原版模型的文件夹,即会弹出下面这个窗口:
+
+
+
+1. 模型ID:为导入的模型取名,仅限 **小写** 英文字母和数字;
+2. 模型贴图:默认会选择当前文件夹下的.png文件作为贴图,可点击【选择图片】按钮更换为其他文件。如果当前模型不需要贴图,则可不填写;
+3. 模型动作(可选):默认会选择当前文件夹下的.animation.json文件。如果当前模型不需要动作文件,则可不填写。
+> 注意:动作文件里的动作id请注意不能是中文和大写字符,否则无效。
+
+确认填写无误后,即可点击蓝色【确定】按钮导入模型。导入后,
+1. 我们可以在资源包路径下的models/entity路径下找到刚刚导入的zhizhujing.geo.json文件。
+2. 其动作文件被放置在资源包路径下的animations文件夹,
+3. 贴图文件被放置在资源包路径下的textures/entity文件夹,
+4. 同时会在animation_controllers下生成一个动画控制器供在编辑器播放使用。**如果不熟悉mod制作请勿随意修改**,如果不小心修改了导致动画播放不了,**请重新导入**。
+
+> 【注意】
+> 1. 导入的动作名称不能包含大写字母,否则编辑器会将其自动改为小写字母再导入。
+> 2. 引擎有时会因为缓存资源的问题,导致模型无法正常显示,可点击挂接面板下的刷新按钮,手动刷新下。
+
+
+
+## 在特效编辑器中预览模型
+
+我们切换到特效编辑器,将左侧模型挂接面板的主角模型通过下拉菜单替换成我们刚刚导入的蜘蛛精模型,即可看到模型已导入成功。
+
+
+
+在特效编辑器中,我们可以看到模型的动作、特效挂点,并通过时间轴控制模型动作的播放。想要原版模型上挂接微软粒子,可参见对应的指南文档。
+
+
+
+> 【注意】 当前并不支持在特效编辑器中修改模型的挂点数量、位置等,需要在模型制作的时候在blockbench中为其添加好挂点,调整好挂点位置,再导入到编辑器中使用。
+
+## 将原版模型应用到实体预设
+
+现在,编辑器支持了将原版模型直接应用到实体预设上。
+
+我们在预设编辑器中打开需要修改的实体模型,然后在右侧的属性面板中找到【资源包组件】,把其中的【模型】和【纹理】都替换成先前导入的原版模型,然后点击上方的【刷新所有属性】按钮,即可看到当前实体预设的模型和纹理都被替换成了之前导入的蜘蛛精模型。
+
+
\ No newline at end of file
diff --git a/mcguide/16-美术/6-模型和动作/10-模型输出规范.md b/mcguide/16-美术/6-模型和动作/10-模型输出规范.md
new file mode 100644
index 0000000..b6c3058
--- /dev/null
+++ b/mcguide/16-美术/6-模型和动作/10-模型输出规范.md
@@ -0,0 +1,87 @@
+---
+front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/model_face_config.25817915.png
+hard: 入门
+time: 15分钟
+---
+
+# 我的世界模型导出规范
+
+推荐软件: 3dMax 2014
+
+
+## 系统单位设置
+
+
+
+
+## 模型朝向
+
+
+
+
+## 贴图
+
+只支持一张贴图,且贴图的名称必须为英文
+
+
+## 顶点
+
+每个长方体通常是 8 个,整个模型控制在 300 个顶点,特殊复杂模型可以在 1000 以内
+
+
+## 输出检查
+
+1. 属性中将模型设置为背面消隐,查看模型是否有反面,如果有的话需要反相(flip)。
+
+ 
+ 
+
+2. Reset Xform(多点击几次,然后塌陷)
+
+ 
+
+3. Mesh Select(与 4 一起,点击完后,不用操作,直接塌陷)
+
+4. STL Check,最终转化为 Poly 模型输出,此步骤可避免模型在游戏中显示出错
+ 
+
+
+## 蒙皮
+
+1. 骨骼架设使用纯bone
+2. 骨骼控制在20根以内,最多不能超过50
+3. 需要添加 root,up,down 3根骨骼
+ - root,是质心的父级,位移旋转都要归于坐标原点(0.0)
+ - up,控制上半身,质心的子级,身体的父级
+ - down,控制下半身,质心的子级,双脚的父级
+4. 所有的骨骼都要有链接,(武器挂件坐骑等都要链接给相应的手,质心等位子,可使用link)
+5. 蒙皮选项当中的高级参数中,有个骨骼影响限制,需要调为 1,如图所示
+
+ 
+
+
+## 动作输出
+
+1. 输出文件版本为 MAX2014
+2. 输出文件命名为英文,文件需要输出FBX。
+3. 输出文件需要塌陷骨骼动画
+4. root,up,down骨骼不可以有动画
+5. 缩放动画必须用等比缩放,且不能有单轴向缩放
+
+
+## FBX输出设置
+
+输出设置如下图所示:
+
+
+
+
+
+
+
+
+## 注意事项
+
+1. 模型制作中,避免使用镜像或者对称!
+2. 如果模型出现法线问题,将法线出错的位置选择并反相(flip)即可。
+3. 模型当中不能有任何的中文!
diff --git a/mcguide/16-美术/6-模型和动作/11-原版模型转换工具.md b/mcguide/16-美术/6-模型和动作/11-原版模型转换工具.md
new file mode 100644
index 0000000..311d60c
--- /dev/null
+++ b/mcguide/16-美术/6-模型和动作/11-原版模型转换工具.md
@@ -0,0 +1,54 @@
+---
+front:
+time: 15分钟
+---
+
+# 原版模型转换工具使用说明
+## 工具介绍
+经过前面几篇文档的学习,开发者们都了解了原版模型和骨骼模型的区别和制作、使用技巧,原版模型容易上手,制作的模型风格更符合MC的风格,骨骼模型较为复杂,但能通过SDK接口实现更精美的动作表现。
+
+为了降低开发者使用两种模型格式的门槛,提高开发者的开发效率,我的世界开发工作台提供了原版模型转换工具,开发者可通过此工具**将原版模型转换为骨骼模型**,接下来就详细介绍下该工具的使用方法:
+1. 登录我的世界开发工作台,依次点击创作→工具箱→原版模型转换工具:
+
+
+
+1. 点击**导入原版模型**按钮,在弹出的对话框选择原版模型所在的文件夹。
+
+
+
+2. 点击确定后,工具便会自动开始转换,并将转换结果展示到下方的列表中,对于转换成功后的模型,可点击右侧的**输出目录**按钮打开存放转换后的骨骼模型的文件夹。
+
+
+
+3. 对于转换失败的模型,你可以点击**查看日志**按钮,查看具体报错日志,调整完模型后,点击**重新导入**按钮重试。
+
+
+
+5. 同样,你也可以点击**删除**按钮删除本条转换记录,注意,此操作不会删除源文件和输出文件夹。
+
+
+
+## 骨骼模型使用
+1. 转换后的骨骼模型会按照下列结构存放:
+
+
+
+2. 可以在编辑器中进行导入,如下图点击骨骼模型(json):
+
+
+
+3. 选择输出目录中的`netease_models.json`文件,即可导入转换后的骨骼模型,并在特效编辑器中查看模型。
+
+
+
+> 有关骨骼模型使用的更多说明可以参考[这篇文档](./04-骨骼模型的使用.md)
+
+## 注意事项
+1. 同一个原版模型的所有json文件需要放在同一个文件夹下,导入时选择该文件夹。
+2. 模型文件(.geo.json)、动作文件(.animation.json)以及贴图(.png)必须保证同时满足下列条件:
+ 1. 名称保持一致
+ 2. 名称不含中文
+ 3. 名称不含特殊符号
+3. 暂不支持一个模型(.geo.json)对应多个动作文件(.animation.json)和多个贴图的情况。
+
+5. 导出后的模型也需要满足从[模型输出规范](./10-模型输出规范.md),否则可能会产生异常,例如骨骼数不能超过50。
diff --git a/mcguide/16-美术/6-模型和动作/images/bb1.png b/mcguide/16-美术/6-模型和动作/images/bb1.png
new file mode 100644
index 0000000..85b3771
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2.png b/mcguide/16-美术/6-模型和动作/images/bb2.png
new file mode 100644
index 0000000..8d8adb9
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2fbx1.png b/mcguide/16-美术/6-模型和动作/images/bb2fbx1.png
new file mode 100644
index 0000000..1fe7381
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2fbx1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2fbx2.png b/mcguide/16-美术/6-模型和动作/images/bb2fbx2.png
new file mode 100644
index 0000000..edbcdd3
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2fbx2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2fbx3.png b/mcguide/16-美术/6-模型和动作/images/bb2fbx3.png
new file mode 100644
index 0000000..adb9909
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2fbx3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2fbx4.png b/mcguide/16-美术/6-模型和动作/images/bb2fbx4.png
new file mode 100644
index 0000000..73c5777
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2fbx4.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2fbx5.png b/mcguide/16-美术/6-模型和动作/images/bb2fbx5.png
new file mode 100644
index 0000000..c0988b8
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2fbx5.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2fbx6.png b/mcguide/16-美术/6-模型和动作/images/bb2fbx6.png
new file mode 100644
index 0000000..fbdb51d
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2fbx6.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2fbx7.png b/mcguide/16-美术/6-模型和动作/images/bb2fbx7.png
new file mode 100644
index 0000000..88158b0
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2fbx7.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb2fbx8.png b/mcguide/16-美术/6-模型和动作/images/bb2fbx8.png
new file mode 100644
index 0000000..deb193f
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb2fbx8.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb3.png b/mcguide/16-美术/6-模型和动作/images/bb3.png
new file mode 100644
index 0000000..984876e
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb5.png b/mcguide/16-美术/6-模型和动作/images/bb5.png
new file mode 100644
index 0000000..335a484
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb5.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb6.png b/mcguide/16-美术/6-模型和动作/images/bb6.png
new file mode 100644
index 0000000..69d4949
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb6.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/bb7.png b/mcguide/16-美术/6-模型和动作/images/bb7.png
new file mode 100644
index 0000000..1d20aad
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/bb7.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/check_notice_1.png b/mcguide/16-美术/6-模型和动作/images/check_notice_1.png
new file mode 100644
index 0000000..ceed196
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/check_notice_1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/check_notice_2.png b/mcguide/16-美术/6-模型和动作/images/check_notice_2.png
new file mode 100644
index 0000000..4264c7d
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/check_notice_2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/check_notice_3.png b/mcguide/16-美术/6-模型和动作/images/check_notice_3.png
new file mode 100644
index 0000000..fbb98c8
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/check_notice_3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/check_notice_4.png b/mcguide/16-美术/6-模型和动作/images/check_notice_4.png
new file mode 100644
index 0000000..23f3f91
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/check_notice_4.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/fbx_output_1.png b/mcguide/16-美术/6-模型和动作/images/fbx_output_1.png
new file mode 100644
index 0000000..f7e749e
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/fbx_output_1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/fbx_output_2.png b/mcguide/16-美术/6-模型和动作/images/fbx_output_2.png
new file mode 100644
index 0000000..637cbb5
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/fbx_output_2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/fbx_output_3.png b/mcguide/16-美术/6-模型和动作/images/fbx_output_3.png
new file mode 100644
index 0000000..90cd052
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/fbx_output_3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/model_face_config.png b/mcguide/16-美术/6-模型和动作/images/model_face_config.png
new file mode 100644
index 0000000..77a1eb5
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/model_face_config.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/model_unit_config.png b/mcguide/16-美术/6-模型和动作/images/model_unit_config.png
new file mode 100644
index 0000000..84da068
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/model_unit_config.png differ
diff --git a/mcguide/16-美术/6-模型和动作/images/notice_cover.png b/mcguide/16-美术/6-模型和动作/images/notice_cover.png
new file mode 100644
index 0000000..4d52cb5
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/images/notice_cover.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/anim/reg4-1.png b/mcguide/16-美术/6-模型和动作/picture/anim/reg4-1.png
new file mode 100644
index 0000000..e4fe2fb
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/anim/reg4-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/anim/reg4-2.png b/mcguide/16-美术/6-模型和动作/picture/anim/reg4-2.png
new file mode 100644
index 0000000..60b2b2a
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/anim/reg4-2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/anim/reg4-3.png b/mcguide/16-美术/6-模型和动作/picture/anim/reg4-3.png
new file mode 100644
index 0000000..11e9ff3
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/anim/reg4-3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/anim/reg4-4.png b/mcguide/16-美术/6-模型和动作/picture/anim/reg4-4.png
new file mode 100644
index 0000000..eceefc1
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/anim/reg4-4.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/add_group.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/add_group.png
new file mode 100644
index 0000000..bc30f21
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/add_group.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/blockbench.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/blockbench.png
new file mode 100644
index 0000000..5eb65c8
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/blockbench.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/create_animate.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/create_animate.png
new file mode 100644
index 0000000..5b6f445
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/create_animate.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit.png
new file mode 100644
index 0000000..a216733
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit_animate.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit_animate.png
new file mode 100644
index 0000000..a1c98ce
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit_animate.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit_animate1.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit_animate1.png
new file mode 100644
index 0000000..71145d7
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/edit_animate1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/export_animate.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/export_animate.png
new file mode 100644
index 0000000..53fb423
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/export_animate.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/export_model.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/export_model.png
new file mode 100644
index 0000000..c487b06
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/export_model.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/import_texture.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/import_texture.png
new file mode 100644
index 0000000..a25516a
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/import_texture.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/new_model.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/new_model.png
new file mode 100644
index 0000000..34c6c13
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/new_model.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/setting.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/setting.png
new file mode 100644
index 0000000..9b6702b
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/setting.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/bbmodel/uv_texture.png b/mcguide/16-美术/6-模型和动作/picture/bbmodel/uv_texture.png
new file mode 100644
index 0000000..afac9b0
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/bbmodel/uv_texture.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_chaoxiang.png b/mcguide/16-美术/6-模型和动作/picture/blender_chaoxiang.png
new file mode 100644
index 0000000..2c1e271
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_chaoxiang.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_faxiang.png b/mcguide/16-美术/6-模型和动作/picture/blender_faxiang.png
new file mode 100644
index 0000000..ab4b9ff
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_faxiang.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step1.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step1.png
new file mode 100644
index 0000000..1a8599c
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step10.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step10.png
new file mode 100644
index 0000000..02cd513
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step10.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step11.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step11.png
new file mode 100644
index 0000000..301cb92
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step11.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step12.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step12.png
new file mode 100644
index 0000000..c3afcb5
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step12.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step13.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step13.png
new file mode 100644
index 0000000..34ee60b
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step13.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step2.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step2.png
new file mode 100644
index 0000000..030aef3
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step3.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step3.png
new file mode 100644
index 0000000..b2f0082
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step4.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step4.png
new file mode 100644
index 0000000..3b3c2d6
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step4.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step5.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step5.png
new file mode 100644
index 0000000..ab3c880
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step5.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step6.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step6.png
new file mode 100644
index 0000000..f88c18e
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step6.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step7.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step7.png
new file mode 100644
index 0000000..2f69692
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step7.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step8.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step8.png
new file mode 100644
index 0000000..e857f0b
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step8.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_make_step9.png b/mcguide/16-美术/6-模型和动作/picture/blender_make_step9.png
new file mode 100644
index 0000000..8be748d
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_make_step9.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_mengpi1.png b/mcguide/16-美术/6-模型和动作/picture/blender_mengpi1.png
new file mode 100644
index 0000000..e6b2187
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_mengpi1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_mengpi2.png b/mcguide/16-美术/6-模型和动作/picture/blender_mengpi2.png
new file mode 100644
index 0000000..a52c2bf
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_mengpi2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_mengpi3.png b/mcguide/16-美术/6-模型和动作/picture/blender_mengpi3.png
new file mode 100644
index 0000000..6c78ce5
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_mengpi3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/blender_notice2.png b/mcguide/16-美术/6-模型和动作/picture/blender_notice2.png
new file mode 100644
index 0000000..75229c8
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/blender_notice2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv.png b/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv.png
new file mode 100644
index 0000000..71fc8c3
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_frames.gif b/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_frames.gif
new file mode 100644
index 0000000..a38e1d5
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_frames.gif differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_frames.png b/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_frames.png
new file mode 100644
index 0000000..8838745
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_frames.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_json.png b/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_json.png
new file mode 100644
index 0000000..36da572
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/frame_anim/xuenv_json.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-1-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-1-1.png
new file mode 100644
index 0000000..ecb9b77
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-1-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-2-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-2-1.png
new file mode 100644
index 0000000..2b9f279
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-2-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-1.png
new file mode 100644
index 0000000..893ceca
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-2.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-2.png
new file mode 100644
index 0000000..9b4ed52
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-3.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-3.png
new file mode 100644
index 0000000..5a08458
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-4.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-4.png
new file mode 100644
index 0000000..77cd909
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-4-4.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-1.png
new file mode 100644
index 0000000..ab62c11
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-1.png
new file mode 100644
index 0000000..8482455
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-2.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-2.png
new file mode 100644
index 0000000..f948cfb
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-3.png b/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-3.png
new file mode 100644
index 0000000..cb9437b
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg1-5-3-3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-1.png
new file mode 100644
index 0000000..c123443
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-2.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-2.png
new file mode 100644
index 0000000..27fb2d5
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-3.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-3.png
new file mode 100644
index 0000000..3caa623
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-4.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-4.png
new file mode 100644
index 0000000..1b7f3b7
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-4.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-5.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-5.png
new file mode 100644
index 0000000..964ee4a
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-5.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-6.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-6.png
new file mode 100644
index 0000000..4420e39
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-6.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-7.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-7.png
new file mode 100644
index 0000000..1b49af6
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-1-7.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-1.png
new file mode 100644
index 0000000..46a4df1
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-2.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-2.png
new file mode 100644
index 0000000..099ea8b
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-3.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-3.png
new file mode 100644
index 0000000..a370abc
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-2-3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-1.png
new file mode 100644
index 0000000..c5b8e8b
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-2.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-2.png
new file mode 100644
index 0000000..06ff785
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-3.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-3.png
new file mode 100644
index 0000000..aee4766
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-4.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-4.png
new file mode 100644
index 0000000..d101aa8
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-4.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-5.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-5.png
new file mode 100644
index 0000000..f04e32f
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-5.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-6.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-6.png
new file mode 100644
index 0000000..8dfc57f
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-3-6.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-1.png
new file mode 100644
index 0000000..5d0f588
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-2.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-2.png
new file mode 100644
index 0000000..745632c
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-2.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-3.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-3.png
new file mode 100644
index 0000000..5715b27
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-3.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-4.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-4.png
new file mode 100644
index 0000000..6a934a3
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-4.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-5.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-5.png
new file mode 100644
index 0000000..de5538c
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-4-5.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/reg2-5-1.png b/mcguide/16-美术/6-模型和动作/picture/model/reg2-5-1.png
new file mode 100644
index 0000000..631e7f2
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/reg2-5-1.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend.png b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend.png
new file mode 100644
index 0000000..ad0bfcb
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_def.png b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_def.png
new file mode 100644
index 0000000..b7b883a
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_def.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_factor.png b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_factor.png
new file mode 100644
index 0000000..d5cee23
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_factor.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_frag.png b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_frag.png
new file mode 100644
index 0000000..06bba55
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_blend_frag.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/xuenv_material.png b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_material.png
new file mode 100644
index 0000000..95094d6
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_material.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/model/xuenv_model.png b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_model.png
new file mode 100644
index 0000000..872e033
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/model/xuenv_model.png differ
diff --git a/mcguide/16-美术/6-模型和动作/picture/unit_set.png b/mcguide/16-美术/6-模型和动作/picture/unit_set.png
new file mode 100644
index 0000000..49d40ac
Binary files /dev/null and b/mcguide/16-美术/6-模型和动作/picture/unit_set.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/1-材质介绍与着色器入门.md b/mcguide/16-美术/7-材质与着色器/1-材质介绍与着色器入门.md
new file mode 100644
index 0000000..ce6e88e
--- /dev/null
+++ b/mcguide/16-美术/7-材质与着色器/1-材质介绍与着色器入门.md
@@ -0,0 +1,146 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/3541655a-7205-4609-b118-be8d6dbb84bd.png
+hard: 入门
+time: 15分钟
+selection: 38
+---
+
+# 材质与着色器介绍
+
+## 前言
+
+本文将介绍游戏材质和着色器的基本概念,以及MC游戏中使用的着色器的基本编写与使用方式
+
+
+## 材质和着色器
+
+``材质``(material)定义了游戏物体的画面表现,用来描述一个游戏内的物体应该如何被渲染,其中的信息包括物体使用的纹理、**着色器**、采样方式、是否进行透明混合以及面片的剔除模式等。
+``着色器``(shader)是一种依附于材质的渲染程序,用于具体实现材质在渲染时的某些逻辑,一般包括动画、着色、发光以及半透明等效果。
+例如,一个砖块的材质一般需要定义一个不透明材质,规定这个材质仅使用一张纹理(一般是砖块贴图),并指定一个着色器用来渲染这个砖块。砖块着色器会根据砖块的模型数据,结合砖块贴图、砖块位置以及场景光照等信息,计算出砖块在屏幕上对应像素的颜色。
+
+
+
+
+
+
+
+
+## 在MC中定义材质
+
+MC使用json来定义材质信息,这些信息包括使用哪些shader、启用哪些宏定义、启用哪些片元测试等。不同类型的材质会分开存放在不同的材质文件中,例如地形相关的材质会放在terrain.material文件中,实体、骨骼模型相关的材质会放在entity.material文件中,具体的对应关系可以参考[内置材质清单](./2-内置材质清单.md),具体的材质配置格式可以参考[材质配置说明](./3-材质配置说明.md)或者参照具体的.material文件。
+
+## OpenGL与GLSL
+
+目前MC的渲染(非渲染龙)是基于OpenGL实现的,不同平台的不同设备支持的OpenGL版本各有不同,越高级的OpenGL版本能使用的特性就越多,但因此兼容的设备就越少,开发者应考虑shader所使用的特性是否能够兼容目标设备。
+
+MC中的shader使用glsl进行编写,这是一种较为简单的类C语言,对于C或者C族系语言有所熟悉的开发者可以很快掌握。具体的glsl语法可以在参考[图形管线与GLSL简单入门](./6-图形管线与GLSL简单入门.md)。
+
+## MC材质SDK接口
+
+我的世界中国版允许使用python接口对材质产生运行时影响,涉及模块包括`后处理`、`网易骨骼模型`以及`原版模型`等,具体的使用方式我们将在后面的文档中进行举例介绍,更详细的说明可以在API文档页面中进行查询。后续我们会开发并开放更多有关材质的SDK接口给开发者使用。
+
+## 材质中的宏
+
+开发者可以自定义shader宏,可以通过在材质定义的`defines`字段中进行添加:
+```json
+"terrain_blend_far:terrain_blend": {
+ "+defines": [ "FOG" ]
+}
+```
+这里为`terrain_blend_far`材质增加了宏定义`FOG`,类似于C语言,我们可以在shader中使用`ifdef`或者`ifndef`针对`FOG`进行宏判断并做一些特殊逻辑处理:
+```opengl
+#ifndef FOG
+ color.rgb += FOG_COLOR.rgb * 0.000001;
+#endif
+```
+
+## 头文件
+
+MC中的shader允许使用头文件,只要将头文件拓展名改为`.h`并放在`shaders/glsl`目录下,shader代码就可以引用这个头文件:
+```opengl
+#include "uniformWorldConstants.h"
+```
+
+
+
+## Uniform
+
+在shader中除了使用顶点属性以外,引擎还会通过uniform变量向shader中传递很多有用的数据,大部份shader都依赖一些uniform变量进行计算。同时,开发者可以利用SetExtraUniformValue接口设置我们预留的Uniform变量值来实现效果。引擎内置的uniform变量定义在各个.h头文件中,下面将对常用的头文件及其中的uniform变量进行说明。
+
+### uniformWorldConstants.h
+
+生效时机:在渲染场景对象的shader中可以使用,里面包含当前场景相机对应的变换矩阵
+```opengl
+MAT4 WORLDVIEWPROJ : mvp矩阵乘积,用于把模型空间的坐标转化为裁剪空间坐标
+MAT4 WORLD : 世界矩阵,用于把模型空间的坐标转化为世界坐标
+MAT4 WORLDVIEW : mv矩阵乘积,用于把模型空间的坐标转化为视口空间的坐标
+MAT4 PROJ : 投影矩阵,用于把视口空间的坐标转化为裁剪空间坐标
+```
+
+### uniformPerFrameConstants.h
+
+生效时机:每帧更新,所有shader中都可以使用
+```opengl
+vec3 VIEW_POS : 相机位置
+float TIME : 游戏启动到现在经过的时间,可以用于做一些动画,为了避免无限增长带来较大浮点误差,会取模210,处理数值边界的时候需要注意
+vec4 FOG_COLOR : 雾的颜色
+vec2 FOG_CONTROL : 雾生效的距离,FOG_CONTROL.x为最短距离,FOG_CONTROL.y为最远距离
+float RENDER_DISTANCE : 可渲染的最远距离
+float FAR_CHUNKS_DISTANCE : 区块渲染的最远距离(水下和雾会影响区块渲染的最远距离)
+```
+
+### uniformRenderChunkConstants.h
+
+生效时机:渲染地形
+```opengl
+POS4 CHUNK_ORIGIN_AND_SCALE : 基于玩家视角的Chunk的局部位置
+POS4 CHUNK_WORLD_POS_MOD_VALUE : 基于世界坐标的Chunk的世界位置,但由于MC地图很大,所以这里数值会取模128
+float RENDER_CHUNK_FOG_ALPHA : Chunk雾效的透明度
+```
+
+### uniformShaderConstants.h
+
+生效时机:所有shader中都可以使用
+```opengl
+vec4 CURRENT_COLOR : 受群系等因素影响,场景中渲染的对象会对应的明亮两种颜色,这个为明亮的颜色。其它系统也可能复用此值作一些颜色传递
+vec4 DARKEN : 受群系等因素影响,场景中渲染的对象会对应的明亮两种颜色,这个为暗的颜色。其它系统也可能复用此值作一些颜色传递
+vec3 TEXTURE_DIMENSIONS :当前渲染使用的第一张贴图的尺寸,常为图集贴图,x,y,z分别为宽,高,当前所处在mipmap的哪一级。常用于做抗锯齿处理
+float HUD_OPACITY : 一些ui渲染的透明度会变化,使用此值进行控制
+```
+
+### uniformWeatherConstants.h
+
+生效时机:渲染天气元素的时候生效
+```opengl
+vec4 POSITION_OFFSET : 当前天气渲染用的面片的坐标偏移
+vec4 VELOCITY : 风速
+vec4 ALPHA : 存储当前的光照缩放值
+vec4 VIEW_POSITION : 相对于相机的位置
+vec4 SIZE_SCALE : 粒子大小的缩放值,粒子会根据投影,速度进行一定缩放
+vec4 FORWARD :当前视角的前向位置,一般用于把粒子往前放推一点,保证在相机前面
+vec4 UV_INFO : 渲染时候的贴图的uv
+vec4 PARTICLE_BOX : 播放粒子的区域大小
+```
+
+### uniformEntityConstants.h
+
+生效时机:渲染实体的时候生效
+```opengl
+vec4 OVERLAY_COLOR :覆盖该实体的颜色,例如生物被火烧、受到伤害或者苦力怕膨胀时的颜色。
+vec4 TILE_LIGHT_COLOR : xyz代表光照强度,w代表光照方向。
+vec4 GLINT_COLOR : 附魔颜色
+vec2 UV_OFFSET : 附魔纹理UV偏移
+vec2 UV_ROTATION : 附魔纹理UV旋转
+vec2 GLINT_UV_SCALE : 附魔纹理UV缩放值
+```
+
+### uniformFrameConstants.h
+
+生效时机:每帧更新,所有shader中都可以使用
+```opengl
+float TOTAL_REAL_WORLD_TIME :现实世界的时间流逝,单位为秒,范围为[0, 3600]。
+```
+
+### util.h
+
+封装了抗锯齿的采样函数texture2D_AA
diff --git a/mcguide/16-美术/7-材质与着色器/2-内置材质清单.md b/mcguide/16-美术/7-材质与着色器/2-内置材质清单.md
new file mode 100644
index 0000000..fa05969
--- /dev/null
+++ b/mcguide/16-美术/7-材质与着色器/2-内置材质清单.md
@@ -0,0 +1,276 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# MC内置材质清单
+
+## 前言
+
+本文列出了MC游戏中常用的内置材质,若开发者需要修改使用某些材质,则可参考此文。
+
+## 天空
+
+### sky.material 材质文件
+
+#### sun_moon
+
+太阳和月亮
+
+#### stars
+
+星星
+
+#### cubemap
+
+用于渲染天空的六个面组成的天空盒
+
+#### skyplane
+
+用于渲染上方天空的颜色。游戏里面最上方会放置一个超大圆型网格,平行于地面
+
+#### end_sky
+
+用于渲染末地上方天空的颜色与贴图。游戏里面最上方会放置一个超大圆型网格,平行于地面
+
+### fancy.material 、 sad.material 材质文件
+
+#### clouds
+
+云
+
+## 地形方块(放置在地上的方块)
+
+### terrain.material 材质文件
+
+#### terrain_opaque
+
+不透明地形方块
+
+##### terrain_far
+
+不透明地形方块在远处的时候会使用该材质进行渲染
+
+#### terrain_blend
+
+半透明地形方块材质,例如水,玻璃等
+
+##### terrain_blend_far
+
+半透明方块在远处的时候会使用该材质进行渲染
+
+#### terrain_alpha
+
+一些局部有全透明区域,而且正反面都需要渲染的方块材质,引擎中用到的有铁砧,竹子,铁轨,药水,仙人掌,珊瑚,农作物等等。
+
+##### terrain_alpha_single_side
+
+一些局部有全透明区域,但开启了背面裁剪只渲染一个面的材质,引擎中用到的有信标,胡萝卜,红石比较器,堆肥箱,门,蘑菇等等。
+
+#### terrain_doubleside
+
+目前用于渲染床
+
+#### terrain_opaque_seasons
+
+目前用于渲染上面覆盖有雪的不透明树叶
+
+##### terrain_seasons_far
+
+目前用于渲染远处上面覆盖有雪的不透明树叶
+
+#### terrain_alpha_seasons
+
+目前用于渲染上面覆盖有雪的半透明树叶
+
+##### terrain_seasons_far_alpha
+
+目前用于渲染渲染上面覆盖有雪的半透明树叶
+
+### barrier.material 材质文件
+
+#### barrier
+
+屏障方块
+
+### portal.material 材质文件
+
+#### portal_base
+
+末地传送门
+
+## 非地形方块与实体(手持或者独立在场景中的)
+
+### entity.material 材质文件
+
+#### entity_static
+
+静态实体
+
+#### entity_flat_color_line
+
+用于渲染钓鱼竿的线
+
+#### entity_loyalty_rope
+
+用于渲染拴绳
+
+#### opaque_block 、 opaque_block_color 、 opaque_block_color_uv2
+
+不透明方块渲染
+
+#### alpha_block 、 alpha_block_color
+
+带透明区域的方块
+
+#### map
+
+地图渲染
+
+#### entity_alphablend 、 entity_alphablend_nocolor
+
+带透明度混合的实体对象
+
+#### item_in_hand 、 item_in_hand_multicolor_tint 、 item_in_hand_entity_alphatest_color 、 item_in_hand_glint
+
+用于各种手持物品的渲染
+
+#### moving_block 、 moving_block_seasons 、 moving_block_alpha_seasons 、 moving_block_alpha_single_side 、 moving_block_alpha 、 moving_block_double_side 、 moving_block_blend
+
+用于渲染会动态变化的方块
+
+### 网易扩展 entity.material 材质文件内容
+
+文件位于data、resource_packs、vanilla_netease、materials目录下,主要是添加了骨骼模型渲染用的材质
+
+#### 带有vip字眼的资源
+
+通常为会员材质中使用到的资源,一般效果较好,Shader实现较复杂,可供学习参考
+
+#### entity_for_skeleton 、 entity_for_skeleton_cpu
+
+用于渲染普通的不透明骨骼模型
+
+#### entity_for_skeleton_hide_cpu 、 entity_for_skeleton_hide
+
+用于表现实体隐藏状态,效果是渲染纯色的半透明模型
+
+#### entity_for_skeleton_alpha_cpu 、 entity_for_skeleton_alpha
+
+用于渲染带透明度的骨骼模型
+
+#### entity_for_skeleton_bright 、 entity_for_skeleton_bloom 、 entity_for_skeleton_glint 、 entity_for_skeleton_bloom_glint
+
+某些骨骼模型会使用到各种特殊效果,例如高光,辉光,扫光效果。
+
+#### entity_for_skeleton_frame_ani
+
+用于实现骨骼模型序列帧动画
+
+#### entity_for_skeleton_particle 、 entity_for_skeleton_alpha_particle 、 entity_for_skeleton_bloom_particle 、 entity_for_skeleton_bloom_glint_particle 、 entity_for_skeleton_bright_particle 、 entity_for_skeleton_frame_ani_particle 、 entity_for_skeleton_glint_particle 、 entity_for_skeleton_hide_particle
+
+在上诉5种类型的材质下增加了用于粒子系统的Shader宏定义,可以让粒子系统发射出带有该材质的骨骼模型。
+
+## 粒子
+
+### particles.material 材质文件
+
+#### particles_opaque
+
+引擎原生的不透明粒子
+
+#### particles_alpha
+
+引擎原生的开启了透明度裁剪的粒子
+
+#### particles_blend
+
+引擎原生的带透明度的粒子
+
+#### particles_effects
+
+引擎原生带有特效UV变动效果的开启了透明度裁剪的粒子
+
+#### common_particle、common_particle_add、common_particle_add_texture、common_particle_blend、common_particle_blend_texture
+
+网易粒子系统,自定义粒子特效基本都是使用这些,功能与上述原生粒子相对应。
+
+## 阴影
+
+### shadows.material 材质文件
+
+阴影的渲染使用了Stencil蒙版技术
+
+#### shadow_front 、 shadow_back
+
+在蒙板标记阴影的位置,未进行实际渲染
+
+### shadow_overlay
+
+对蒙板中被标记的位置进行真正的渲染
+
+## UI
+
+### ui3D.material 材质文件
+
+包含场景中对象相关的一些特殊UI,或者天气相关UI的材质
+
+#### selection_XXX
+
+带有selection字眼的基本上都是选中方块或者实体后这个选中效果的渲染
+
+#### selection_box
+
+开启轮廓选择后指向某个对象会显示线框
+
+#### name_tag、name_tag_depth_tested
+
+实体头顶名字背景
+
+#### sign_text、name_text_depth_tested
+
+实体头顶名字文字
+
+#### rain
+
+雨
+
+#### snow
+
+雪
+
+#### lightning
+
+闪电
+
+### ui.material 材质文件
+
+UI界面上使用的UI材质
+
+由于很多UI会使用相同的材质,每个材质可能会在多处进行使用,这里不一一列举每一处地方,这里只举例几个常见UI界面对象使用到的材质
+
+#### 物品快捷栏
+
+ui_textured_and_glcolor
+
+#### 摇杆,上方的菜单按钮,右上方的移动,潜行,飞行等按钮,右下角的跳跃按钮
+
+ui_texture_and_color
+
+#### 背包或物品快捷栏中的物品图标
+
+ui_item
+
+#### 屏幕中心的十字光标
+
+ui_crosshair
+
+#### 加载场景的背景图
+
+ui_cubemap
+
+#### UI上的文字
+
+ui_text
+
diff --git a/mcguide/16-美术/7-材质与着色器/3-材质配置说明.md b/mcguide/16-美术/7-材质与着色器/3-材质配置说明.md
new file mode 100644
index 0000000..d4de362
--- /dev/null
+++ b/mcguide/16-美术/7-材质与着色器/3-材质配置说明.md
@@ -0,0 +1,629 @@
+---
+front:
+hard: 入门
+time: 20分钟
+---
+
+# 材质配置说明
+
+## 前言
+
+本文将详细介绍材质文件的结构与配置方式。
+
+## 材质文件的加载
+
+材质文件存放于资源包的materials文件夹下,我们打开resource_packs\vanilla\materials目录,可看到包含有下面这些文件,这些是微软原生定义的材质文件:
+
+
+
+而resource_packs\vanilla_netease\materials目录下的材质文件,则是网易对原生材质文件的修改与扩充。
+
+下面我们就先以原生微软的材质文件进行讲解,首先,目录下面的文件基本都是以".material"为后缀的文件,除此之外,还有3个重要的json文件,分别是common.json,fancy.json,sad.json。
+
+我们先来看看sad.json和fancy.json,他们是用于控制画质表现的,内部各自定义了一个材质文件列表,fancy.json通常比sad.json多定义几个材质文件,并且会为某些材质文件多添加一些额外的宏,这些宏会使shader采用不同的代码块,实现对画质和性能的控制:
+```json
+[ // sad.json
+ {"path":"materials/sad.material"},
+ {"path":"materials/entity.material"},
+ {"path":"materials/terrain.material"},
+ {"path":"materials/portal.material"},
+ {"path":"materials/barrier.material"},
+ {"path":"materials/wireframe.material"}
+]
+```
+```json
+[ // fancy.json
+ {"path":"materials/fancy.material", "+defines":["FANCY"]},
+ {"path":"materials/entity.material", "+defines":["FANCY"]},
+ {"path":"materials/terrain.material", "+defines":["FANCY"]},
+ {"path":"materials/hologram.material"},
+ {"path":"materials/portal.material", "+defines":["FANCY"]},
+ {"path":"materials/barrier.material"},
+ {"path":"materials/wireframe.material"}
+]
+```
+fancy.json相比sad.json多定义了fancy和hologram两个材质文件,并且为某些材质文件内的所有材质增加了`FANCY`宏。开发者可以在shader中通过`FANCY`宏来选择不同的计算策略:
+```glsl
+#ifdef FANCY
+ // 完整版效果
+#else
+ // 青春版效果
+#endif
+```
+通过游戏内的`设置/视频/精美图像`开关可以实现fancy材质和sad材质的切换。当`精美图像`开关打开时,fancy.json中的材质文件就会生效,反之sad.json中的材质文件就会生效:
+
+
+为了实现更好的表现效果,fancy.json中的材质通常使用较复杂的运算,而sad.json中的材质则通过牺牲渲染表现来换取更好的性能。
+开发者若需要编写开销较大的材质shader,可以考虑利用`FANCY`宏同时编写一个低消耗的sad版本,然后分别把材质分别放在fancy与sad内定义的相应的材质文件中,玩家可以在游戏中通过`精美图像`开关自行控制是否开启相应效果;如果开发者不需要区分材质的性能开销,则可以考虑仅使用common.json,所有在common.json中定义的材质文件都会被加载。
+
+## 材质定义与引用
+
+在此我们将简单介绍MC材质是如何被定义与引用的。
+### 材质定义
+假设有一个开发者自定义的材质文件`example.material`,它的基本格式框架如下:
+```json
+{ // example.material
+ "materials": {
+ "version": "1.0.0", // 表示material文件格式版本 必不可少
+
+ // 材质1
+ "mat_example": {
+ // ...具体的材质定义
+ },
+
+ // 材质2 它引用了mat_example
+ "other_mat:mat_example": {
+ // ...具体的材质定义
+ }
+ }
+}
+```
+可以看到,所有的材质定义都被包含在`materials`这个字段内,并且有一个`version`字段也被包含在`materials`内,用来标识这个材质文件的格式版本。我们还可以注意到这样的字符串:`"other_mat:mat_example"`,它表示材质`other_mat`继承自材质`mat_example`,继承后的材质具有父材质的所有属性,在此基础上,子材质`other_mat`还可以新增属性,或者覆盖父材质中已有的属性。
+接下来看材质`mat_example`的具体配置格式:
+```json
+"mat_example": {
+ "vertexShader": "shaders/glsl/mat_example.vertex",
+ "fragmentShader": "shaders/glsl/mat_example.fragment",
+
+ "+defines": [
+ "USE_SKINNING",
+ "USE_OVERLAY",
+ "NETEASE_SKINNING"
+ ],
+ "+samplerStates": [
+ {
+ "samplerIndex": 0,
+ "textureFilter": "Point"
+ }
+ ],
+ "states": [
+ "Blending",
+ "DisableDepthWrite"
+ ]
+}
+```
+以下是对材质`mat_example`配置的解读:
+* `vertexShader`和`fragmentShader`定义了这个材质使用的顶点着色器和片元着色器的路径,开发者需要自行实现对应的着色器
+* `+defines`定义了材质启用的宏定义,在shader中这些宏定义将会生效
+* `+samplerStates`定义了shader接受的采样纹理列表,纹理个数仅为1,其中`samplerIndex`为0表示材质启用的纹理是`TEXTURE_0`,`textureFilter`指定了纹理采样的过滤方式为点过滤/点滤波
+* `state`定义了材质额外开启的渲染状态,其中的`Blending`表示使用alpha混合,`DisableDepthWrite`表示材质将不会影响屏幕的深度信息。
+
+更具体的材质配置参数可以参考本文档的其余部分。
+
+### 材质引用
+接上节,我们定义了一个名为`mat_example`的自定义材质,根据材质类型不同,引用材质的方式也有所不同。
+#### 网易骨骼模型引用材质
+网易骨骼模型配置写在`vanilla_netease/models/netease_models.json`文件中,开发者可以看到类似这样的模型配置段:
+```json
+"model_name": {
+ "dy_load": true,
+ "mesh": "mesh/model_name_mesh.json",
+ "skeleton": "skeleton/model_name_skeleton.json"
+}
+```
+这段配置没有给出引用的材质名,因此游戏会在渲染这个模型时默认使用`entity_for_skeleton`材质,我们可以增加一个`material`字段,显式地引用我们在`entity.material`文件中自定义的材质:
+```json
+"model_name": {
+ "dy_load": true,
+ "mesh": "mesh/model_name_mesh.json",
+ "skeleton": "skeleton/model_name_skeleton.json",
+ "material": "mat_example"
+}
+```
+除此之外,我们还支持开发者使用多pass特性来加强骨骼模型的渲染效果。假设开发者希望让一个模型在单帧内使用不同材质各渲染一次,则可以将`material`字段值改为数组:
+```json
+"material": ["mat0", "mat1", "mat2"]
+```
+该模型将在每一帧**按顺序**渲染数组中所引用的材质。
+在游戏内调取出这个模型,就可以预览到自定义材质的效果。
+
+> 骨骼模型所引用的材质,其着色器需要支持`NETEASE_SKINNING`宏的功能,具体可以参考`entity_for_skeleton`材质的着色器实现。
+
+#### 原版模型引用材质
+在实体配置文件`vanilla/entity/xxx.entity.json`中,我们可以找到与材质有关的配置内容:
+```json
+{
+ "format_version": "1.8.0",
+ "minecraft:client_entity": {
+ "description": {
+ "identifier": "netease:xxx",
+ "materials": {
+ "default": "xxxxx",
+ ... // 其他材质配置
+ },
+ ... // 其他字段
+ }
+ }
+}
+```
+其中`materials`中的`default`字段,就指定了这个实体在常态下使用的材质,我们可以将这个字段的值修改为我们自定义的材质,让这个实体在渲染时具有我们自定义的效果:
+```json
+"default": "mat_example"
+```
+> 实体模型材质使用的着色器,需要支持`USE_SKINNING`宏,具体可以参考`entity_static_netease`或者`entity_static`材质的实现。
+
+#### 后处理引用材质
+开发者可以在`vanilla_netease/graphics_settings/post_process.json`找到后处理相关配置,在配置文件的`process_array`字段下,我们可以看到若干个后处理的定义,在此以老电视机效果作为例子:
+```json
+{
+ "name": "oldtv",
+ "enable": false,
+ "paras": [
+ { "name": "density", "value": 0.1, "range": [0.0, 1.0] },
+ { "name": "strength", "value": 1.0, "range": [0.0, 1.0] },
+ { "name": "snow_size", "value": 2.0, "range": [0.5, 16.0] },
+ { "name": "noise_fps", "value": 6.0, "range": [0.01, 64.0] },
+ { "name": "black_zone", "value": 0.2, "range": [0.0, 1.0] }
+ ],
+ "pass_array":[ // 后处理pass数组
+ { // 第0个pass
+ "render_target":{
+ "width":1.0,
+ "height":1.0
+ },
+ "material":"old_tv" // 第0个pass使用的材质
+ }
+ ]
+}
+```
+该配置定义了后处理的名称、默认是否开启、着色器参数、后处理pass数组等信息。可以看到,后处理pass数组中的单个pass包含一个`material`字段,这代表了这个pass将使用的材质,我们可以修改它的值,改变这个pass使用的材质。
+
+> 制作后处理材质需要定义某些特殊的材质配置,并且着色器要基于全屏范围进行计算,具体可以参考`vanilla_netease/materials/postprocess.material`中的`oldtv`材质
+
+#### 中国版粒子特效引用材质
+中国版粒子特效可以使用网易MCStudio生成制作。中国版粒子特效具有默认材质,因此在特效配置中并没有显式地记录引用材质的名称。开发者可以在中国版粒子特效中,加入如下字段来改变粒子特效所引用的材质:
+```json
+"materialname": {
+ "value": "my_material"
+}
+```
+
+## 材质属性
+
+我们把所有字段按功能分到以下几类中:
+
+### 渲染状态
+
+#### states
+
+配置渲染环境,可以有以下的值:
+```json
+EnableAlphaToCoverage :半透明对象顺序无关渲染方式的一种,支持MSAA的环境下这个开关才有用,开启后物体边缘会根据透明度作更精确的柔和和过渡,也可用于有大量网格交错重叠的一些复杂场景。
+Wireframe : 绘制线框模式
+Blending : 开启颜色混合模式,常用于渲染半透明对象。声明这个之后通常也需要声明混合因子blendSrc,blendDst
+
+DisableColorWrite : 不往颜色缓冲区写入颜色值,RGBA通道均不写入
+DisableAlphaWrite : 不往颜色缓冲区写入透明度alpha值,允许写入RGB值
+DisableRGBWrite : 不往颜色缓冲区写入透明度RGB值,允许写入Alpha值
+
+DisableDepthTest : 关闭深度测试
+DisableDepthWrite : 关闭深度写入
+
+DisableCulling : 不开启背面剔除,会使模型的三角形无论朝向都会被渲染出来。默认情况下会开启背面剔除,即没有面朝相机的三角形会被剔除。
+InvertCulling :开启正面剔除并且禁用背面剔除,使得朝向相机的三角形被剔除。
+
+StencilWrite :开启蒙版写入
+EnableStencilTest : 开启蒙版测试
+```
+
+### 着色器路径
+
+#### vertexShader
+
+顶点着色器的路径,通常为shaders/glsl/XXX.vertex。
+
+#### vrGeometryShader 或 geometryShader
+
+几何着色器的路径,通常为shaders/glsl/XXX.geometry,移动端用不到,无须考虑修改。
+
+#### fragmentShader
+
+片段着色器的路径,通常为shaders/glsl/XXX.fragment。
+
+### Shader宏定义
+
+#### defines
+
+为使用到的Shader定义宏。为了代码的复用,我们很多不同的材质会使用相同的shader。此时若希望shader里面某处根据当前材质执行不一样的逻辑,则可以通过材质defines声明的宏去做判断。
+我们可以用`entity_for_skeleton`这个材质为例,它定义了USE_SKINNING,USE_OVERLAY,NETEASE_SKINNING三个宏。
+```json
+"+defines": [ "USE_SKINNING", "USE_OVERLAY", "NETEASE_SKINNING" ]
+```
+于是在着色器可以中通过`#ifdef`或`#if`等语句来对宏进行判断并执行不同的逻辑,宏的判断语句是编译期处理的,性能不会因分支而下降:
+```json
+#ifdef NETEASE_SKINNING
+ MAT4 boneMat = transpose(mat3x4ToMat4(BONES_70[int(BONEID_0)]));
+ entitySpacePosition = boneMat * POSITION;
+ entitySpaceNormal = boneMat * NORMAL;
+#else
+ #if defined(LARGE_VERTEX_SHADER_UNIFORMS)
+ entitySpacePosition = BONES[int(BONEID_0)] * POSITION;
+ entitySpaceNormal = BONES[int(BONEID_0)] * NORMAL;
+ #else
+ entitySpacePosition = BONE * POSITION;
+ entitySpaceNormal = BONE * NORMAL;
+ #endif // defined(LARGE_VERTEX_SHADER_UNIFORMS)
+#endif // NETEASE_SKINNING
+```
+
+### 运行时状态
+
+#### depth 深度测试
+
+##### depthFunc
+
+深度检测通过函数,可以使用以下的值:
+```json
+Always : 总是通过
+Equal : 深度值与缓冲区值相等时通过
+NotEqual :深度值与缓冲区值不相等时通过
+Less :深度值小于缓冲区值时通过
+Greater :深度值大于缓冲区值时通过
+GreaterEqual :深度值大于等于缓冲区值时通过
+LessEqual :深度值小于等于缓冲区值时通过
+```
+
+相关联的states渲染环境配置:
+```json
+DisableDepthTest : 关闭深度测试
+DisableDepthWrite : 关闭深度写入
+```
+
+#### Stencil 蒙版测试
+
+##### stencilRef
+与蒙版缓冲区比较或要被写入的值
+
+##### stencilRefOverride
+是否使用缓冲区当前的值作为stencilRef,支持0或1:
+```json
+1 : 使用配置的stencilRef,若配置了stencilRef则stencilRefOverride自动取1
+0 : 使用缓冲区当前的值作为stencilRef,此情况下不配置stencilRef
+```
+
+##### stencilReadMask
+蒙版缓冲区的值与stencilRef值在比较前均会先与stencilReadMask进行位与运算
+
+##### stencilWriteMask
+stencilRef值在写入蒙版缓冲区前会与stencilWriteMask进行位与运算
+
+##### frontFace, backFace
+配置网格正面或反面使用什么蒙版测试函数,另外,判断的顺序为先蒙版检测,再深度检测,需要配置以下操作:
+```json
+ stencilFunc : stencilRef与蒙版缓冲区比较时使用的方法,支持下面的值:
+ Always : 总是通过
+ Equal : stencilRef与缓冲区值相等时通过
+ NotEqual :stencilRef与缓冲区值不相等时通过
+ Less :stencilRef小于缓冲区值时通过
+ Greater :stencilRef大于缓冲区值时通过
+ GreaterEqual :stencilRef大于等于缓冲区值时通过
+ LessEqual :stencilRef小于等于缓冲区值时通过
+
+ stencilFailOp :stencilFunc比较函数返回失败的时候执行的处理,支持下面的值:
+ Keep : 保留缓冲区原本数值
+ Replace : 往缓冲区写入 stencilRef位与stencilWriteMask 的值
+
+ stencilDepthFailOp : stencilFunc比较函数返回成功, 但深度测试失败的时候执行的处理,支持下面的值:
+ Keep : 保留缓冲区原本数值
+ Replace : 往缓冲区写入 stencilRef位与stencilWriteMask 的值
+
+ stencilPassOp : stencilFunc比较函数返回成功,而且深度测试成功的时候执行的处理,支持下面的值:
+ Keep : 保留缓冲区原本数值
+ Replace : 往缓冲区写入 stencilRef位与stencilWriteMask 的值
+```
+
+相关联的states渲染环境配置:
+```json
+StencilWrite :开启蒙版写入
+EnableStencilTest : 开启蒙版测试
+```
+
+最后我们看一段例子:
+```json
+"shadow_back": {
+ "+states": [
+ "StencilWrite",
+ "DisableColorWrite",
+ "DisableDepthWrite",
+ "InvertCulling",
+ "EnableStencilTest"
+ ],
+
+ "frontFace": {
+ "stencilFunc": "Always",
+ "stencilFailOp": "Keep",
+ "stencilDepthFailOp": "Keep",
+ "stencilPassOp": "Replace"
+ },
+ "backFace": {
+ "stencilFunc": "Always",
+ "stencilFailOp": "Keep",
+ "stencilDepthFailOp": "Keep",
+ "stencilPassOp": "Replace"
+ },
+
+ "stencilRef": 1,
+ "stencilReadMask": 255,
+ "stencilWriteMask": 1,
+
+ // 省略其余部分
+}
+```
+例子中`StencilWrite`代表支持蒙版缓冲区的写入,`EnableStencilTest`代表开启蒙版测试,`frontFace`配置了正向片元的模板测试策略,代表正向片元的蒙版测试总是通过(Always),深度测试不通过则保持缓冲区值不变(Keep),若深度测试通过则会将模板缓冲更新为`stencilRef`的值。`backFace`同理。
+
+#### Blend 半透明对象颜色混合
+
+半透明对象的渲染需要配置混合因子,最终输出的rgb颜色值 = 当前颜色值 * 源混合因子 + 缓冲区中的颜色值 * 目标混合因子
+
+##### blendSrc
+源混合因子
+
+##### blendDst
+目标混合因子
+
+##### alphaSrc
+计算alpha时的源混合因子,通常不配置取默认值
+
+##### alphaDst
+计算alpha时的目标混合因子,通常不配置取默认值
+
+---
+
+混合因子总共可以取下面的值:
+```json
+DestColor : 缓冲区颜色值
+SourceColor : 当前颜色值
+Zero : (0,0,0)
+One : (1,1,1)
+OneMinusDestColor : (1,1,1) - 缓冲区颜色值
+OneMinusSrcColor : (1,1,1) - 当前颜色值
+SourceAlpha : 当前颜色中的alpha值
+DestAlpha : 缓冲区颜色中的alpha值
+OneMinusSrcAlpha : 1 - 当前颜色值中的alpha值
+```
+
+在引擎中,默认值为:
+```json
+blendSrc :SourceAlpha
+blendDst :OneMinusSrcAlpha
+alphaSrc :One
+alphaDst :OneMinusSrcAlpha
+```
+
+相关联的states渲染环境配置:
+```json
+Blending : 开启颜色混合模式,常用于渲染半透明对象。声明这个之后通常也需要声明混合因子blendSrc,blendDst
+DisableColorWrite : 不往颜色缓冲区写入颜色值,RGBA通道均不写入
+DisableAlphaWrite : 不往颜色缓冲区写入透明度alpha值,允许写入RGB值
+DisableRGBWrite : 不往颜色缓冲区写入透明度RGB值,允许写入Alpha值
+```
+
+#### sample 纹理采样
+
+##### samplerStates
+配置采样状态,值为一个列表,根据需要采样的纹理个数为每一个纹理进行配置,通常若顶点属性中声明了UV0, UV1,代表需要采样两个纹理,这里则需要配置两个元素。下面看子元素的定义:
+```json
+{
+ "samplerIndex": 0,
+ "textureFilter": "Point",
+ "textureWrap": "Repeat"
+}
+```
+
+每个属性的定义如下:
+###### samplerIndex
+数字,代表当前正在设置第几张纹理的属性,由0开始
+
+###### textureFilter
+纹理过滤模式(默认为Point),当实际显示的纹理贴图相比于原图进行了放大或缩小时,新的分辨率贴图与原分辨率贴图上像素点的映射关系,可以有以下的值:
+```json
+ Point : 点采样
+ Bilinear : 双线性采样
+ Trilinear : 三线性采样
+ MipMapBilinear : MipMap双线性采样
+ TexelAA :纹素抗锯齿(不是所有设备都支持,不建议使用)
+ PCF :通过比较函数进行采样(不是所有设备都支持,不建议使用)
+```
+
+###### textureWrap
+纹理包裹模式,控制uv若在[0,1]之外的时候应该采样到什么样的纹理,可以有如下的值:
+```json
+ Repeat : 重复,即把值求模到[0,1]之间进行采样
+ Clamp : 边缘采样,采样最靠近的边缘的值,即1.1比较靠近1,则取1;-0.1比较靠近0,则取0。
+```
+
+
+#### vertex 顶点属性
+
+##### vertexFields
+顶点属性,用于声明使用这个材质进行渲染的网格每个顶点保存有什么属性,由美术制作资源的时候决定,可能用到的有以下的值:
+```json
+Position : 模型空间坐标
+Color : 颜色
+Normal : 法线
+UV0 :纹理采样坐标
+UV1 :纹理采样坐标
+UV2 :纹理采样坐标
+BoneId0 : 骨骼ID,骨骼模型中用到
+```
+
+#### rasterizer 光栅化环境配置
+
+##### msaaSupport
+配置MSAA(多重采样抗锯齿)的支持(引擎中的默认值为NonMSAA)
+```json
+NonMSAA : 在没有开启MSAA的时候材质允许使用
+MSAA : 在开启MSAA的时候材质允许使用
+Both :无论是否开启MSAA,材质都允许使用。通常使用这个值就可以了。
+```
+
+##### 深度偏移
+
+深度偏移主要用于解决z-fighting问题,即当两个物体深度相近,则渲染时可能会出现某些帧显示这个物体,某些帧显示另一个物体这种闪烁现象。深度偏移的原理是把其中一个对象往深度大或者小的方向偏移一下,使他们的深度不再一样。
+可配置以下四个变量:
+```json
+depthBias
+slopeScaledDepthBias
+depthBiasOGL
+slopeScaledDepthBiasOGL
+```
+
+具体偏移的深度为:
+```json
+offset = (slopeScaledDepthBias * m) + (depthBias * r)
+```
+在OGL平台上则为:
+```json
+offset = (slopeScaledDepthBiasOGL * m) + (depthBiasOGL * r)
+```
+
+m是多边形的深度的斜率(在光栅化阶段计算得出)中的最大值。一个多边形越是与近裁剪面平行,m就越接近0。
+r是能产生在窗口坐标系的深度值中可分辨的差异的最小值,r是由具体实现OpenGL的平台指定的一个常量。
+
+---
+相关联的states渲染环境配置:
+```json
+Wireframe : 绘制线框模式
+DisableCulling : 同时渲染正面和反面
+InvertCulling :使用正面裁剪。默认情况下为背面裁剪,声明这个之后则渲染背面,裁剪掉正面
+```
+
+#### primitive 图元
+
+##### primitiveMode
+图元渲染模式(引擎中的默认值为TriangleList):
+```json
+None : 不渲染,正常情况下不会为这个值
+QuadList :四边形模式
+TriangleList : 每三个顶点绘制一个三角形的模式,例如第一个三角形使用顶点v0,v1,v2,第二个使用v3,v4,v5
+TriangleStrip : 每一个顶点会与前两个出现的顶点构成三角形,结构复杂一点,但会节省数据量
+LineList : 每两个顶点绘制一条线段
+Line : 每一个顶点会与前一个出现的一个顶点构成线段。
+```
+
+### 材质变体
+
+#### variants
+用于快速基于大部分相同定义实现多种子材质。看下面entity_static这个实际例子:
+```json
+ "entity_static": {
+ "vertexShader": "shaders/entity.vertex",
+ "vrGeometryShader": "shaders/entity.geometry",
+ "fragmentShader": "shaders/entity.fragment",
+ "vertexFields": [
+ { "field": "Position" },
+ { "field": "Normal" },
+ { "field": "UV0" }
+ ],
+ "variants": [
+ {
+ "skinning": {
+ "+defines": [ "USE_SKINNING" ],
+ "vertexFields": [
+ { "field": "Position" },
+ { "field": "BoneId0" },
+ { "field": "Normal" },
+ { "field": "UV0" }
+ ]
+ }
+ },
+ {
+ "skinning_color": {
+ "+defines": [ "USE_SKINNING", "USE_OVERLAY" ],
+ "+states": [ "Blending" ],
+ "vertexFields": [
+ { "field": "Position" },
+ { "field": "BoneId0" },
+ { "field": "Color" },
+ { "field": "Normal" },
+ { "field": "UV0" }
+ ]
+ }
+ }
+ ],
+ "msaaSupport": "Both",
+ "+samplerStates": [
+ {
+ "samplerIndex": 0,
+ "textureFilter": "Point"
+ }
+ ]
+ },
+```
+variants即为材质变体的声明,上述声明了skinning和skinning_color两个子变体,子变体中对外部某些字段进行了改写。实际使用中,相当于快速定义了两个材质,本体和变体间用点"."连接,两个材质分别为`entity_static.skinning`和`entity_static.skinning_color`
+
+除此之外,后续如果有其它材质继承自entity_static,比如entity_dynamic,则此材质也会同时继承有此两种变体,分别为`entity_dynamic.skinning`和`entity_dynamic.skinning_color`
+
+
+## 材质合并规则
+
+不同目录文件中声明了同一材质时的,在加载后会根据以下规则进行合并:
+1.通常情况下后加载的文件的材质的字段会覆盖之前加载的
+2.以下字段特殊,除了替换以外,还支持使用"+"添加与使用"-"删除属性的操作:
+```json
+defines
+states
+samplerStates
+```
+
+举一个的例子,例如包体文件中声明了这么一材质(省略无关代码),定义了三个宏:
+```json
+"testMat": {
+ "defines": [ "MACRO_1", "MACRO_2", "MACRO_3" ],
+}
+```
+
+此时,一个Mod也声明了此材质,定义了另外三个宏:
+```json
+"testMat": {
+ "defines": [ "MACRO_4", "MACRO_5", "MACRO_6" ],
+}
+```
+上述情况下,最终运行时相当于defines字段被覆盖,实际运行时生效的宏只有: MACRO_4, MACRO_5, MACRO_6
+
+若MOD中定义的时候使用了"+"符号:
+```json
+"testMat": {
+ "+defines": [ "MACRO_4", "MACRO_5", "MACRO_6" ],
+}
+```
+相当于在原来的基础上添加定义,则实际运行时生效的宏有: MACRO_1, MACRO_2, MACRO_3, MACRO_4, MACRO_5, MACRO_6
+
+若MOD中定义的时候使用了"-"符号:
+```json
+"testMat": {
+ "-defines": [ "MACRO_3"],
+}
+```
+相当于在原来的基础上删除某些定义,则实际运行时生效的宏只有: MACRO_1, MACRO_2
+
+若多个文件都对同一材质进行了定义,而且分别涉及有覆盖,添加,删除操作,则依次生效的顺序为:
+先执行所有的覆盖操作,再执行所有的添加操作,最后执行所有的删除操作。
+
+即如果有其中一个材质文件声明删除MACRO_3操作:
+```json
+"testMat": {
+ "-defines": [ "MACRO_3"],
+}
+```
+则无论其它文件怎么覆盖,添加MACRO_3,最终合成后这一个材质一定不会有MACRO_3宏。
\ No newline at end of file
diff --git a/mcguide/16-美术/7-材质与着色器/4-材质实战.md b/mcguide/16-美术/7-材质与着色器/4-材质实战.md
new file mode 100644
index 0000000..d946ebc
--- /dev/null
+++ b/mcguide/16-美术/7-材质与着色器/4-材质实战.md
@@ -0,0 +1,586 @@
+---
+front: https://nie.res.netease.com/r/pic/20220408/3541655a-7205-4609-b118-be8d6dbb84bd.png
+hard: 入门
+time: 15分钟
+selection: 38
+---
+
+# 材质实战
+
+## 前言
+
+本文将举例介绍在《我的世界》中如何自定义材质。
+
+## 自定义模型材质
+MC支持自定义模型材质,包括原版实体材质以及网易骨骼模型材质,开发者可以参考之前的文档说明,结合已有的材质开发出自定义的材质效果。
+* 原版实体材质可以参考`vanilla/materials/entity.material`下的`entity_static`材质族配置以及shader实现
+* 网易骨骼模型材质可以参考`vanilla_netease/materials/entity.material`下的`entity_for_skeleton`材质族配置与shader实现
+
+### 原版模型材质示例 - 玩家反色
+本节将讨论如何一步步实现并使用玩家角色的反色材质,其效果大致如下:
+
+图左是反色后的史蒂夫,图右是原史蒂夫。
+
+#### 材质定义与配置流程
+我们在`vanilla_netease/entity/player.entity.json`中可以看到玩家实体的相关配置,其中就包含了材质的引用信息:
+```json
+{
+ "format_version": "1.10.0",
+ "minecraft:client_entity": {
+ "description": {
+ "identifier": "minecraft:player",
+ "materials": {
+ "default": "entity_alphatest_netease", // 玩家默认材质名
+ ... // 其他材质属性
+ },
+ ... // 其他属性
+ }
+ }
+}
+```
+一般而言,玩家实体使用`default`字段值中的材质来进行渲染,也就是`entity_alphatest_netease`,我们可以在`vanilla_netease/materials/entity.material`文件中找到该材质:
+```json
+"entity_alphatest_netease:entity_nocull_netease": {
+ "+defines": [
+ "ALPHA_TEST"
+ ],
+ "+samplerStates": [
+ {
+ "samplerIndex": 1,
+ "textureWrap": "Repeat"
+ }
+ ],
+ "msaaSupport": "Both"
+}
+```
+第一行表示`entity_alphatest_netease`材质继承自`entity_nocull_netease`材质。我们希望自定义一个反色材质,可以考虑复用现有材质的大部分属性,仅修改片元着色器的颜色输出,因此可以在`entity.material`中新增这样的材质定义:
+```json
+"entity_alphatest_netease_reverse:entity_alphatest_netease": {
+ "fragmentShader": "shaders/glsl/entity_reverse.fragment"
+}
+```
+它表示我们新增了一个名为`entity_alphatest_netease_reverse`的材质,并且复用了`entity_alphatest_netease`材质的属性,其中的片元着色器路径被我们自定义为我们将要实现的片元着色器文件路径。
+回到玩家实体定义的文件`vanilla_netease/entity/player.entity.json`,我们还需要将刚才的玩家默认材质改为我们自定义的材质:
+```json
+"materials": {
+ "default": "entity_alphatest_netease_reverse",
+ ... // 其他材质
+}
+```
+这样一来,在材质文件中定义,在玩家实体配置中引用,就完成了玩家材质自定义相关的配置与使用流程,其他非玩家的原版材质也可以使用类似的思路来进行自定义。
+>如果希望在游戏内动态修改玩家或者实体材质,我们可以使用AddPlayerRenderMaterial接口或者AddActorRenderMaterial接口,具体可以参考我们的API接口文档。
+
+#### 顶点着色器实现
+我们仅需要使玩家表现为反色,因此顶点着色器可以直接复用父材质的顶点着色器(entity.vertex),不需要进行任何修改。
+
+#### 片元着色器实现
+找到`vanilla_netease\shaders\glsl\entity.fragment`文件,它是游戏内大多数实体材质所使用的片元着色器文件。将它复制一份,重命名为我们在材质定义中所写的名称`entity_reverse.fragment`,然后在最后的颜色输出代码处修改如下:
+```glsl
+color.rgb = vec3(1.0) - color.rgb; // 将颜色RGB通道取反色
+gl_FragColor = color;
+```
+运行游戏进入存档,就可以看到类似开头示例图中的景象,玩家实体颜色被替换为了相反色。
+
+### 骨骼模型材质示例 - Blinn-Phong光照
+
+我们可以考虑给网易骨骼模型加上Blinn-Phong光照,该光照的具体实现原理可以参考[这里](https://learnopengl-cn.github.io/05%20Advanced%20Lighting/01%20Advanced%20Lighting/#blinn-phong),效果如下:
+
+
+
+#### 材质定义与配置流程
+在骨骼模型配置文件`vanilla_netease\models\netease_models.json`中可以看到各个骨骼模型的配置,假设开发者拥有一个骨骼模型,其在`netease_models.json`中的配置如下:
+```json
+"model_example": {
+ "dy_load": true,
+ "mesh": "mesh/model_example_mesh.json",
+ "skeleton": "skeleton/model_example_skeleton.json"
+}
+```
+我们希望这个模型能够使用自定义的Blinn-Phong材质,因此我们在这个模型配置中加入对材质的引用信息,表示我们需要让这个骨骼模型使用自定义材质`my_blinn_phong`:
+```json
+"model_example": {
+ "dy_load": true,
+ "mesh": "mesh/model_example_mesh.json",
+ "skeleton": "skeleton/model_example_skeleton.json",
+ "material": "my_blinn_phong" // ***添加材质引用信息***
+}
+```
+此时我们还需要定义材质,找到`vanilla_netease/materials/entity.material`文件,加入以下材质定义到`materials`字段内:
+```json
+"my_blinn_phong:entity_for_skeleton": {
+ "fragmentShader": "shaders/glsl/my_blinn_phong.fragment",
+ "vertexShader": "shaders/glsl/my_blinn_phong.vertex"
+}
+```
+与[原版材质配置的材质定义](#matdef0)中的例子类似,我们定义一个名为`my_blinn_phong`的材质,继承自`entity_for_skeleton`材质,并且覆盖它的顶点着色器与片元着色器路径。至此,骨骼模型的材质定义与引用就完成了,接下来将讨论如何实现这个材质。
+>同样地,骨骼模型也有动态替换材质的接口:SetModelMaterial,具体可以参考API文档中的说明。
+
+#### 顶点着色器实现
+* 复制一份`netease_entity_skeleton.vertex`代码并重命名,得到待修改的代码模板。
+* 在main函数以外的地方定义`positionWS`与`normalWS`两个varying,用于做后面的片元着色计算:
+```glsl
+varying vec3 positionWS; // 模型世界位置
+varying vec3 normalWS; // 模型世界法线
+```
+* 不同设备的默认精度不同,为了保证计算结果精确可控,我们在开头声明浮点数的精度为`highp`:
+```glsl
+precision highp float;
+```
+* 在main函数中计算`positionWS`与`normalWS`这2个变量的值:
+```glsl
+positionWS = (WORLD * entitySpacePosition).xyz;
+normalWS = normalize((WORLD * entitySpaceNormal).xyz);
+```
+完整代码:
+```glsl
+// __multiversion__
+// This signals the loading code to prepend either #version 100 or #version 300 es as apropriate.
+precision highp float;
+
+#include "neteaseModelVertexUtil.h"
+#line 6
+
+varying vec4 fogColor; // 雾色与雾强度 vec4(r, g, b, 雾强度)
+varying vec3 positionWS; // 模型世界位置
+varying vec3 normalWS; // 模型世界法线
+
+void main() {
+ POS4 entitySpacePosition, entitySpaceNormal;
+ // 计算顶点动画 得到模型空间位置与法线
+ getEntitySpacePositionAndNormal(entitySpacePosition, entitySpaceNormal);
+
+ calculateOverlayColor(); // 受伤变红等效果
+ calculateGlint(); // 计算附魔效果相关变量
+
+ // 包含其他内置宏相关的varying计算
+ neteaseModelCommonVert();
+
+ // 变量uv已经在头文件中预先声明 这里使用TEXCOORD_0作为uv值
+ uv = TEXCOORD_0;
+ // 计算顶点uv 包括MC支持的UV序列帧效果
+ applyUVAnim(uv);
+
+ // 变换到投影空间
+ POS4 projSpacePos = WORLDVIEWPROJ * entitySpacePosition;
+ gl_Position = projSpacePos;
+
+ positionWS = (WORLD * entitySpacePosition).xyz;
+ normalWS = normalize((WORLD * entitySpaceNormal).xyz);
+
+ // 根据投影位置 计算雾的效果
+ fogColor = getFogColor(projSpacePos);
+}
+```
+
+#### 片元着色器实现
+
+* 复制一份`netease_entity_skeleton.fragment`代码并重命名,得到待修改的代码模板。
+* 与顶点着色器对应,在main函数以外的地方定义`positionWS`与`normalWS`两个varying:
+```glsl
+varying vec3 positionWS; // 世界空间位置
+varying vec3 normalWS; // 世界空间法线
+```
+* 根据`Blinn-Phong`着色模型进行计算,将光照结果与贴图颜色相乘,具体代码见下方完整版
+* 由于MC并没有真正的实时光源,因此在着色器中假设了一个处于较高处(200.0, 1000.0, 200.0)的纯白色光源
+
+完整代码:
+```glsl
+// __multiversion__
+// This signals the loading code to prepend either #version 100 or #version 300 es as apropriate.
+precision highp float;
+
+#include "neteaseModelFragmentUtil.h"
+#include "uniformPerFrameConstants.h"
+#line 7
+
+LAYOUT_BINDING(0) uniform sampler2D TEXTURE_0;
+LAYOUT_BINDING(1) uniform sampler2D TEXTURE_1;
+
+varying vec4 fogColor; // 雾色与雾强度 vec4(r, g, b, 雾强度)
+varying vec3 positionWS; // 世界空间位置
+varying vec3 normalWS; // 世界空间法线
+
+void main() {
+ // 根据uv获取纹理色 如果是用了NO_TEXTURE宏则会返回 1.0
+ vec4 color = getSampledColor(TEXTURE_0, uv);
+
+ // 杂项的内置宏功能
+ neteaseModelCommonFrag(color);
+
+ // 加入受击变红等效果
+ applyOverlayColor(color);
+
+ // 附魔变色效果 使用TEXTURE_1
+ applyGlint(TEXTURE_1, color);
+
+ // 雾效果
+ applyFog(color, fogColor);
+
+ // 光照计算
+ // 高处白光
+ vec3 lightColor = vec3(1.0, 1.0, 1.0);
+ vec3 lightPos = vec3(200.0, 1000.0, 200.0);
+ // 环境光
+ vec3 ambient = vec3(0.2) * lightColor;
+ // 漫反射光
+ vec3 lightDir = normalize(lightPos - positionWS);
+ float diff = max(dot(normalWS, lightDir), 0.0);
+ vec3 diffuse = diff * lightColor;
+ // 镜面反射光
+ vec3 viewDir = normalize(VIEW_POS.xyz - positionWS);
+ // Blinn-Phong 反射光
+ vec3 halfwayDir = normalize(lightDir + viewDir);
+ float spec = pow(max(dot(normalWS, halfwayDir), 0.0), 32.0);
+ vec3 specular = lightColor * spec;
+ color.rgb *= clamp(diffuse + specular + ambient, 0.3, 1.0);
+
+ gl_FragColor = color;
+}
+```
+#### 调出模型
+打开游戏,使用python脚本执行以下代码,将玩家模型变为引用了自定义材质的自定义模型,即可看到开头所示的效果:
+```python
+import mod.client.extraClientApi as clientApi
+comp = clientApi.GetEngineCompFactory().CreateModel(playerId) # playerId为玩家实体ID
+comp.SetModel("model_example")
+```
+
+## 自定义多pass
+### 配置说明
+2.8版本开放了自定义多pass的特性,目前开发者可以通过对骨骼模型配置多pass材质,实现更多效果。开发者仅需修改`netease_models.json`中的模型配置,将模型配置中的`material`字段配置成数组即可:
+```json
+{ // netease_models.json
+ "model_example": {
+ "dy_load": true,
+ "mesh": "mesh/model_example_mesh.json",
+ "skeleton": "skeleton/model_example_skeleton.json",
+ "material": ["entity_for_skeleton", "netease_drawline_example"] // ****多pass材质数组****
+ }
+}
+```
+可以看到模型`model_example`中的`material`字段被配置为了由两个材质组成的数组,第一个材质是网易骨骼模型材质`entity_for_skeleton`,第二个材质是2.8新增的内置描边材质`netease_drawline_example`。
+在渲染模型时,引擎会**按顺序**渲染配置中的材质数组,在这个例子中,模型`model_example`会首先使用材质`entity_for_skeleton`渲染一次,再使用材质`netease_drawline_example`渲染一次。
+### 示例 - 描边效果
+描边效果一般用来表示玩家被选中,或者提供高亮效果,可以使用多pass的特性来实现。
+
+#### 描边材质定义
+开发者可以在`vanilla_netease/materials/entity.material`中找到新增的内置描边材质`netease_drawline_example`定义:
+```json
+"netease_drawline_example:entity_for_skeleton": {
+ "+states": [
+ "InvertCulling"
+ ],
+ "vertexShader": "shaders/tutorial/glsl/netease_drawline.vertex",
+ "fragmentShader": "shaders/tutorial/glsl/netease_drawline.fragment"
+}
+```
+材质首先启用了逆(invert)反向剔除,也就是`正向剔除`,然后重新指定了描边shader代码路径。
+```
+反向剔除(Back-face Culling)是一种节省渲染开销的技术,其原理是将没有面朝相机的三角面抛弃,不进行渲染
+```
+#### 顶点着色器实现
+描边材质的着色器比较简单,可以删除多余的计算节省开销,一般只要将顶点沿法线方向外扩,让描边部分超出模型范围一点点即可。在这里我们可以使用 `模型中心(0.0, 0.5, 0.0)` 到 `顶点位置(entitySpacePosition.xyz)` 的方向作为外扩方向:
+```glsl
+// __multiversion__
+// This signals the loading code to prepend either #version 100 or #version 300 es as apropriate.
+#include "neteaseModelVertexUtil.h"
+#line 4
+
+const vec4 DRAWLINE_PARAM = vec4(0.6, 0.8, 1.0, 0.025); // (描边颜色RGB, 描边宽度倍率)
+varying vec4 fogColor; // 雾色与雾强度 vec4(r, g, b, 雾强度)
+
+void main() {
+ POS4 entitySpacePosition, entitySpaceNormal;
+ // 计算顶点动画 得到模型空间位置与法线
+ getEntitySpacePositionAndNormal(entitySpacePosition, entitySpaceNormal);
+
+ // 放大轮廓
+ vec3 vertexDir = normalize(entitySpacePosition.xyz - vec3(0.0, 0.5, 0.0));
+ entitySpacePosition.xyz += vertexDir * DRAWLINE_PARAM.a;
+
+ // 变换到投影空间
+ POS4 projSpacePos = WORLDVIEWPROJ * entitySpacePosition;
+ gl_Position = projSpacePos;
+
+ // 根据投影位置 计算雾的效果
+ fogColor = getFogColor(projSpacePos);
+}
+```
+#### 片元着色器实现
+在片元着色阶段,我们可以只输出一个纯色:
+```glsl
+// __multiversion__
+// This signals the loading code to prepend either #version 100 or #version 300 es as apropriate.
+#include "neteaseModelFragmentUtil.h"
+#line 4
+
+const vec4 DRAWLINE_PARAM = vec4(0.6, 0.8, 1.0, 0.025); // (描边颜色RGB, 描边宽度倍率)
+varying vec4 fogColor;
+
+void main() {
+ vec4 color = vec4(DRAWLINE_PARAM.rgb, 1.0);
+
+ // 雾效果
+ applyFog(color, fogColor);
+
+ gl_FragColor = color;
+}
+```
+>代码中的`DRAWLINE_PARAM`可以改为`EXTRA_VECTOR`,并使用`SetExtraUniformValue`接口动态实现动态修改描边颜色
+
+## 自定义后处理
+### 介绍
+2.8新增了自定义后处理特性,开发者可以参考文档说明,结合已有的内置后处理实现,增加自定义后处理效果。
+后处理是在场景渲染完毕后额外的全屏渲染流程,通常需要根据当前的渲染结果(深度、颜色以及法线等),额外增加特殊的渲染处理,例如景深、滤镜、bloom、色调映射等效果。
+### 配置说明
+要新增自定义的后处理效果,就需要定义后处理所使用的材质。在`postprocess.materal`中,可以自定义后处理专属的材质,其定义方式与其他材质类似,也可以仿照内置的后处理材质配置来实现。在graphics_settings文件夹下的`post_process.json`内,我们可以配置自定义后处理,大致格式如下:
+```json
+{ // post_process.json
+ "render_order": [ // 后处理渲染顺序
+ ... // 其他内置后处理效果
+
+ // 开发者自定义后处理效果名称
+ "my_post"
+ ],
+ "process_array": [ // 后处理定义列表
+ ... // 其他内置后处理定义
+
+ // 开发者自定义后处理配置
+ {
+ "name": "my_post",
+ "enable": false,
+ "paras": [
+ { "name": "param0", "value": 0.1, "range": [0.0, 1.0] },
+ { "name": "param1", "value": [1.0, 2.0], "range": [0.0, 1.0] },
+ { "name": "param2", "value": [1.0, 2.0], "range": [0.5, 16.0] }
+ ],
+ "pass_array":[
+ {
+ "render_target":{"width":1.0, "height":1.0},
+ "material":"my_post_material",
+ "bindTexture": [
+ {
+ "texture": "textures/postprocess/my_post_texture0"
+ },
+ {
+ "texture": "textures/postprocess/my_post_texture1"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
+```
+以下是对于这个配置的解读:
+* `render_order`是后处理渲染顺序表,表示各个后处理效果的先后渲染顺序。
+* `process_array`包含了各个后处理效果的定义,其中`name`表示后处理名称,与`render_order`字段中的名称对应,`enable`表示游戏内是否默认开启。
+* `paras`定义了后处理shader中使用到的自定义参数名称、值以及值的范围。自定义参数可以是`float` `vec2` `vec3` `vec4`四种类型,这取决于它们的`value`字段值。例如,`param0`是`float`类型,因为它的`value`字段值是一个数,而`param1`和`param2`是`vec2`类型,因为它们的`value`字段值都是长度为2的数组。
+* pass_array:后处理pass数组,每个pass包含一个`material`以及`render_target`字段。自定义后处理pass额外支持了`bindTexture`字段,用于更灵活的使用外部纹理信息。配置的贴图按照顺序依次绑定至[3,7]号纹理单元槽。
+* 渲染自定义后处理效果时,`paras`字段的自定义参数会按照顺序排列,并通过名为`EXTRA_VECTORx`的四维向量传递给shader使用(末尾的x是1到4的整数)。在本例中,自定义参数的总长度为1+2+2=5,因此游戏会使用两个vec4参数传递给shader:
+```glsl
+uniform vec4 EXTRA_VECTOR1; // vec4(param0, param1.x, param1.y, param2.x)
+uniform vec4 EXTRA_VECTOR2; // vec4(param2.y, ?, ?, ?) // 问号表示冗余 不确定值
+```
+于是开发者就可以通过`EXTRA_VECTOR`编写参数相关的逻辑。关于`EXTRA_VECTOR`与`SetExtraUniformValue`接口的使用可以参考开发指南或MODSDK的其他文档。
+
+
+
+### 自定义后处理中可使用的Shader宏变量
+
+目前我们设置了多个可在自定义后处理中使用的shader宏变量,他们包含了多种游戏中的环境参数。如下表所示。
+
+| 宏变量名称 | 格式 | 包含参数 | 备注 |
+| ------------------ | ------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| WORLD_PARAMETERS | vec3(int, float, float) | { 玩家所在维度id,星星亮度,环境光亮度 } | 1. 玩家所在维度id。id=0(主世界),id=1(下界),id=2(末地),id>=3(自定义维度)。
2. 星星亮度。该值与GetStarBrightness接口所返回的值一致。
3. 环境光亮度。该值与GetAmbientBrightness接口所返回的值一致。 |
+| TIME_PARAMETERS | vec2(float, float) | { 自当天日出后流逝的游戏刻数,世界总共流逝的游戏刻数 } | 1. 自当天日出后流逝的游戏刻数,与`/time query daytime`指令所得出值一致。
2. 世界总共流逝的游戏刻数,与`/time query worldtime`指令所得出的值一致。 |
+| WEATHER_PARAMETERS | vec3(int, float, float) | { 天气类型,降雨等级,打雷等级 } | 1. 天气类型。值为0表示晴天,值为1时表示下雨,值为2时表示雷暴。
2. 降雨等级。目前世界的降雨强度,值范围为[0,1]。
3. 打雷等级。目前世界的打雷强度,值范围为[0,1]。 |
+| CAMERA_POSITION | vec3(float, float, float) | { 相机位置 } | 玩家相机的位置。 |
+| PLAYER_POSITION | vec3(float, float, float) | { 玩家位置 } | 玩家的世界位置。 |
+| SKY_COLOR | vec3(float, float, float) | { 天空颜色 } | 天空盒的颜色。只有开启了精美天空选项时该值才有效。否则该值为0。 |
+
+以上宏变量均可在fragment shader或者vertex shader中使用。下面我们使用fragment shader作为示例:
+
+```glsl
+// ... 忽略其他shader代码 ...
+
+uniform vec3 WORLD_PARAMETERS; // (玩家所在维度id,星星亮度,环境光亮度)
+uniform vec3 PLAYER_POSITION; // (玩家位置)
+
+void main(){
+ vec4 base_color = texture( TEXTURE_0, uv );
+ if(WORLD_PARAMETERS.x == 1) { // 如果维度是下界,则增加亮度
+ base_color *= 2.0;
+ }
+ if(PLAYER_POSITION.y <= 16) { // 如果玩家位置高度低于16,则改变颜色
+ base_color.r *= 2.0;
+ }
+ gl_FragColor = base_color;
+}
+```
+
+
+### 示例 - 老电视机滤镜
+该效果名为`oldtv`,是2.8版本新增的内置后处理效果,开发者可以使用IMGUI查看,或者使用后处理的`SetEnableByName`接口开启查看。
+
+
+#### 后处理定义
+开发者可以直接参考包体内的`graphics_settings/post_process.json`以及`materials/postprocess.material`中的`old_tv`材质,查看具体的后处理配置以及后处理材质定义。
+#### 顶点着色器实现
+直接复用内置的顶点着色器`shaders/glsl/uv_fullscreen.vertex`,是用于全屏渲染的简单顶点着色器:
+```glsl
+// __multiversion__
+// This signals the loading code to prepend either #version 100 or #version 300 es as apropriate.
+
+#include "vertexVersionCentroidUV.h"
+#include "uniformWorldConstants.h"
+
+attribute POS4 POSITION;
+attribute vec2 TEXCOORD_0;
+
+void main()
+{
+ gl_Position = vec4(POSITION.xyz, 1.0);
+ uv = TEXCOORD_0;
+}
+```
+#### 片元着色器实现
+具体思路是各种效果的叠加,包括噪声、划痕、色调映射以及黑边等,可以参考包体内的`shaders/tutorial/glsl/old_tv.fragment`代码,在此仅贴出部分实现:
+```glsl
+uniform vec4 EXTRA_VECTOR1; // (density 雪花密度, strength 雪花强度, snow_size 雪花大小, noise_fps 噪声频率)
+uniform vec4 EXTRA_VECTOR2; // (black_zone 黑边占屏幕比率, ?, ?, ?)
+
+void main(){
+ vec4 base_color = texture( TEXTURE_0, uv );
+ float time_flow = floor(TIME * EXTRA_VECTOR1.a) / EXTRA_VECTOR1.a;
+
+ // 白噪声
+ vec2 snow_uv = floor(uv * vec2(1.6, 0.9) * (2048.0 / EXTRA_VECTOR1.b)) * EXTRA_VECTOR1.b;
+ float r = rand(snow_uv + time_flow);
+ r = step(1.0 - EXTRA_VECTOR1.r, r);
+
+ // 纵向的随机划痕 增加陈旧的观感
+ float glitch = rand(uv.xx * 1024.0 + time_flow);
+ glitch = step(0.999, glitch);
+
+ // 颜色滤镜 叠加灰度感 让画面发旧
+ float gray = dot(base_color.rgb, vec3(0.2126729, 0.7151522, 0.0721750));
+ base_color.rgb = vec3(gray * 0.4) + base_color.rgb * vec3(0.6, 0.55, 0.5);
+
+ // 中心的噪声需要淡出 防止遮挡视野
+ float dist_to_center = length(uv - vec2(0.5, 0.5));
+ dist_to_center *= dist_to_center;
+
+ vec3 final_color = base_color.rgb + vec3((r + glitch) * EXTRA_VECTOR1.g * dist_to_center);
+
+ // 电影黑边
+ float black_zone = step(min(uv.y, 1.0 - uv.y), EXTRA_VECTOR2.r * 0.5);
+ final_color = (1.0 - black_zone) * final_color.rgb;
+
+ gl_FragColor = vec4(final_color, 1.0);
+}
+```
+
+### 示例 - 地形扫描效果
+
+介绍基于MC后处理框架的扫描效果的实现,效果如图。另外,目前在部分移动端受限于精度问题,表现异常。
+
+
+
+#### scan_map.fragment
+如下为MC自定义后处理框架下扫描效果的配置。render_order表示渲染顺序,其中的值对应process_array.name的值,process_array.enable表示是否开启,process_array.paras表示可调参数,最后以uniform变量EXTRA_VECTOR1的形式传进片元着色器中。process_array.pass_array.render_target表示渲染范围,此处表示全屏幕,process_array.pass_array.material表示使用的材质,process_array.pass_array.depth_enable表示是否需要深度图,开启后可以在片元着色器中的TEXTURE_2拿到深度图。
+```json
+{
+ "render_order": [
+ "scanmap"
+ ],
+ "process_array": [
+ {
+ "name": "scanmap",
+ "enable": false,
+ "paras": [
+ { "name": "color", "value": [1.0, 1.0, 1.0], "range": [0.0, 1.0] },
+ { "name": "freq", "value": 2.0, "range": [0.0, 10.0] }
+ ],
+ "pass_array":[
+ {
+ "render_target":{
+ "width":1.0,
+ "height":1.0
+ },
+ "material":"scan_map",
+ "depth_enable": true
+ }
+ ]
+ }
+ ]
+}
+```
+如下为MC后处理框架下扫描效果的片元着色器。引入fragmentVersionCentroidUV.h头文件是为了拿到纹理对应的uv坐标,引入uniformPerFrameConstants.h头文件是为了其中的TIME变量,引入uniformWorldConstants.h头文件是为了其中的PROJ和WORLDVIEW变量,引入uniformRenderChunkConstants.h头文件是为了其中的CHUNK_ORIGIN_AND_SCALE变量,具体每个uniform变量的作用详见[材质介绍与入门](./1-材质介绍与着色器入门.md)。
+
+扫描效果大致是根据各点与相机的距离,由近到远地让一定距离范围内的点提高亮度,同时在提亮的区域内划分出格子。其中,各点与相机的距离可以从深度图恢复出线性深度以便计算,由于MC的shader中的坐标系是基于相机为原点的,所以还需要利用CHUNK_ORIGIN_AND_SCALE才能保证网格不随玩家的移动而移动。然后划分格子就是根据世界坐标做一些取余操作,提取出靠近0的部分进行高亮。最后,做一些边缘淡出效果即可。
+
+```glsl
+// __multiversion__
+// This signals the loading code to prepend either #version 100 or #version 300 es as apropriate.
+#include "fragmentVersionCentroidUV.h"
+#include "uniformPerFrameConstants.h"
+#include "uniformWorldConstants.h"
+#include "uniformRenderChunkConstants.h"
+#line 7
+
+LAYOUT_BINDING(0) uniform sampler2D TEXTURE_0;
+LAYOUT_BINDING(1) uniform sampler2D TEXTURE_1;
+LAYOUT_BINDING(2) uniform sampler2D TEXTURE_2;
+
+uniform vec4 EXTRA_VECTOR1; // (red 扫描颜色r, green 扫描颜色g, blue 扫描颜色b, freq 频率)
+
+highp vec3 get_world_position(vec2 uv, float z) {
+ highp vec4 pos_clip = vec4(uv, z, 1.0) * 2.0 - 1.0;
+ highp vec4 pos_world = inverse(PROJ*WORLDVIEW) * pos_clip;
+ return pos_world.xyz / pos_world.w;
+}
+
+void main() {
+ vec4 color = texture2D(TEXTURE_0, uv);
+ float depth = texture2D(TEXTURE_2, uv).r;
+
+ highp vec3 world_pos = get_world_position(uv, depth);
+ world_pos -= mod(CHUNK_ORIGIN_AND_SCALE.xyz, 1.0);
+ float dist = length(world_pos);
+
+ float peak = mod(TIME * EXTRA_VECTOR1.a * 10.0, 100.0);
+ float fade = 1.0 - clamp((peak - 90.0) / (100.0 - 90.0), 0.0, 1.0);
+ float highlight_area = clamp(1.0 - (abs(dist - peak) * 0.1), 0.0, 1.0) * fade;
+
+ vec3 grid = 1.0 - abs(mod(world_pos, 1.0) * 20.0 - 1.0);
+ float border_area = clamp(max(grid.r, max(grid.g, grid.b)), 0.0, 1.0);
+
+ color.rgb = mix(color.rgb, vec3(EXTRA_VECTOR1.r, EXTRA_VECTOR1.g, EXTRA_VECTOR1.b), highlight_area * border_area);
+ gl_FragColor = color;
+}
+```
+
+## 材质使用示例
+
+我们提供了一些材质配置使用示例给开发者参考,开发者可到MC Studio的内容库中进行搜索。
+
+(1)CustomEntityMaterialMod
+
+ 该模组演示了如何配置和使用自定义生物的自定义材质的功能。
+
+(2)CustomPlayerMaterialMod
+
+ 该模组演示了如何配置和使用玩家自身(BB模型)的自定义材质的功能。
+
+(3)CustomSkeletonMaterialMod
+
+ 该模组演示了如何配置和使用骨骼模型的自定义材质的功能。
+
+(4)CustomNeteaseParticlesMod
+
+ 该模组演示了如何配置和使用网易版粒子特效的自定义材质的功能。
+
+(5)CustomPostprocessMod
+
+ 该模组演示了如何配置和使用自定义后处理的功能。
\ No newline at end of file
diff --git a/mcguide/16-美术/7-材质与着色器/5-材质相关接口介绍.md b/mcguide/16-美术/7-材质与着色器/5-材质相关接口介绍.md
new file mode 100644
index 0000000..22e215f
--- /dev/null
+++ b/mcguide/16-美术/7-材质与着色器/5-材质相关接口介绍.md
@@ -0,0 +1,96 @@
+---
+front:
+hard: 入门
+time: 20分钟
+---
+
+# 材质相关接口介绍
+
+## 前言
+本文将简单介绍《我的世界》开放的材质相关python接口,便于开发者加深对材质系统的了解,同时避免开发者因找不到相关接口而缺乏头绪的情况。
+网易版《我的世界》向开发者开放python接口,其中包括了材质相关的接口,允许开发者对材质进行一定程度的增删改查。通过调用python接口,开发者不仅可以减少配置json的麻烦,还可以实现在游戏内动态替换材质、动态调整材质特性的功能,关于接口的更具体描述,可以前往API文档页面进行查阅。
+
+## 网易骨骼模型材质
+### SetModelMaterial
+设置骨骼模型所使用的材质,允许设置常规材质和低配机材质,并且可以精确到具体的骨骼使用何种材质。
+
+### SetModelMultiPassMaterial
+设置骨骼模型所使用的材质数组,用法大致与`SetModelMaterial`接口相同。
+
+### GetModelMaterial
+获取骨骼模型所使用的材质,可以精确到骨骼。
+
+### GetExtraUniformValue
+获取骨骼模型材质参数,对应shader中的uniform值。
+
+### SetExtraUniformValue
+设置骨骼模型材质参数,对应shader中的uniform值。
+
+## 原版实体与玩家实体材质
+### AddActorRenderMaterial
+增加或替换实体的材质,需要配合`RebuildActorRender`接口使用。
+
+### AddPlayerRenderMaterial
+增加或替换玩家的材质,需要配合`RebuildPlayerRender`接口使用。
+
+### AddActorRenderController
+增加或修改实体的渲染控制器。渲染控制器可以在游戏内根据实体的情况,实时决定实体使用何种材质、纹理以及几何体。
+
+### AddPlayerRenderController
+增加或修改玩家的渲染控制器。渲染控制器可以在游戏内根据实体的情况,实时决定实体使用何种材质、纹理以及几何体。
+
+### RemoveActorRenderController
+删除实体渲染控制器
+
+### RemovePlayerRenderController
+删除玩家渲染控制器
+
+### AddActorRenderControllerArray
+添加实体渲染控制器数组中字典arrays元素
+
+### CopyActorRenderMaterialFromPlayer
+将玩家的材质引用拷贝到某一类实体上,精确到材质键,例如可以将玩家的`default`对应的材质拷贝到羊的`default`对应的材质。
+
+### SetEntityExtraUniforms
+设置实体shader的自定义变量值,包括生物实体以及玩家实体。目前自定义变量值包含四个四维向量,因此开发者可以利用16个float的信息实现对材质表现的控制。
+
+### GetEntityExtraUniforms
+获取实体shader的自定义变量值,包括生物实体以及玩家实体。
+
+### RebuildActorRender
+重建或刷新实体渲染,一般需要在实体渲染相关的修改操作结束后调用。
+
+### RebuildPlayerRender
+重建或刷新玩家实体渲染,一般需要在玩家实体渲染相关的修改操作结束后调用。
+
+## 方块实体材质
+### SetBlockEntityExtraUniforms
+设置实体方块的shader参数值,与`SetEntityExtraUniforms`接口或`SetExtraUniformValue`接口类似。
+
+### GetBlockEntityExtraUniforms
+获取实体方块的shader参数值,与`GetEntityExtraUniforms`接口或`GetExtraUniformValue`接口类似。
+
+## 后处理材质
+### SetEnableByName
+根据指定的后处理名称,开关对应的自定义后处理效果。
+
+### CheckEnabledByName
+根据指定的后处理名称,获取对应的自定义后处理效果是否开启。
+
+### SetParameter
+可以根据后处理效果名称与自定义参数名称,设置自定义后处理的自定义参数,与`GetEntityExtraUniforms`接口或`GetExtraUniformValue`接口类似。
+
+### GetParameter
+可以根据后处理效果名称与自定义参数名称,获取自定义后处理的自定义参数值,与`GetEntityExtraUniforms`接口或`GetExtraUniformValue`接口类似。
+
+### InsertPassToPostprocess
+允许在自定义后处理pass数组中插入一个自定义pass。
+
+### PushBackPassToPostprocess
+允许在自定义后处理pass数组末尾加入一个自定义pass。
+
+### RemovePassInPostprocess
+指定后处理名称与下标,可以移除后处理pass数组中的某个pass,该操作不会影响文件。
+
+### PopBackPassInPostprocess
+指定后处理名称,可以移除后处理pass数组中的最后一个pass,该操作不会影响文件。
diff --git a/mcguide/16-美术/7-材质与着色器/6-图形管线与GLSL简单入门.md b/mcguide/16-美术/7-材质与着色器/6-图形管线与GLSL简单入门.md
new file mode 100644
index 0000000..3c09824
--- /dev/null
+++ b/mcguide/16-美术/7-材质与着色器/6-图形管线与GLSL简单入门.md
@@ -0,0 +1,206 @@
+---
+front:
+hard: 入门
+time: 20分钟
+---
+
+# 图形管线与GLSL简单入门
+
+## 前言
+本文将简单介绍图形管线、shader与glsl相关内容,并提供一些相关的学习建议。
+
+## 图形管线与着色器
+### 什么是图形管线
+图形管线也叫渲染管线,是将渲染数据(例如模型、材质、贴图等内容)进行整合、运算并最终显示到屏幕的流程。渲染管线将渲染的整个流程划分为了若干个阶段,每一个阶段的计算过程都依赖上一个阶段的计算结果,就像工厂内的生产流水线,每一个环节都有专门的步骤来对原材料进行加工,这就是它被称为渲染管线或渲染流水线的原因。
+
+### 图形管线阶段
+图形管线简单而言可以分为`程序阶段`、`几何阶段`以及`光栅化阶段`三大阶段,每一大阶段又由若干个小阶段或者细节构成。
+#### 程序阶段
+程序阶段又称为应用阶段,这个阶段是由CPU负责完成的。在这个阶段中,CPU需要处理待渲染的数据,包括加载资源,物理计算,计算相机、光源、场景模型以及人物等对象的位置与动画帧,剔除冗余的渲染数据(可能会使用到**动态加载**、**遮挡剔除**以及**可见性剔除**等技术),并最终将这些数据整理成GPU可理解的形式(位置、法线、uv坐标、切线以及颜色值等),提交给GPU来进行下一个阶段的计算。
+
+#### 几何阶段
+程序阶段的数据提交到GPU之后,几何阶段就开始了。渲染数据在几何阶段中主要以几何图形数据的形式存在,在这个阶段中,开发者可以定义用于几何阶段的着色器(顶点着色器、曲面细分着色器、几何着色器等),并且配置几何阶段的相关操作。
+一般而言,渲染数据在几何阶段会经过**顶点着色**、**曲面细分**、**几何着色**、**裁剪**、**屏幕映射**等过程。
+`顶点着色`:开发者可以开发**顶点着色器**来自定义这一阶段,一般用于计算顶点动画(skinning)、空间变换、顶点光照以及完成其他逐顶点计算操作。
+`曲面细分与几何着色`:开发者可以编写曲面细分着色器以及几何着色器来自定义这两个阶段,它们一般用来实现LOD、模型平滑与毛发等涉及顶点增删的操作。
+`裁剪`:这个阶段用来将相机看不见的渲染数据剔除掉,以节省接下来的运算性能。例如,完全超出屏幕可见范围、没有面向相机或者距离相机极远的三角形都会被直接抛弃,无法进入下一个渲染管线阶段。在默认情况下,渲染管线会开启`背面剔除`,也就是将没有面朝相机的三角形抛弃,仅保留面朝相机的部分,这一操作可以节省后续阶段大约一半的渲染开销。当然,裁剪模式也可以配置为`前面剔除`,也就是保留背对相机的三角形,抛弃面向相机的三角形。
+`屏幕映射`:在完成了裁剪操作后,GPU会将剩余三角形的各个顶点坐标,转化为屏幕坐标,然后交由接下来的光栅化阶段进行计算。
+
+#### 光栅化阶段
+光栅化阶段负责将几何阶段传递过来的几何信息,转换为屏幕上的颜色信息。具体而言,光栅化可以包括这些阶段:
+`图元组装和三角形遍历`:这两个过程负责处理几何阶段传入的几何数据,整理并计算每一个三角形在屏幕上占据哪些像素,并根据像素位置与三角形顶点的位置关系进行插值,生成**片元**。
+> 片元是顶点数据经过三角形遍历后的插值结果,同时还额外包含了一些着色器内部定义的信息,可以理解为候选像素。
+
+
+`片元着色`:开发者可以编写**片元着色器**来自定义这一阶段,片元着色通过结合片元数据(屏幕坐标、uv值、深度值等)和程序给定的数据(例如游戏时间、纹理、光照信息等),并依照一定规则来计算**片元**的颜色与透明度等信息。
+`片元测试`:在完成片元着色后,所有片元都将经过深度测试、透明度测试、模板测试等测试操作,这些测试分别检查片元深度、片元透明度、片元模板值是否能够满足某个比较条件(大于、等于、小于或者不等于)。如果片元没有通过其中一种测试,那么这个片元会被丢弃,例如透明度为0的片元一般不能够通过透明度测试,因为这个片元会被认为是看不见的。
+`混合`:完成片元测试之后,管线会根据由远及近的顺序,对单个像素下的所有剩余片元进行透明度混合。透明度混合的计算方式(例如背景色与前景色的权重等)可以由开发者配置。通过透明度混合,我们才能看到常见的水面遮蔽河床,或者有色玻璃覆盖后方的景象:
+
+
+### 着色器
+着色器是一系列可以在GPU图形管线上运行的程序的总称,《我的世界》允许使用`顶点着色器`与`片元着色器`进行材质开发,它们分别在**顶点着色阶段**和**片元着色阶段**起作用。
+
+***顶点着色器***(Vertex Shader)是基于三角形顶点进行计算的。在顶点着色器中,开发者可以拿到一个顶点的位置、法线以及uv等信息,并采用逐顶点的算法,例如顶点动画计算以及逐顶点光照等,最后输出顶点的位置信息以及其他自定义的变量信息。由于游戏中的顶点数量往往都比片元要少得多,因此如果将片元着色器中的耗时计算操作迁移至顶点着色器来进行(例如计算玩家视线方向、计算变换矩阵等),一般都能够使材质的性能得到显著提升,但是涉及表现力的部分会大打折扣。
+
+上图中,左边为逐顶点光照,右边为逐像素(逐片元)光照,可以看到逐顶点光照的效果不均匀而且粗糙,逐片元光照的效果更为细腻而且均匀。
+**片元着色器**(Fragment Shader)是基于片元进行计算的。在片元着色器中,开发者可以获取由顶点着色器传递下来的插值信息(uv值、位置信息、颜色值等),并进行逐片元/像素的计算。片元可以视为经过插值之后的候选像素,单次渲染的数量一般比顶点数更高,因此逐顶点的算法能够带来更细致且精确的效果,但是性能开销也比逐顶点计算更高。
+
+上图为基于片元着色器的法线贴图效果,方块模型本身仅有简单的六个面,但是使用了逐片元的法线贴图,可以使方块表面在视觉上呈现凹凸不平的效果。
+
+## GLSL入门
+### 什么是GLSL
+GLSL全称是OpenGL Shading Language,是基于OpenGL的类C着色语言。开发者可以使用GLSL来编写包括顶点着色器、几何着色器、片元着色器等在内的各种着色器,实现对材质渲染过程的高度定制化。OpenGL目前受到市面上绝大多数的GPU支持,因此使用GLSL进行着色器开发有着跨平台的优势。
+
+目前MC的渲染(非渲染龙)是基于OpenGL实现的,不同平台的不同设备支持的OpenGL版本各有不同,越高级的OpenGL版本能使用的特性就越多,但因此兼容的设备就越少,开发者应考虑shader所使用的特性是否能够兼容目标设备。
+
+### GLSL语法基础
+本节默认开发者对C语言语法有基本的了解,或者有一定的编程基础。
+#### 类型
+GLSL的类型以向量、矩阵、纹理为主,常见类型如下:
+```glsl
+float | int | void: 与C语言对应的浮点数、整型与空类型
+vec2 | vec3 | vec4: N维浮点数向量
+mat2 | mat3 | mat4: NxN浮点数矩阵
+sampler2D | samplerCube: 2D纹理与立方体纹理
+```
+GLSL的类型定义与C语言没有太大的差别:
+```glsl
+vec3 v3 = vec3(1.0); // 定义一个全为1.0的三维向量
+```
+GLSL允许定义一维数组,但是数组长度应为常量:
+```glsl
+float myFloats[3] = float[3](1.0, 2.0, 3.0);
+```
+还可以使用结构体,增加代码可读性:
+```glsl
+struct MyFloatType{
+ float x;
+};
+
+MyFloatType num;
+```
+#### 运算
+在GLSL中,对向量访问的支持有多种方式,比较自由:
+```glsl
+vec3 v3;
+// 以下三个语句都是合法且等价的
+v3 = vec3(0.0);
+v3.rgb = vec3(0.0);
+v3.xyz = vec3(0.0);
+// 允许对单个分量进行修改和访问
+v3.x = 1.0;
+v3.z = v3.x;
+v3[1] = 7.0; // 数组下标访问 v3[1] == v3.y == v3.g
+v3.xyz = v3.xxx; // 分量访问 case 0
+v3.rgb = v3.zyz; // 分量访问 case 1
+```
+GLSL支持一些基础的运算:
+```glsl
+vec3 a = vec3(0.5);
+vec3 b = vec3(1.0, 2.0, 3.0);
+vec3 c = a * b; // vec3(0.5, 1.0, 1.5)
+vec3 d = b - a; // vec3(0.5, 1.5, 2.5)
+vec2 e = a.rg * b.xx + c.gr; // 分量访问混搭计算
+
+// 矩阵计算
+mat3 ma = ...
+mat3 mb = ...
+mat3 mc = ma * mb; // 矩阵相乘
+vec3 myVector = vec3(1.0);
+vec3 result = mc * myVector; // 3x3矩阵乘以3x1向量,得到3x1向量
+```
+除此之外,GLSL还支持C语言中的比较、逻辑与或非等运算,开发者可以参考网络上的其他教程与文档进行学习。
+#### 特殊变量
+GLSL定义了一些内置变量,这些内置变量在顶点着色器和片元着色器中有所不同,以下是常见的内置变量:
+```glsl
+// 顶点着色器常见内置变量
+gl_Position: 顶点着色器的输出变量,开发者需要将顶点坐标的计算结果赋给该变量
+
+// 片元着色器常见内置变量
+gl_FragCoord: 记录当前片元的帧缓冲坐标,一般表示屏幕上的像素坐标
+gl_FragColor: 片元着色器的输出变量,开发者需要将片元着色的颜色结果赋给该变量
+```
+GLSL还允许定义`varying`、`uniform`和`attribute`变量,这些变量分别使用对应的关键词来修饰。
+`varying`变量是用于着色器内部传递数据的变量,一般用于将顶点着色器中的计算结果传递给片元着色器:
+```glsl
+// vertex示例
+varying float intensity; // 顶点着色器开头的varying变量定义
+intensity = uv.x; // 将uv值的x分量赋给intensity
+```
+在片元着色器中就可以拿到这个值:
+```glsl
+varying float intensity; // 片元着色器中同样需要定义这个varying变量
+float myResult = intensity * 2.0; // 利用varying值进行计算
+```
+`uniform`变量可以理解为着色器中的全局变量,这类变量一旦被定义,在整个渲染管线中的着色器中都可以被使用。uniform变量的值是CPU通过OpenGL提供的接口设置的,一般用于从CPU传递MVP矩阵、光源信息、时间以及纹理等具有通用性或全局性,且不依赖材质计算结果的数据。
+```glsl
+uniform mat4 WORLDVIEWPROJ; // MC中的uniform变量之一,用于将顶点从模型空间变换为透视投影空间
+gl_Position = WORLDVIEWPROJ * vPos;
+```
+`attribute`用于修饰顶点信息变量,只能在顶点着色器中使用,`attribute`变量用于接收从CPU传递而来的顶点信息:
+```glsl
+attribute vec4 vPos; // 表示顶点位置信息
+attribute vec3 vNormal; // 顶点法线信息
+```
+> `attribute`与`uniform`的不同在于,`attribute`变量记录的是单个顶点的具体信息,而`uniform`变量记录的信息是全局共享的,与具体顶点无关。
+#### 函数与内置函数
+GLSL允许我们自定义函数,自定义函数可以在着色器内部使用:
+```glsl
+float myMix(float a, float b, float alpha){
+ // 根据alpha提供的比例来混合a和b
+ return a + (b - a) * alpha;
+}
+```
+我们还可以使用关键字`in` `out` `inout`,来修改函数参数的使用性质:
+```glsl
+void sum1(in float a, in float b, out float result){
+ // a和b作为输入参数,result作为输出参数
+ result = a + b;
+}
+void sum2(inout float a, in float b){
+ // a同时作为输出和输出参数,b仅作为输入参数
+ a = a + b;
+}
+```
+GLSL还内置了一些函数,可以方便我们的着色器开发:
+```glsl
+max与min: 取最大和最小值
+mix: 按照给定的alpha值来混合给定的两个值或向量
+normalize: 求向量的标准化
+length: 求向量长度
+step: 比较给定两个数的大小,返回1.0或者0.0
+dot:求向量点乘结果
+cross:求向量叉乘结果
+```
+其他的内置函数还有很多,开发者可以参考网络上的相关文档。
+### 着色器结构示例
+不同游戏由于实现方案不同,着色器的具体细节也不相同,在此仅提供一份glsl着色器的基本框架以供参考,具体到《我的世界》,开发者可以参考官方现有的材质进行熟悉。
+```glsl
+// 顶点着色器示例
+uniform mat4 MVP; // CPU设定的MVP矩阵
+attribute vec4 vPos; // 顶点属性 - 顶点坐标
+attribute vec4 vColor; // 顶点属性 - 顶点色
+
+varying vec4 outColor; // varying变量 用于传递给片元着色器
+
+void main(){
+ outColor = vColor;
+ gl_Position = MVP * vPos; // 将变换后的顶点坐标赋值给内置变量
+}
+```
+```glsl
+// 片元着色器示例
+varying vec4 outColor; // 接收来自顶点着色器的varying
+
+void main(){
+ gl_FragColor = vec4(outColor.rgb, 1.0); // 利用分量访问将outColor的rgb信息输出,透明度使用常量1.0
+}
+```
+## 学习建议
+本文仅负责简单的入门教学,开发者如果希望深入学习,可以考虑参考其他网络资料:
++ [零基础如何学习计算机图形学](https://www.zhihu.com/question/41468803/answer/1040420856)
++ [GAMES101-现代计算机图形学入门](https://www.bilibili.com/video/BV1X7411F744)
+
+如果开发者希望进一步学习OpenGL,可以参考相关资料:
++ [LearnOpenGL](https://learnopengl-cn.github.io/)
++ [GLSL中文手册](https://github.com/wshxbqq/GLSL-Card)
diff --git a/mcguide/16-美术/7-材质与着色器/README.md b/mcguide/16-美术/7-材质与着色器/README.md
new file mode 100644
index 0000000..6b759c7
--- /dev/null
+++ b/mcguide/16-美术/7-材质与着色器/README.md
@@ -0,0 +1,3 @@
+# 前言
+
+本教程将向大家讲解游戏中常见的一些对象是使用什么材质进行渲染,该材质中又是声明了哪个shader;在不同的shader中,我们能够使用哪些uniform常量;另外也将详细介绍材质的配置方式。
\ No newline at end of file
diff --git a/mcguide/16-美术/7-材质与着色器/images/blend_glass.png b/mcguide/16-美术/7-材质与着色器/images/blend_glass.png
new file mode 100644
index 0000000..77e333f
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/blend_glass.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/blend_water.png b/mcguide/16-美术/7-材质与着色器/images/blend_water.png
new file mode 100644
index 0000000..fcdecca
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/blend_water.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/blinn1.gif b/mcguide/16-美术/7-材质与着色器/images/blinn1.gif
new file mode 100644
index 0000000..6312dfa
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/blinn1.gif differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/blinn2.gif b/mcguide/16-美术/7-材质与着色器/images/blinn2.gif
new file mode 100644
index 0000000..f06a615
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/blinn2.gif differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/entity_static.png b/mcguide/16-美术/7-材质与着色器/images/entity_static.png
new file mode 100644
index 0000000..40b29ba
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/entity_static.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/fancy_switch.png b/mcguide/16-美术/7-材质与着色器/images/fancy_switch.png
new file mode 100644
index 0000000..96f6c58
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/fancy_switch.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/frag_normal.gif b/mcguide/16-美术/7-材质与着色器/images/frag_normal.gif
new file mode 100644
index 0000000..9b5ea88
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/frag_normal.gif differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/inversed_steve.png b/mcguide/16-美术/7-材质与着色器/images/inversed_steve.png
new file mode 100644
index 0000000..8c31949
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/inversed_steve.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/material_head.png b/mcguide/16-美术/7-材质与着色器/images/material_head.png
new file mode 100644
index 0000000..1053151
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/material_head.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/material_list.png b/mcguide/16-美术/7-材质与着色器/images/material_list.png
new file mode 100644
index 0000000..fec4349
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/material_list.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/materialsample1.png b/mcguide/16-美术/7-材质与着色器/images/materialsample1.png
new file mode 100644
index 0000000..5e5db43
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/materialsample1.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/materialsample2.png b/mcguide/16-美术/7-材质与着色器/images/materialsample2.png
new file mode 100644
index 0000000..a6c13ec
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/materialsample2.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/materialsample3.jpg b/mcguide/16-美术/7-材质与着色器/images/materialsample3.jpg
new file mode 100644
index 0000000..3ff9b1f
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/materialsample3.jpg differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/multipass_drawline.png b/mcguide/16-美术/7-材质与着色器/images/multipass_drawline.png
new file mode 100644
index 0000000..f7cf8b4
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/multipass_drawline.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/old_tv.gif b/mcguide/16-美术/7-材质与着色器/images/old_tv.gif
new file mode 100644
index 0000000..3e0c6ba
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/old_tv.gif differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/rasterization.png b/mcguide/16-美术/7-材质与着色器/images/rasterization.png
new file mode 100644
index 0000000..e760256
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/rasterization.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/scan.gif b/mcguide/16-美术/7-材质与着色器/images/scan.gif
new file mode 100644
index 0000000..2c8d079
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/scan.gif differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/shader_headfiles.png b/mcguide/16-美术/7-材质与着色器/images/shader_headfiles.png
new file mode 100644
index 0000000..b6b03cf
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/shader_headfiles.png differ
diff --git a/mcguide/16-美术/7-材质与着色器/images/vertex_color.jpg b/mcguide/16-美术/7-材质与着色器/images/vertex_color.jpg
new file mode 100644
index 0000000..1a7eee8
Binary files /dev/null and b/mcguide/16-美术/7-材质与着色器/images/vertex_color.jpg differ
diff --git a/mcguide/16-美术/9-特效/00-特效编辑器简介.md b/mcguide/16-美术/9-特效/00-特效编辑器简介.md
new file mode 100644
index 0000000..098b66a
--- /dev/null
+++ b/mcguide/16-美术/9-特效/00-特效编辑器简介.md
@@ -0,0 +1,34 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/6d6b026f-3b65-483c-afeb-4d008c07d436.png
+hard: 入门
+time: 5分钟
+selection: 40
+---
+
+# 特效编辑器简介
+
+特效编辑器是一个用于编辑特效、挂接特效到模型的编辑器。同时在最新版本也引入了部分原生音效的挂接。
+
+它支持:
+1. 编辑中国版粒子、序列帧特效,将其挂接至骨骼模型,并在内嵌游戏中预览;
+2. 挂接微软粒子到原版模型,并在内嵌游戏中预览;
+3. 挂接原生游戏音效到骨骼模型、原版模型。
+4. 配置骨骼模型所使用的材质,并实时重载刷新材质效果。
+主界面模块如下图所示:
+
+
+
+包含以下重要模块:
+
+1. **属性面板**,用于显示或者修改所选项的属性,包含:① 显示/修改粒子特效及序列帧特效的属性;② 显示模型骨骼属性;③ 显示时间轴轨道属性(如播放延迟等)。
+
+2. **时间轴面板**,用于控制特效和人物动画的播放,包含:① 模型动作的播放、停止、逐帧播放;② 控制模型动作是单次播放还是循环播放;③ 控制单次播放的预览时间区间;④ 拖动拖柄控制时间轴上的特效、音效开始播放时点。
+
+3. **资源管理器面板**,用于显示和管理当前拥有的资源,与其他编辑器的资源管理器相同。
+
+4. **模型挂接面板**,用于挂接特效到模型骨骼挂点/锚点上。通过调整挂点、锚点的位置,就能够控制不同特效播放的位置。同时也可以用于将模型挂接到模型上。
+
+5. **预览设置面板**,用于设置模型动作预览的选项,同时也能通过场景模型、场景特效功能支持多个不同的模型及特效在指定的位置进行播放。
+6. **工具栏**,位于界面顶部,左侧的移动、旋转、复位用于对挂点进行可视化操作,右侧按钮用于调整当前相机视角和项目的存储、运行。
+
+这几个面板组成了特效编辑器的主体功能,各个部分的详细使用说明请参考后续文档。
diff --git a/mcguide/16-美术/9-特效/10-模型导入.md b/mcguide/16-美术/9-特效/10-模型导入.md
new file mode 100644
index 0000000..d3140b5
--- /dev/null
+++ b/mcguide/16-美术/9-特效/10-模型导入.md
@@ -0,0 +1,203 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/35bf289d-584b-4565-999b-f7f5360ee356.png
+hard: 入门
+time: 10分钟
+---
+
+# 模型导入与配置
+
+**本文主要介绍以下内容:**
+
+1. 特效编辑器里支持的模型种类有哪些。
+2. 特效编辑器里如何导入外部模型。
+3. 特效编辑器里如何使用模型。
+
+## 模型支持
+
+在我的世界中国版中,模型的支持主要有3种格式:
+
+1. **原版生物模型**:以 .json 为后缀的原版生物模型文件。
+
+2. **原版方块模型**: 以 .bbmodel 为后缀的原版方块模型文件。
+
+3. **FBX通用模型**: 以 .fbx 为后缀格式的模型文件。这是一种通用的模型格式,目前几乎所有主流的三维软件中都可以支持 fbx 模型的导出,内部包含信息很丰富,当前特效编辑器主要支持骨骼模型贴图和骨骼动画。
+
+
+## 常用目录介绍
+
+
+
+如上图所示,在特效编辑器中,我们可以轻松地通过资源管理器的**精简模式**找到常用的模型、特效、贴图文件。善用资源管理器右侧的搜索功能,即可通过文件名称 关键词精准定位文件。
+
+如果你更习惯使用资源管理器的**完整模式**,你可以关注以下目录来定位你需要的资源(它们也被收编在完整模式默认的常用目录中):
+
+1. **资源包 effects 目录**:中国版自定义特效目录,包括创建和导入的自定义特效文件都存放在这里目录里。
+
+2. **资源包 models 目录**:模型相关目录,导入的模型骨骼、骨骼动作、骨骼模型网格、原版方块模型、原版生物模型和对应各个模型的特效挂接文件都存放在这个目录的对应文件夹下。
+
+3. **资源包 textures 目录**:贴图目录,特效贴图、骨骼贴图和动画序列帧文件都存放在这个目录的对应文件夹下。
+
+
+
+## 模型的导入
+
+如下图所示,点击资源管理器【导入】按钮,展开【模型】子菜单,即可发现有4个主要选项:
+1. 骨骼模型(fbx)
+2. 骨骼模型(json)
+3. 原版方块模型
+4. 原版生物模型
+
+> “骨骼模型动作(fbx)”选项用于单独导入骨骼模型动作文件,不属于我们这里介绍的导入模型操作。
+
+下面将分别介绍这些资源的导入方式:
+
+
+
+### 1. 导入fbx模型
+
+我们这里以一个名为`datiangou`的fbx模型导入流程为例。
+
+在导入之前,可以先观察`datiangou`模型有哪些东西,打开文件夹,可以看到里面包含了一张`datiangou.png`的**贴图**和若干个 .fbx 文件,为什么有这么多 .fbx 文件呢?
+
+
+
+通常在制作骨骼模型的同时,也会制作相应的骨骼动画(即模型的动作),每个骨骼动画都会导出成单独的 .fbx 文件。使用 [Autodesk FBX Review](https://www.autodesk.com/products/fbx/fbx-review) 可以预览 fbx 模型和播放相应的动作。在这些 fbx 模型中,有一个是**主模型文件**,即其他的动画都是基于这个主模型为基准导出的,这个和具体的导出配置有关,这里不做详细介绍,只要了解到有**主模型文件**这个概念即可。
+
+接下来就开始正式导入 fbx 模型了,在资源管理器左上角点击【导入】-【模型】-【骨骼模型】,会出现文件夹选择界面,选择模型所在文件夹,点击确定,出现界面如下:
+
+
+
+各个选项的含义如下:
+
+- **选择主模型**,整个文件夹下的其他以此模型为基准的骨骼动画都会被自动导入,如果主模型选择错误,可能会导致其他骨骼动画导入异常。
+
+- **选择贴图**,有些模型可能包含多个贴图文件,这里仅支持单个贴图,所以要选择好相应的贴图文件。如果模型需要明度贴图,也可在“明度贴图”一栏选择相应的贴图文件。
+
+- **动态加载**,该选项用于控制模型在游戏中的加载方式,动态加载是指在游戏中使用到该模型时才会去加载对应的模型资源。因为游戏默认启动时全部加载,当包含模型较多时,建议使用动态加载,控制加载数量。
+
+- **下次自动选择FBX文件和贴图**,勾选此项下次会默认选择该文件夹下的贴图文件和模型文件(可在编辑器右上角【作品】-【设置】-【其他】- 【导入FBX资源时自动选择文件与贴图】停用该功能)。
+
+当模型导入完成后,会弹出提示导入成功的弹窗,这样fbx模型的导入工作就结束了。
+
+
+
+导入后文件将被自动归类放置,贴图文件会被存放至资源包 textures 文件夹下,模型的骨骼、动作等将被解析成编辑器使用的文件格式,并移动至资源包 models 文件夹下的各个对应文件夹内。
+
+### 2. 导入骨骼模型(json)
+
+json格式的骨骼模型实际上就是fbx模型导入后在编辑中的文件结构,为了方便开发者们复用已有作品的模型,特地支持了json格式的骨骼模型导入:
+1. 转换后的骨骼模型会按照下列结构存放:
+
+
+
+1. 点击导入骨骼模型(json):
+
+
+
+3. 选择目录中的`netease_models.json`文件,即可导入转换后的骨骼模型,并在特效编辑器中查看模型。
+
+
+
+
+
+### 3. 导入原版生物模型
+
+下面我们将导入一个原版生物模型。我们以一个名为`zhizhujing`的原版生物模型为例。
+
+原版生物模型通常使用Blockbenck软件制作而成,需要进行原版生物模型制作的开发者可以通过[Blockbench官方网站](https://www.blockbench.net/)下载软件。制作完模型后,我们将模型、动作文件、贴图统一保存在一个文件夹中,然后开始导入工作。
+
+在标准命名规则下,这三个文件分别为:
+- `xxxx.geo.json`:模型文件
+- `xxxx.animation.json`:动作文件
+- `xxxx.png`:贴图文件
+
+在资源管理器左上角点击【导入】-【模型】-【原版生物模型】,找到模型所在的文件夹,然后选中`zhizhujing.geo.json`。点击确认后,会弹出如下所示的窗口:
+
+
+
+编辑器会自动识别模型的动作文件和贴图位置,如果开发者希望使用其他的文件替换自动识别的结果,可以直接在上面修改。确认无误后,即可点击【确认】按钮。
+
+当模型导入完成后,会弹出提示导入成功的弹窗,这样原版生物模型的导入工作就结束了。
+
+
+
+### 4. 导入原版方块模型
+
+接下来尝试导入原版方块 bbmodel 模型,同样点击【导入】-【模型】,并选择【原版方块模型】,出现文件选择界面,选择下载的demo/bbmodel/decoration文件夹下的bbmodel文件,选择完成后出现如下导入界面:
+
+
+
+各个选项的含义如下:
+
+- **命名空间**,允许开发者在导入时自定义模型的命名空间,方便后续操作。
+- **模型ID**,导入模型的唯一ID。
+- **方块物品贴图**,一般 bbmodel 中会内置贴图,如果需要引入外部贴图可以在这里进行选择。
+- **开启环境光遮蔽**,用于提高模型对光线的处理。
+
+bbmodel模型将被解析为编辑器使用的文件格式,并存放在 models/netease_block 文件夹(模型)和 textures/blocks 文件夹(贴图)下,具体的使用方法可以参考 [自定义方块模型](../../20-玩法开发/15-自定义游戏内容/2-自定义方块/5-自定义方块模型.md)。
+
+## 模型的使用和预览
+
+导入模型完成后,我们在特效编辑器【模型挂接】窗口的顶部通过下拉框可以将主角模型切换为我们导入的模型,以便进行特效挂接等后续工作。
+
+
+
+### 1. 第一人称模型修改
+
+第一人称模型是指位于第一人称视角下的模型,对于 Steve 来说,即相当于 Steve 的手臂,但是第一人称模型可以不仅仅是手臂,例如将第一人称模型设置为大天狗,即大天狗的第一视角下仍然会再渲染一个大天狗出来。
+
+> 仅当模型为骨骼模型时,才支持第一人称模型,且第一人称模型也需要为骨骼模型。所以默认的 Steve 不支持第一人称模型。
+
+**修改第一人称模型的步骤如下:**
+
+1. 在模型挂接面板将模型修改为导入的骨骼模型
+2. 修改挂点面板的第一人称模型,修改该项改为导入的第一人称模型(手臂模型)
+3. 修改挂点面板的第一人称模型动作,修改该项为对应的(挥舞)动作
+4. 切换视角到第一人称查看该模型
+
+
+
+### 2. 骨骼模型材质配置
+当所编辑的模型是骨骼模型时,模型挂接面板相比原版模型会增加几个选项,如下图所示:
+
+
+
+#### 配置本体模型的材质
+如[骨骼模型自定义材质和贴图](../6-模型和动作/04-骨骼模型的使用.md#_7-模型使用自定义材质及更多贴图)所描述,我们可以在netease_models.json中定义骨骼模型的材质和贴图。
+在特效编辑器,也对应支持了上述字段的可视化配置,如上图中的紫色部分所示,点击齿轮按钮即可打开材质配置的弹窗,进行整个骨骼本体模型的材质和贴图配置。
+
+
+#### 配置指定骨骼的材质
+如[骨骼模型自定义多个材质和贴图](../6-模型和动作/04-骨骼模型的使用.md#_8-模型使用多个材质及贴图)所述,我们可以在netease_models.json通过useSplitMeshes和splitBonesGroup字段对模型的其中一部分骨骼配置自定义材质和贴图。
+在特效编辑器也对应支持了上述字段的可视化配置,如上图中红色框选部分,通过勾选【启用按骨骼配置材质】选项,再在下方的骨骼层级中选中任意骨骼,即可在右侧的属性栏查看和配置该骨骼的材质和贴图。
+
+#### 配置多pass材质
+如[骨骼模型自定义多Pass材质](../6-模型和动作/04-骨骼模型的使用.md#9骨骼模型自定义多pass)所述,我们可以在netease_models.json将material属性改写成一个列表,按照顺序配置多个材质,则引擎加载时会按照列表顺序一次加载每一个pass的材质。
+在特效编辑器也对应支持了上述内容的可视化配置,如下图所示,无论是配置指定骨骼还是配置本体模型的材质,材质和低端机材质均为可自定义长度的材质列表,开发者可以根据需要自行添加和设置多pass材质。
+
+
+
+
+
+
+
+### 3. 重载材质
+当我们在配置和调试材质时,难免会有修改材质和着色器(shader)代码的需求,在以往这些修改一般需要重启游戏引擎才能生效,现在,特效编辑器的顶部工具栏新增了【重载材质】按钮,点击后,可以直接实时重载引擎内的材质效果,实现“热更”的效果,提升开发者调试材质shader代码的效率,如下图:
+
+
+
+
+
+### 4.骨骼模型挂点偏移
+当所选择的模型是骨骼模型时,在任意骨骼创建一个挂点,即可在挂点的属性面板看到一系列快捷偏移的属性,点击属性右侧的偏移按钮,即可快速将该挂点偏移到对应面或者模型的中心。
+> 外部建模软件和MC引擎的坐标系可能不一致,因此快捷偏移所标注的面(上下左右前后)和开发者实际感知的面可能会出现没有一一对应的情况。
+
+
+
+
+### 5.删除单个模型动作
+若您导入模型后希望删除指定动作,可在模型挂接面板的动作列表选中指定动作,并右键,点击删除按钮后可将该模型动作完全删除,如下图所示。
+
+
+
+
diff --git a/mcguide/16-美术/9-特效/20-原版特效创建与导入.md b/mcguide/16-美术/9-特效/20-原版特效创建与导入.md
new file mode 100644
index 0000000..969ff27
--- /dev/null
+++ b/mcguide/16-美术/9-特效/20-原版特效创建与导入.md
@@ -0,0 +1,62 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/e0cd6be8-6360-4a79-99fb-17ff5344e707.png
+hard: 入门
+time: 15分钟
+---
+
+# 原版特效创建与导入
+
+本篇文档主要介绍以下内容:
+
+1. 如何创建一个原版粒子特效。
+2. 如何将创建好的原版粒子特效导入特效编辑器。
+
+## 原版粒子特效的创建
+
+### 使用编辑器创建、编辑原版粒子
+
+**原版粒子特效**有时也被称作**微软粒子特效**,它可以被用来挂接到**原版生物模型**上,增加美术表现力。我们可以在特效编辑器中直接创建特效并对其进行编辑,具体操作详见[这篇文档](./21-原版特效属性详细说明.md#创建原版粒子特效配置)。
+
+### 使用Snowstorm创建原版粒子特效
+
+部分开发者也习惯使用Snowstorm软件来创建。你可以通过它的[官方Github页面](https://github.com/JannisX11/snowstorm)找到并使用其[网页版](https://snowstorm.app/)或[VSCode插件版](https://marketplace.visualstudio.com/items?itemName=JannisX11.snowstorm)。
+
+
+
+这两个版本的界面是相似的,如下图。
+
+
+
+我们可以在左侧修改粒子的属性字段,然后在右侧进行效果预览。Snowstorm也提供了若干模板供用户学习参考,大家可以在顶部【Examples】标签下点击应用。
+
+
+
+在这篇文档中,我们不会对每个字段详细的书写方式进行逐一介绍,已有第三方教程对原版粒子的编写方式进行了较为详细的介绍(例如知名创作者McHorse拍摄的 **《如何使用 Snowstorm(雪暴) 创建粒子特效》** 视频教程),大家可以自行搜索学习。
+
+在制作原版粒子的时候请注意以下两点:
+
+1. 导入原版粒子特效时,一定要注意特效文件的identifier不能与已有的特效相同,否则后导入的特效会直接覆盖先前导入的特效。
+
+
+
+2. 原版粒子特效配置文件中有一项【**Emitter Lifetime**】,用于控制粒子特效的播放是单次还是循环播放。如果选用循环播放(looping)并绑定在实体动作上,则会在实体执行该动作后持续存在于挂点位置,不会自动消失,且类似行走、跑步、攻击等高频重复的动作将会反复产生循环播放的粒子特效导致较为严重的卡顿问题。所以如果希望特效在动作播放后能消失而不是持续驻留,需要将【Emitter Lifetime】的**模式(Mode)** 选为 **单次(once)** 而不是 **循环(looping)**。
+
+
+
+## 原版粒子特效的导入
+
+如果你使用了Snowstorm创建原版粒子,那么在创建完毕后,就需要将其导入编辑器作品中。我们在编辑器的资源管理器中点击【导入】-【特效】-【原版粒子特效】,然后选择刚刚编辑好的原版粒子特效文件。
+
+> 原版粒子标准命名格式为 `xxxx.particles.json`。
+
+选择好粒子文件后,即会弹出下面的弹窗,用于指定特效的纹理贴图。这里默认使用的是引擎内置的贴图,如果开发者希望使用其他的纹理,需要再此手动更换。确认无误后,即可点击【确定】按钮进行导入。
+
+
+
+当粒子导入完成后,会弹出提示导入成功的弹窗,这样原版粒子特效的导入工作就结束了。
+
+
+
+> 如果你又在Snowstorm中编辑了该粒子特效的本地源文件,也没有关系,只需要点击属性面板的【热更新】按钮,即可将修改同步到编辑器中。
+
+
diff --git a/mcguide/16-美术/9-特效/21-原版特效属性详细说明.md b/mcguide/16-美术/9-特效/21-原版特效属性详细说明.md
new file mode 100644
index 0000000..f73b9df
--- /dev/null
+++ b/mcguide/16-美术/9-特效/21-原版特效属性详细说明.md
@@ -0,0 +1,403 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/41c658f3-1995-4112-9456-2a174ca7d453.png
+hard: 入门
+time: 30分钟
+selection: 2
+---
+
+# 原版特效属性详细说明
+
+本文围绕原版粒子特效的属性面板进行说明和演示原版粒子是如何制作的。主要内容有:
+
+1. 创建原版粒子特效配置
+2. 基础知识
+3. 发射器属性组
+4. 粒子属性组
+5. molang 变量
+6. 发射骨骼模型
+
+
+
+## 创建原版粒子特效配置
+
+原版粒子特效配置(下文简称粒子配置)可以通过snowstorm进行创建并导入(具体参考上一篇文章); 还可以通过编辑器的新建文件向导进行创建。本文使用的是第二种方法创建,然后通过资源管理器,鼠标右键配置文件->快速预览 可以看到一个红色心形的粒子。已有的粒子配置可以通过属性栏的“使用模板”,快速生成各种样式的配置。
+
+
+快速预览使用新建文件先导创建的粒子特效:
+
+
+## 原版粒子模板
+
+在特效编辑器中,我们内置了若干原版粒子配置模板,供开发者学习研究。如果想使用这些配置模板,只需要在粒子json文件的属性窗口找到蓝色的【**使用模板**】按钮,点击后在弹出的窗口中通过下拉框选择想要应用的配置模板即可。
+
+
+
+## 原版粒子特效的制作基础知识
+
+一个完整原版粒子特效配置是由一个json文件和对应的纹理文件构成的。每一个配置都有一个唯一的标识:identifier,如果有两个相同identifier的原版粒子特效,那么后面加载的会覆盖前面加载的配置。
+
+很多时候,开发者需要使用第三方编辑器如snowstorm对粒子配置进行修改,因此属性面板提供一个热更新的按钮,点击后会让编辑器重新加载这个粒子配置。
+
+组件的概念:一个系统性的功能,可以拆分成多个相互独立的小功能,这些小功能我们称为组件。原版粒子特效就是根据这种思想进行设计的,例如粒子的生命周期可以是一个组件,粒子的运动可以是另一个组件。原版粒子特效配置拆分的组件及具体含义可以查阅[官方文档](https://learn.microsoft.com/en-us/minecraft/creator/reference/content/particlesreference/particlecomponentlist)。
+
+组件与属性面板里属性的关系:大部分情况下是一个或同一类组件对应一个属性, 例如Emitter Rate Components这个类型的组件对应"发射器->速率"这个属性。
+
+纹理:除了可以选择当前存档里的图片作为纹理外,编辑器还提过一个默认粒子纹理图片的选项:textures/particle/particles,这个图片存在于引擎自带资源里。纹理的具体使用放在后面的粒子部分进行讲解。
+
+材质:现提供三种基本材质供开发者选择,每种材质作用如下:
+
+ alpha : 使用了alpha测试,单面
+ blend : 使用颜色混合,多用于半透明的纹理,双面
+ opaque: 不透明,单面
+
+一个原版粒子特效实例(下称特效实例)是指使用某一个粒子特效配置在游戏引擎里生成一个正在播放的特效实例。一个特效实例由发射器和发射器发射的粒子构成,一般情况下发射器的所在的位置就是这个特效实例的本地空间坐标原点。
+
+mc里的特效实例有两种承载方式,一种是在世界空间单独存在,如快速预览的特效实例;一种是挂接在其他实体节点上的,如挂接在原版模型的锚点上,需要原版模型动作进行驱动播放。不同承载方式粒子所使用的坐标系也不同。属性面板中的“空间”属性共同控制所使用的坐标系,规则如下:
+
+- 本地坐标:当勾选时,且特效挂在实体上,则粒子位置是相对实体空间进行模拟的。
+- 本地旋转:当勾选时,且特效挂在实体上,则粒子旋转是相对实体空间进行模拟的;只当'本地坐标'选中时,该选项才有效。
+- 本地速度:当勾选时,且特效挂在实体上,则粒子速度是相对实体空间进行模拟的;只当'本地坐标'不选中时,该选项才有效。
+
+例如一个绑定在实体上的粒子特效,如果没有勾选本地坐标,则实体移动时,特效实例不会跟着移动。
+
+
+## 发射器属性组
+
+
+
+从属性面板可以看出发射器由速率、生命周期、形状三种类型组件构成。下面分别讲解他们的用法:
+
+* 速率
+ 控制粒子发射数量及速率,目前支持有两种发射模式:1.instant 固定一次性发出多少粒子,2.steady 可指定生成效率,单位为(个/秒),即每秒钟平均发射多少个粒子,如果当前特效实例存在的粒子数等于“最大粒子数”,就不会再发射了。
+
+* 生命周期
+ 这个组件是管理发射器是否激活的,可以认为发射器有三种状态:激活,睡眠和过期, 只有激活的发射器才会发射粒子,过期的发射器无法激活,会等待其发射的粒子全部销毁后,该特效实例会被引擎销毁。生命周期的三种模式:
+
+ 1. once
+ 只激活一次,可指定激活时间(时长,单位s)。
+
+ 2. loop
+ 可循环激活,一个循环周期是激活时间+睡眠时间。注:该模式只对挂接的特效实例生效,非挂接的只会循环一次。
+
+ 3. expression
+ 使用molang表达式控制激活也销毁:
+ > 激活表达式:表达式计算结果为真(非0)时,即激活
+ > 过期表达式:表达式计算结果为真(非0)时,即过期
+
+* 形状
+ 实体有多种形状可以选择,其中point是最简单的一种, dics 是圆盘形状,entity bounding box 用绑定实体包裹盒。下面对组件的主要属性进行讲解。
+ 1. 偏移:当前发射器相对于特效实例本地空间的原点的偏移量。
+ 2. 方向类型:inwards 由当前发射形状由外向内发射,outward 由当前发射形状由内向外发射,Custom使用发射方向属性自定义
+ 3. 发射方向:一个三维向量表示发射粒子的运动方向,这个属性会被引擎归一化。如果粒子的运动模式是动态的,且有初始速度时,粒子就会向这个方向运动。
+ 4. 仅表面:仅在当前形状表面生成粒子。
+
+## 粒子属性组
+
+该属性组用于控制特效实例中所发射粒子的行为及表现。
+
+* 表现
+ 这个属组要用于控制粒子大小和朝向。首先需要知道的是每个特效实例里面的粒子都有速度,方向的属性,速度的方向并不等于方向。下面介绍的朝向模式中 direction_* 形的模式依赖方向属性进行计算。
+
+ 方向:
+
+ 我们有两种方式确定我们的粒子的方向,即属性"direction->方向模型"的选项:
+ > 使用速度方向:会使用速度方向作为粒子的方向:这里有一个"最小速度"的阈值,只有当速度大于这个值时才会更新粒子方向。
+ > 自定义:自定义粒子的方向, 这时粒子速度方向就不等于粒子方向。
+
+ 朝向模式:
+
+ 这个属性决定了一个粒子本地空间坐标系的朝向。最基本的,粒子正对着的方向就本地空间坐标系Z轴方向。 举个例子说明朝向的原理:假设你的朋友让你用手机帮她拍张个证件照,那么你首先要让手机的镜头取对准你的朋友,记住是用镜头,不是其他部位,然后你需要摆正你的手机,因为斜着拍或者倒着拍的效果都不是想要的。想想这过程本质就是:1.对准 2.摆正。怎么才算摆正呢?就要有个一个叫“上方”的方向,把手机的某个部位对准这个方向就是摆正。再看 lookat_xyz这个模式的实现:1.用粒子的轴方向对着摄像机,实现面向摄像机 2.旋转粒子使y轴尽可能朝向上方(世界空间的y轴方向)实现摆正。direction_*模式也可以按照这个过程去理解。一般没有特别说明的情况下,这个“上方”指的是世界坐标y轴的方向。
+
+ 
+
+ 1. rotate_xyz:
+ 对齐摄像机,使粒子本地空间坐标系Z轴方向于摄像机镜头方向相反。
+
+ 1. rotate_y:
+ 对齐摄像机但是只能绕世界空间y轴旋转
+
+ 1. lookat_xyz:
+ 面向摄像机,以世界坐标y轴的的方向为上方(即粒子的y轴尽可能朝向世界空间的y轴方向)。
+
+ 2. lookat_y:
+ 面向摄像机,但只能围绕世界空间y轴旋转
+
+
+ 5. direction_x:
+
+ 粒子的x轴对着粒子的"方向"属性所指方向,粒子y轴朝上(即粒子的y轴尽可能朝向世界空间的y轴方向)。
+
+ 6. direction_y:
+
+ 粒子的y轴对着粒子的"方向"属性所指方向,粒子z轴朝上
+
+ 7. direction_z:
+
+ 粒子的z轴对着粒子的"方向"属性所指方向,粒子y轴朝上
+
+ 8. emitter_transform_xy
+
+ 粒子面片平面平行发射器的xy平面
+
+ 9. emitter_transform_xz
+
+ 粒子面片平面平行发射器的xz平面
+
+ 10. emitter_transform_yz
+
+ 粒子面片平面平行发射器的yz平面
+
+
+* 纹理UV
+ - 纹理宽/纹理高
+ 这两个属性的含义是把纹理图片的宽高按这个取值来对待,那么后面UV相关属性的取值就按照这个大小进行衡量,例如有一个uv属性取值是(x, y),那么它实际在纹理图片的位置是(纹理实际宽\*x/纹理宽, 纹理实际高\*x/纹理高)
+
+ - UV开始/UV大小
+ 这两个属性决定了粒子使用到纹理的那个位置。
+
+ - 动画配置
+ 开启动画配置后,引擎会按照设置的FPS这个频率来更新"UV开始"属性,每次更新都会增加"UV步长"的值,从而达到动画效果,这种动画叫 flipbook 动画。
+ * UV开始
+ 粒子使用纹理坐标起始值
+ * UV大小
+ 粒子使用纹理的宽高
+ * UV步长
+ 每次更新对"UV开始"增长值
+ * FPS
+ 更新动画的频率
+ * 最大帧数
+ 最多更新多少帧,初始值算第一帧
+ * 延迟至生命周期
+ 如果勾选这个选项,FPS将被赋值为:最大帧数/粒子生命周期,即在粒子的生命周期里播的帧数为"最大帧数"
+ * 循环
+ 如果选中,则播完全部的帧数后,再从第一帧开始播放;如果没有选中,则播完全部帧数后停在最后一帧。
+
+- 颜色&灯光
+ 粒子某个像素点的最终颜色是 纹理颜色*该属性设置的颜色 的计算结果
+
+ * static: 静态颜色模式,颜色取值是固定的
+
+ * gredient: 梯度表模式,"插值函数"是一个molang表达式,运算结果作为时间变量,再从"颜色表"上,按照时间变量取插值,获得最终的颜色。如:"插值函数"设置为 v.particle_age 就是根据当前粒子存在的时间进行取颜色值。
+
+ * 启用环境光: 启用后颜色会受当前环境光的影响,即在夜晚看起来较暗。
+
+- 运动
+ 粒子的运动包括位移和旋转两个方面。首先我们需要知道一些运动的基本规则:
+ 1. 只有在动态的运动模式是才会根据速度产生位移(位移 = 速度*时间),如果是静态运动模式是看不到粒子运动的,对于旋转也是如此。
+ 2. 位移 = 速度* 时间
+ 3. 速度 = 速度 + 加速度*时间
+ 4. 初始速度 = 速度初始方向 * 初始速度大小
+ 5. 旋转角度 = 旋转速度 * 时间
+ 6. 旋转速度 = 旋转速度 + 旋转加速度 * 时间
+
+ 速度初始方向是粒子的发射方向(发射器->形状->发射方向)决定的,下面是各个属性的说明:
+ * 初始速度: 即初始速度大小
+ 注:如果设置为0, 方向模式使用速度方向,会导致粒子无法显示。
+ * 初始旋转角度:逆时针方向,单位-度
+ * 初始旋转速度
+ * 逐帧计算参数
+ - 动态位置开关
+ 打开后位置将不是通过"基本规则"算得, 而是同过"动态位置"设置。
+ - 动态位置
+ 这是一组molang表达式,每帧都会运算一次,计算结果作为粒子的位置。
+ - 动态速度开关
+ 打开后,忽略"基本规则"规则对速度的运算,使用"动态速度"属性的运算结果。
+ - 动态速度
+ 这是一组molang表达式,每帧都会运算一次,计算结果作为粒子的速度。
+ - 动态旋转开关
+ 打开后,忽略"基本规则"规则对旋转角度的运算,使用"动态旋转角度"属性计算结果作为旋转角度。
+ - 动态旋转角度
+ 这是一组molang表达式,每帧都会运算一次,计算结果作为粒子的旋转角度。
+
+ * 运动模式: 静态/动态
+
+ * 动态运动
+ * 加速度: 见开头“基本规则”
+ * 速度阻力系数: 可以对粒子位移运动产生阻力
+ * 旋转加速度: 见开头“基本规则”
+ * 旋转阻力系数: 可以对粒子旋转运动产生阻力
+
+- 粒子生命周期
+ 销毁表达式:该表达式返回结果为true时销毁粒子。
+ 无限生命周期: 没有最大生命周期的限制。
+ 最大生命周期表达式: 计算结果为float类型,作为最大生命周期,粒子到达这个时间就会销毁。
+ 销毁平面:当粒子穿过这个平面是会被销毁,平面表达式为: A*x + B*y + C*z + D = 0
+ 如果想限制粒子只能在某些地方活动,可以设置“在这些方块上则销毁”或“不在这些方块上则销毁”属性, 例如在把“minecraft:water”设置在“不在这些方块上则销毁”,则离开水的粒子就销毁,水里的气泡就可以这么做。
+
+- 碰撞
+ - 启用表达式
+ 如果表达式计算结果为true 则启用碰撞功能。
+ - 阻挡系数
+ 当粒子碰撞时改变粒子的速度,用于模拟碰撞时的摩擦/阻力,值越大阻力越大
+ - 反弹系数
+ 设置为0时,不反弹,设置为1时,反弹至原来高度,以此类推。
+ - 碰撞半径
+ 用于减少颗粒与环境的相互渗透,注意这必须小于或等于0.5单位
+ - 碰撞后销毁
+
+## molang 变量
+ Molang是一种简单的基于表达式的语言,用于在运行时进行快速、数据驱动的值计算,并与游戏内的值和系统直接连接。【[详见](https://learn.microsoft.com/en-us/minecraft/creator/reference/content/molangreference/examples/molangconcepts/molangintroduction)】。
+
+ 在MC配置里经常使用到Molang表达式,粒子特效也不例外。Molang很简单,只要会加减乘除和函数调用就能写Molang表达式。但首先必须知道的是,在Molang里的值类型只有float(浮点形),如果在一个语境下需要表达true或false,则0.0 表示 false, 其他情况表示true。
+ 编辑器里如果一个属性值可以是molang表达式,则在输入框后面会有一个大写M。
+ 
+
+ 粒子特效里的molang变量有两种,一种是内置变量,一种是自定义变量。
+ - 内置变量
+ 
+ 可以看到,所用变量都是以"variable."开头的,我们在写表达时也可以使用简写形式“v.”。需要注意变量的作用域问题,这里有两个作用域,分别是发射器和粒子,粒子作用域的变量无法在发射器作用域使用,但是发射器作用域的变量可以在粒子作用域使用。例如 variable.particle_age表示当前粒子的寿命,只能在粒子作用域使用,在发射器作用域使用是无意义的。
+
+ 如下图制作一个沿着y轴移动的粒子:v.particle_age表示粒子当前的寿命,随着时间的推移而增加,所以可以看到粒子延y轴方向移动。
+ 
+
+ - 自定义变量
+
+ molang变量需要先定义(声明)才能使用,例如:
+ - “v.a = v.a + 1;” 这个表达式会有运行时报错,因为v.a 是一个未定义的变量。
+
+ - “v.a = 0; v.a = v.a + 1;” 这个表达式是正确的,
+ 第一个语句定义了v.a变量,第二个使用了v.a的变量。
+
+ 所以有必要了解自定义变量的运行时机。
+ 
+
+ 这里有四个地方可以填molang表达式,他们运行时机如下:
+
+ - 变量声明
+ 在粒子发射器生成时(即特效实例生成时)运行一次。一般用来定义变量,如:v.a = 0;
+
+ - 发射器Tick
+ 发射器每一帧更新都会运行一次。
+
+ - 粒子更新Tick
+ 每个粒子更新时都会运行一次,这里是在粒子作用域里运行的,所以可以使用像v.particle_age的变量。
+
+ - 粒子渲染Tick
+ 每个粒子渲染时都会运行一次,这里是在粒子作用域里运行的,所以可以使用像v.particle_age的变量。
+
+ 与“粒子更新Tick”区别:当调用mod.client.component.particleSystemCompClient.ParticleSystemCompClient.Pause 接口时特效停止更新但是依然有渲染,所以“粒子更新Tick”会停止运行,但“粒子渲染Tick”依然运行。
+
+ 另一种声明自定义变量的方式是使用曲线。mc提供了4种曲线的支持:linear(线性),bezier(贝塞尔),catmull-rom, bezier-chain(贝塞尔链)
+
+ - 计算结果变量
+ 这里输入就是要声明的自定义变量的名字。粒子每一次渲染前都会根据当前曲线重新计算出变量的值。
+ - 曲线类型
+ 有4种类型的曲线,可以把每一种曲线都认为是一种函数方程。
+ - 输入变量
+ 作为曲线函数方程的输入参数
+ - 水平范围
+ 我们的曲线方程都规定输入参数的取值范围是是[0,1], 但是大部分时候我们的输入参数是超出这个范围的,这个值就是用来对输入变量做归一化处理,即输入到曲线方程的参数其实是:输入变量/水平范围
+
+ - nodes
+
+ 当前曲线视图,可以点击右边按钮进行编辑。
+
+ 下面展示如何使用曲线自定义变量,让粒子在xy平面上做一个曲线运动:
+ 
+ 这里输入变量是粒子的当前生命长度,水平范围取值为1,表明这个曲线运动会在1秒钟完成。
+ 
+ 
+ 可以看到粒子在第一秒的轨迹是和我们在nodes属性里设置的曲线是相吻合的,因为粒子的x坐标取了曲线的输入值,y坐标取出了曲线的输出值。
+
+## 发射骨骼模型
+ 从2.6版本开始,可以使用原版粒子系统发射骨骼模型,该功能暂时不支持使用编辑器编辑,只能通过手动修改json文件实现,完整Demo链接可以点击 [这里](../../20-玩法开发/13-模组SDK编程/60-Demo示例.md#NeteaseModelParticleDemo)下载。
+
+ - 定义发射的模型
+
+ 在发射骨骼模型之前需要先在开发包中定义好需要使用的骨骼模型,具体步骤参考[骨骼模型的使用](../6-模型和动作/04-骨骼模型的使用.md),将骨骼模型加入开发包后可以尝试在游戏中调用骨骼模型相关的接口验证资源是否正确。需要注意的是,引擎内置了[几种常用的材质](../7-材质与着色器/2-内置材质清单.md#网易扩展-entity-material-材质文件内容),能够覆盖大多数情况下粒子系统中骨骼模型的渲染,若需要使用自定义材质,需要参考内置材质的做法。
+
+ 打开json文件,在description属性中添加`basic_model_render_parameters`,然后使用`model_identifier`引用刚刚添加的骨骼模型,由于发射的骨骼模型已经定义好了贴图、纹理、材质,所以这里不需要再填写`basic_render_parameters`了,当`basic_render_parameters`与`basic_model_render_parameters`同时存在时,引擎会忽略掉`basic_render_parameters`并按骨骼模型粒子来处理:
+
+ ```json
+ "description": {
+ "identifier": "netease:model_demo",
+ "basic_model_render_parameters": {
+ "model_identifier": "pet_model"
+ }
+ }
+ ```
+
+ 添加完后就能在游戏中使用该粒子特效了。
+
+ 
+
+
+
+ 若模型需要使用自定义材质或Shader,则需要对该材质添加USE_INSTANCE的定义。例如,定义如下使用自定义材质的骨骼模型:
+
+ ```json
+ "entity_for_skeleton_customized": {
+ "+defines": [
+ "USE_SKINNING",
+ "USE_OVERLAY",
+ "NETEASE_SKINNING",
+
+ // 微软粒子发射骨骼模型,当该模型使用自定义材质及shader时,需要在材质define中加上USE_INSTANCE的定义
+ "USE_INSTANCE"
+ ],
+ "+samplerStates": [
+ {
+ "samplerIndex": 0,
+ "textureFilter": "Point"
+ }
+ ],
+ "fragmentShader": "shaders/glsl/netease_entity_skeleton_customized.fragment",
+ "msaaSupport": "Both",
+ "vertexFields": [
+ {
+ "field": "Position"
+ },
+ {
+ "field": "Normal"
+ },
+ {
+ "field": "BoneId0"
+ },
+ {
+ "field": "UV0"
+ }
+ ],
+ "vertexShader": "shaders/glsl/netease_entity_skeleton_customized.vertex",
+ "vrGeometryShader": "shaders/entity.geometry"
+ },
+ ```
+
+ 对于USE_INSTANCE的使用,可参考官方内置材质中的entity_for_skeleton_particle材质中使用的vertex shader。
+
+
+
+ - 定义模型使用的动作
+
+ 此外粒子特效发射的骨骼模型还支持动作,同样,也需要先在netease_models.json中定义好相关的模型动画,并导入资源。
+
+ 然后在json文件中的components内添加`netease:particle_appearance_FBX`,该component中包含三个属性:
+
+ - `play_animation`
+ 每个粒子播放的动画,该动画需要预先在models/netease_models.json中定义好。
+ - `loop`
+ 动画是否循环播放,如果设置为false,则会在每个发射器的生命周期开始时重新播放动画。
+ - `size`
+ 设置发射出来的骨骼模型的大小,支持molang表达式。
+
+ ```json
+ "components": {
+ "netease:particle_appearance_FBX": {
+ "play_animation": "happy",
+ "loop": true,
+ "size": [1, 1, 1]
+ },
+ ...
+ }
+ ```
+
+ 
+
+ **注意**: 骨骼模型的粒子特效会屏蔽掉原有二维粒子特效的一些属性定义,比如`minecraft:particle_appearance_billboard`中的`size`,`uv`
+
+ **注意**: 每个粒子发射器内的所有粒子会保持同一动画,不同粒子发射器的动画则表现相对独立。
+
+ - 出于性能考虑,建议以下几点
+
+ - 每个粒子发射器能发射的最大数量控制在**50**个以内。
+ - 用于粒子系统的骨骼模型不宜太复杂,将顶点数控制在**1000**以内。
+ - 同一场景内不应创建过多的粒子发射器。
\ No newline at end of file
diff --git a/mcguide/16-美术/9-特效/30-中国版特效创建与使用.md b/mcguide/16-美术/9-特效/30-中国版特效创建与使用.md
new file mode 100644
index 0000000..c6a0224
--- /dev/null
+++ b/mcguide/16-美术/9-特效/30-中国版特效创建与使用.md
@@ -0,0 +1,89 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/5a8830ad-b293-4837-a9a4-c06fe531a8c3.png
+hard: 入门
+time: 15分钟
+---
+
+# 中国版特效创建与使用
+
+本篇文档主要介绍以下内容:
+
+1. 粒子特效和序列帧特效的区别。
+2. 如何创建/导入特效。
+3. 制作第一个粒子特效和序列帧特效。
+
+## 粒子特效和序列帧特效的区别
+
+中国版特效可以用来挂接到中国版骨骼模型上。中国版特效又分为**中国版粒子特效**和**中国版序列帧特效**两种类型。
+
+1. **粒子特效** 是通过在场景中生成大量粒子图像来产生视觉效果,每个粒子都代表着效果中的单个元素,所有的粒子组合起来就形成了完整的粒子特效。
+
+2. **序列帧特效** 是通过在场景中绘制一张单面片的贴图,在这个贴图上不断的更换新的图片,这个过程形成完整的序列帧特效。
+
+## 创建/导入中国版特效
+
+在资源管理器点击【新建】-【特效】-【中国版特效】可以新建中国版粒子特效或序列帧特效。
+
+
+
+所有中国版特效都存放在 effects 文件夹下,通过在资源管理器点击特效文件,可在右侧属性窗口中查看并修改相应的属性,具体属性细节可以参考[特效属性说明](./70-中国版特效属性详细说明.md)。
+
+> 由于特效属性皆已支持可视化编辑操作,不建议开发者手动修改特效源文件,以免造成特效文件损坏。
+
+如果开发者有现成的中国版特效文件需要导入编辑器,可以在资源管理器中点击【导入】-【特效】-【中国版特效】。
+
+
+
+## 制作一个中国版粒子特效
+
+首先来制作一个红色buff粒子特效,步骤如下:
+
+1. 点击通过资源管理器新建文件向导创建中国版特效,选择粒子,输入名称fire_buff,这样在资源管理器的 effects 文件夹下会创建一个名为 fire_buff.json 的文件,点击该文件即可在属性面板查看粒子属性。特效在创建后会自动选中,这样属性栏会显示该特效的相关属性。
+
+2. 在基础属性下,将初始方向(最大),初始方向(最小),初始速度都设置为 0,这样即可创建一个不会移动的粒子。
+
+ 
+
+3. 将粒子尺寸(最大),粒子尺寸(最小)都设置为 0.5,这样创建了一个固定大小为 0.5 的粒子。
+
+ 
+
+4. 在发射器下,将最大粒子数量修改为1,这样同时只会有一个粒子出现,但是由于生存时间默认为 1,即粒子存在 1 秒后就会被销毁,所以粒子会每秒闪烁一次,为了防止这种情况,将粒子的生存时间改为 999 ,会经过999秒才会被销毁。
+
+ 
+
+5. 修改完粒子后,可以开始预览粒子,首先将effects文件夹中的的 fire_buff.json 拖拽到挂机面板下的挂点结构中,这里我们拖拽到left_arm结构中,也就是Steve的左臂上,拖拽完成后,点击选中挂接结构中left_arm,再点击时间轴上的播放按钮,即可在预览窗口中看到粒子特效了。
+
+ > 挂接特效绑定会在第三节详细介绍,这里只用跟着动图操作即可,如果现在就感兴趣,可以去[《特效挂接到模型》](./40-特效挂接到模型.md)查看更加详细的说明和演示。
+
+ 
+
+下面我们将这个buff特效修改为红色。如下图所示,在属性面板展开动态属性,点击动态颜色按钮,进行修改。
+
+
+
+> 当没有任何设定时,粒子默认颜色是白色;点击了粒子颜色后,可以看到默认的粒子颜色被修改为从白色到黄色的渐变。横坐标表示粒子生命周期百分比,由于我们把粒子生命周期改为了999,即粒子在产生时为白色,逐渐变黄,然后在999秒的时候变成黄色。
+
+为了把粒子变红,所以只用把粒子的整个周期的颜色改成红色即可。改掉后关掉动态颜色属性设置,点击时间轴的播放,可以看到粒子已经变成了红色。
+
+这样,我们就成功地制作了第一个粒子特效,如果有希望了解更多的粒子属性可以参考[中国版特效属性说明](./70-中国版特效属性详细说明.md)。
+
+## 制作一个中国版序列帧特效
+
+用与之前相同的方法,我们可以使用资源管理器的新建文件向导创建一个名为snow的中国版序列帧特效。
+
+创建完后观察属性面板,可以发现中国版序列帧特效的属性相对于中国版粒子特效来说少了很多。这是因为自定义序列帧特效的主要是通过Texture Packer软件生成的序列帧贴图和序列帧配置文件来控制,在编辑器内能控制得属性较少。
+
+> **序列帧贴图(.png)和序列帧配置文件(.json)**
+>
+> 序列帧贴图是将多个贴图以某种规律拼接在一起后输出成一张单个的图片,其中合在一起的规律就写在序列帧配置文件里。更加具体的分析可以查看[序列帧配置文件解析](./90-中国版序列帧配置文件解析.md)。
+
+我们使用Texture Packer生成了序列帧贴图和配置文件后,直接将贴图从外部文件夹拖动到编辑器内序列帧属性窗口的【贴图】字段即可。如下图所示,将外部文件夹下的 `snow_3.png` 文件拖动到序列帧属性栏的贴图上,即可看到贴图的文字变成 `textures/sfxs/snow_3.png`,拖动完成后,序列帧特效的贴图就已经改变并生效了。
+
+> 拖动序列帧贴图时,特效编辑器会自动将序列帧贴图对应的序列帧配置文件也一并复制过去。被拖动的文件存放在 `textures/sfxs` 文件夹下。
+
+通过修改属性将序列帧特效制作完毕后,同样再将特效文件拖动到挂接结构对应的节点上,选中节点后,点击时间轴上的播放按钮,即可看到该序列帧特效。
+
+
+
+目前我们制作出来的效果还比较基础,在后续文档中我们将进一步了解如何调整中国版特效在模型上的挂接位置,及如何控制特效播放时间。
diff --git a/mcguide/16-美术/9-特效/40-特效挂接到模型.md b/mcguide/16-美术/9-特效/40-特效挂接到模型.md
new file mode 100644
index 0000000..54db4ef
--- /dev/null
+++ b/mcguide/16-美术/9-特效/40-特效挂接到模型.md
@@ -0,0 +1,167 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/7586f6c1-50dd-4b4c-ab22-9661becac87e.png
+hard: 入门
+time: 20分钟
+---
+
+# 特效挂接到模型
+
+本篇教程主要介绍以下内容:
+
+1. 原版粒子特效挂接到原版Blockbench模型。
+2. 中国版特效挂接到中国版骨骼模型。
+
+> **注意:**
+>
+> 上面两套挂接关系是不能相互交叉的(例:不支持将原版粒子特效挂接到中国版骨骼模型上)。
+
+## 原版粒子特效挂接到原版模型
+
+原版生物模型是由Blockbench软件制作的,而原版粒子特效是有Snowstorm软件制作的。关于原版模型的制作,请参考[原版模型制作指南](../6-模型和动作/01-原版模型制作指南.md)。
+
+接下来我们将介绍原版模型、原版粒子的相关知识,及其挂接操作。
+
+### 1. 原版模型结构介绍
+
+原版Blockbench模型是由一个有一个立方体组成,而多个立方体可以合并为一个 **组(group)** 结构。换句话说,一个组是单个或多个立方体的集合。它的作用就类似于骨骼模型中的骨骼。
+
+> **注:**
+>
+> 在其他文档中,“Group”也被翻译为原版模型的“骨骼”。这并没有实质性的错误,但是为了和后文骨骼模型做区分,本文还是译作“组”。
+
+组在Blockbench的结构列表中显示为文件夹的形式,可以展开查看组内的立方体;而在特效编辑器中只能查看到“组”这一层,看不到内部包含的立方体。
+
+原版粒子想要挂接到原版模型上,是不能直接挂接到立方体或者组上的,因为它们的位置是相对固定的,我们不可能为了调整特效的位置而去改边模型本身的形状。因此,原版模型引入了**锚点(locator)**,来辅助粒子特效挂接。
+
+原版粒子特效必须挂接在锚点上,而锚点必须要创建在组下面(如下图,左边是锚点在Blockbench中的展示,右边是锚点在特效编辑器挂接面板结构列表中的展示)。在模型播放动作时,锚点会跟随组移动,但是开发者可以自由调整锚点对组的位置、旋转来控制特效生成的相对位置和旋转角度。
+
+
+
+如果导入的模型本身自带锚点,则这些锚点会在结构列表中显示出来。同样,开发者也可以在模型的组上右键,选择【新建锚点】并且为其命名,即可创建一个新的锚点,用来挂接原版粒子特效。
+
+
+
+### 2. 原版模型的挂接面板
+
+原版模型的挂接面板如下图所示:
+
+
+
+|序号|模块名称|模块介绍|
+|---|---|---|
+| ①|模型|通过下拉框选择要挂接的是哪个模型。在这里选择一个原版模型,下面其他内容显示的就是原版模型的格式。|
+|②|动作 |指定需要挂接特效到哪一个模型动作上。受限于原生游戏设定,原版特效的挂接信息是绑定到原版模型的动作上的,一个动作对应一套特效挂接。如果你需要在B动作上使用与A动作完全一样的特效,则需要在B动作上重新挂接一遍,无法直接复用。|
+| ③|结构列表 |用于展示原版模型的组结构、组内的锚点,以及锚点上挂接的特效。|
+
+### 3. 原版粒子特效的挂接至锚点
+
+想要将原版粒子特效挂接到原版模型上,只需要从资源管理器窗口,将特效json文件拖至希望挂接的锚点上,即可完成挂接。
+
+如果需要修改当前锚点位置、旋转角度,只需要选中锚点后,点击左上角的【移动】或【旋转】按钮,即可在预览窗中显示对应的变换拖柄,方便我们进行可视化拖拽调整。调整完毕后如果需要隐藏拖柄,点击【复位】按钮即可。
+
+
+
+挂接完毕后,我们切换至时间轴窗口,可以看到时间轴显示出了刚才挂接的特效,及其所在的锚点名称。点击左上角的【播放】按钮,即可预览动作播放时的特效效果。
+
+> 常见问题:
+> 1. 如果微软粒子特效挂接的bb模型动作时长为0,则在编辑器中可能会出现同时多次发射该粒子的情况。
+> 2. 如果bb模型动作时长不为0,但是仍然出现了动作播放时仍然出现了两次播放该粒子的情况,请检查下所挂接的动作json文件中是否存在“loop”字段,如果存在,将其删除。
+> 
+
+
+## 中国版特效挂接到中国版骨骼模型
+
+接下来我们将介绍原版模型、原版粒子的相关知识,及其挂接操作。
+
+### 1. 中国版骨骼模型的挂接面板
+
+中国版骨骼模型的挂接面板如下图所示:
+
+
+
+|序号|模块名称|模块介绍|
+|---|---|---|
+|①|模型|用于显示和修改当前挂接模型名称。|
+|②|第一人称模型|用于显示和修改当前挂接模型的第一人称模型。具体用法可参考[第一人称模型修改](./10-模型导入.md#第一人称模型修改)|
+|③|第一人称模型动作|用于显示和修改当前挂接模型的第一人称视角播放的模型动作|
+|④|动作列表|用于显示和修改和预览当前挂接模型的骨骼动画,并为每个动作提供了单独的分组选择下拉框,开发者可以在此选择每个动作使用不同的分组,点击某一动作并在时间轴窗口点击播放按钮,可以在预览窗中查看动作播放效果(如下图)。
另外特效编辑器为每个模型都默认添加了一个空动画“通用”,在“通用”下,模型不会播放任何动画。|
+|⑤|挂点列表|用于显示和管理骨骼模型当前的骨骼节点和特效挂接结构。挂点列表包含挂接分组、挂点结构、挂接点和挂接资源(如图中ABCD所示)。|
+
+
+
+> **注:**
+>
+> Steve **不算骨骼模型**,所有没有骨骼动画。Steve 身上的head、body、left_arm等结构我们统称为**部件**。
+
+中国版模型的**挂点列表**相对复复杂,下面我们进行详细说明。
+
+**A. 挂接分组:**
+
+存放一系列挂接信息,通过创建多个不同的分组可以有效管理同个模型不同状态下的挂接信息,当前挂接分组主要用于第④点中的动作列表,可为每一个动作选择不同分组下的挂点信息以达到切换特效的功能。
+
+挂点分组右侧的 【+】按钮可以新增挂点分组,每个分组右侧的【×】可以删除当前挂点(default分组只能清空挂接信息,不可删除)。
+
+**B. 挂点结构:**
+
+通过列表或树结构实时展示当前挂接模型的骨骼/部件结构以及挂点、特效信息。
+
+**C. 挂点:**
+
+用于挂接特效资源等,与原版模型中的“锚点”功能相同。挂点可以调整特效相对于骨骼的位置、旋转等。
+
+**D. 挂接资源:**
+
+中国版粒子特效、序列帧特效、骨骼模型等我们需要挂接到当前模型身上的资源。可以直接挂接到骨骼模型、部件(无法挂接模型)或挂点上。
+
+**E. 右键快捷操作:**
+
+在挂点列表的任意节点右键可触发快捷操作,对于不同类型节点支持的快捷操作如下:
+
+|右键点击对象|可进行的快捷操作|
+|---|---|
+|骨骼|新建挂点、绑定模型、复制分组(挂点信息)、粘贴分组(挂点信息)、复制(当前节点挂点信息),粘贴(当前剪贴板的特效信息),粘贴信息(当前节点挂点信息)|
+|部件|新建挂点、复制分组(挂点信息)、粘贴分组(挂点信息)、复制(当前节点挂点信息),粘贴(当前剪贴板的特效信息),粘贴信息(当前节点挂点信息)|
+|挂点|删除、重命名、复制分组(挂点信息)、粘贴分组(挂点信息)、复制(当前节点),粘贴信息(当前节点挂点信息)、粘贴(节点)、创建副本|
+|特效|删除、复制分组(挂点信息)、粘贴分组(挂点信息)、复制(当前节点)|
+
+### 2. 中国版特效挂接至挂点
+
+首先点击挂接模型,将 Steve 切换到 datiangou,即可看到人物变成了大天狗的模型。我们将把名为`fire_buff`的特效挂接到大天狗的左手。
+
+创建挂接分组,点击【+】按钮新建挂点分组,输入`buff`,即可创建`buff`分组,然后在该分组选中挂点结构中的`l_arm`,点击【新建挂点】按钮,创建挂点`fire01`:
+
+
+
+> 注意:模型的具体挂接位置是由模型本身确定的
+
+点击资源管理器,将里面的 `fire_buff.json` 拖入到`fire01`挂接点中,点击时间轴的播放,即可看到模型的左肩部产生红色buff特效。
+
+
+
+同样地,我们在大天狗右臂(`r_arm`)新增一个挂点`fire02`,并挂接一个`fire_buff`特效。
+
+
+
+修改了 `fire02` 后,为什么已经在左肩和右肩都挂了粒子特效,仍然只有右肩在播放呢?这是因为我们开启了【仅播放子配置】选项。我们可以按照自己的需求,采用以下两个方法恢复`fire01`下的特效显示:
+
+- 从挂点结构修改,当点击某个挂接点时,仅仅会显示该挂接点的包含特效,所以我们只需点击 `root`根节点 挂接分组即可全部显示。如图所示:
+- 取消勾选仅播放子配置:取消勾选后会播放当前挂接模型分组下的所有特效,与选中root根节点效果一致,如图所示:
+ 
+
+挂接粒子特效之后,接下来开始挂接序列帧特效。由于序列帧特效是一个光圈,期望是将其挂接到两个位置:一个是人物的背后,另一个是人物头顶。
+
+我们新建 `snow01` 挂接点,选择挂机位置为 `spine`,可以看到序列帧特效正好在人物的身上,如果觉得看不清,可以点击【预览设置】,选择【主角和相机分离】,这样可以360°查看人物。
+
+
+
+如果我们需要调整特效挂点的位置,需要使用到【位移】、【旋转】变换拖柄,它们的操作与上文中原版模型锚点的变换拖柄操作方法相同。
+
+> **注意:**
+>
+> 【位移】仅可在模型为骨骼模型并且**选中了一个挂点**时才可用(如果是默认的Steve模型无法使用位移功能)。
+
+另外,我们也可以选中挂点后,在右侧属性面板对其【偏移】、【旋转】参数进行精细调整。
+
+例如我们可以使用变换拖柄将`snow01`的特效调整到模型背后。
+
+
\ No newline at end of file
diff --git a/mcguide/16-美术/9-特效/45-时间轴功能.md b/mcguide/16-美术/9-特效/45-时间轴功能.md
new file mode 100644
index 0000000..fb4fbe3
--- /dev/null
+++ b/mcguide/16-美术/9-特效/45-时间轴功能.md
@@ -0,0 +1,95 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/643514fa-d862-46a7-b480-2e0a56689fe1.png
+hard: 入门
+time: 10分钟
+selection: 1
+---
+
+# 时间轴功能
+
+将特效挂接到模型,只能帮我们实现特效在某个位置播放,但是并不能控制特效具体在模型动作的哪个时点开始播放。想要控制特效播放的时机,就需要用到特效编辑器的**时间轴功能**。
+
+除了控制特效播放时点外,时间轴还支持音效挂接和播放控制。
+
+## 时间轴界面划分
+
+时间轴窗口的界面主要分为3个模块:
+
+
+
+## 时间轴功能简介
+
+下面我们将按模块依次介绍时间轴的功能:
+
+### 1. 播放控制区
+
+用于控制模型动作的播放。包含5个功能按钮,从左至右依次为:
+- 播放/暂停
+- 停止
+- 跳转到前一帧
+- 跳转到后一帧
+- 循环播放、单次播放切换
+
+### 2. 结构树
+
+结构树的功能包括:
+
+**1)展示特效挂接**
+
+结构树会按顺序依次展示当前模型结构中,挂接了特效的挂点或锚点,及它们下面挂接的特效。
+
+点击挂点/锚点左侧的三角形按钮,可以折叠其下方的特效。
+
+**2)控制特效显隐**(仅中国版骨骼模型可用)
+
+对于中国版骨骼模型,如果开发者仅希望查看当前已挂接的特效中的部分特效效果,可以点击特效前面的小眼睛按钮,来隐藏多余的特效显示。
+
+
+
+**3)挂接音效**
+
+结构树下方还有【音效】标签,点击右侧的【+】号可以为动作添加音效。选中已添加的特效,可以在右侧属性窗口通过下拉框修改具体的音效种类。
+
+> 目前时间轴只支持添加原版游戏自带的音效。
+
+
+
+- 如果想删除已挂接在中国版骨骼模型上的音效,点击其右侧的【垃圾桶】按钮即可。
+- 如果想删除已挂接在原版模型上的音效,需要右键点击后选择【删除音效】。
+
+### 3. 时间轴编辑区
+
+时间轴编辑区的主要功能为控制已挂接的各个特效和音效的播放开始时点。
+
+**1)预览功能**
+
+提供动作的预览功能是时间轴的最基础任务。当我们在左侧挂接面板选择了一个动作,时间轴顶部就会显示出两个蓝色的小拖柄,它们分别位于动作的第一帧和最后一帧,用于指示动作预览的起点和终点。我们点击播放按钮后,动作就会从预览起点开始播放,到达预览终点后停止。播放过程中,会有一个当前帧指示器标出播放进度,指示器走到预览终点,即代表播放结束。
+
+
+
+预览起点和终点是可以手动调整的。当我们只需要观察动作的一部分时,拖动预览起点和终点拖柄来限制预览范围。
+
+
+
+**2)特效播放时点控制**
+
+特效挂接到模型动作后,默认都是从动作的0s处开始播放的。有时,我们希望他在动作的中间某个时点开始播放,这就需要用到特效拖柄来调整它的播放时间。
+
+拖动特效时间轴上的拖柄,我们可以让特效在动作时间范围内的任意时点开始播放。如果你需要更加精确地调整特效播放的时机,可以点击某个特效的时间轴后,在右侧时间轴属性面板直接调整它的延迟数值。
+
+
+
+> **注意:**
+>
+> **本段说明仅针对中国版特效,原版粒子特效不受影响**
+> 中国版特效(粒子和序列帧)自带“延迟开始播放”属性。初次挂接到骨骼模型时,中国版特效在时间轴上的播放起点将读取其配置中“延迟开始播放”字段的值。此时如果我们拖动了时间轴上的拖柄,相当于放弃了粒子配置中的“延迟开始播放”字段,而采用时间轴上新的延迟设置。我们更推荐使用时间轴延迟(因为修改配置中的延迟无法做到实时预览,只能删除特效后重新挂接),但如果您希望保留并使用原本配置中的设置,请勿调整时间轴拖柄。
+>
+> 
+
+> **提示:**
+>
+> 特效拖柄可以拖至模型动作结束时点之后,即代表在动作播放完之后一段时间播放该特效。但需要注意的是,特效编辑器只能播放预览起点和终点以内的时间。如果你的特效播放时点晚于预览终点时间,则需要在开发包中自行测试调整。
+
+**3)音效播放时间控制**
+
+与特效播放控制相同,可以通过拖柄调整或在右侧属性菜单精确调整。在此不再赘述。
diff --git a/mcguide/16-美术/9-特效/50-预览功能.md b/mcguide/16-美术/9-特效/50-预览功能.md
new file mode 100644
index 0000000..6926767
--- /dev/null
+++ b/mcguide/16-美术/9-特效/50-预览功能.md
@@ -0,0 +1,118 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/db68a109-78fc-409b-bce1-de52abd118fe.png
+hard: 入门
+time: 10分钟
+---
+
+# 预览功能
+
+本篇教程主要介绍以下内容:
+
+1. 预览面板功能。
+
+2. 使用预览面板预览模型和特效。
+
+## 预览面板功能
+
+默认的预览面板如图所示:
+
+
+
+特效模型预览用于快速的预览指定模型和挂在其身上的特效,不仅如此,也可以在场景中添加其他模型和特效。
+
+其中各个参数说明如下:
+- **屏蔽左键攻击**:用于开关是否屏蔽Steve左键攻击的动作。
+- **主角和相机分离**,用于开关是否让相机可以360°查看模型视角,默认的游戏视角仅能查看主角的正面或者背面,而且视角固定,通过打开视角分离,可以更为方便的查看模型。
+
+ 
+
+- **预览分组**:保存和管理预览设置的一系列设置和特效模型的挂接信息,通过切换分组可以快速切换预览多种配置的场景特效和模型。
+
+- **场景模型**,用于在场景中批量显示任意模型,其配置项如下:
+
+ 
+
+ - 模型:用于选择显示的模型(仅支持骨骼模型)。
+
+ - 动作:模型预览时播放的骨骼动画。
+
+ - 挂接分组:模型预览时选择特效的挂接分组。
+
+ - 使用主角位置:勾选起来会默认使用当前主角位置,如果取消勾选,则可以将模型放置于指定坐标中。
+
+ - 旋转:用于修改模型的旋转角度。
+
+- **场景特效**:用于在场景中任意地点显示自定义特效,其配置项如下:
+-
+ 
+ - 特效:用于选择要播放的特效,仅支持位于 effects 文件夹下的网易自定义特效。
+
+ - 使用主角位置:勾选起来会默认使用当前主角位置,如果取消勾选,则可以将特效放置于指定坐标中。
+
+ - 旋转:用于修改特效的旋转角度。
+
+## 预览模型和特效
+
+了解了以上预览功能后,可以直接在场景中添加模型和特效了,首先来添加特效,点击场景特效上的 + 号,选择已有的 fire_buff.json,点击播放,即可看到特效在场景中被渲染。
+
+> 为了显示方便,这里将模型修改为不带任何特效的 Steve。
+
+如图为演示预览场景特效:
+
+
+
+如图为演示预览场景模型:
+
+
+
+预览功能整体来说比较简单,主要是为了让玩家能够更加方便的预览多个模型和多个特效。
+## 预览手持物品绑定位置
+当开发者希望用骨骼模型作为玩家模型时,此时玩家如果手持一些原版的物品,则会有可能出现手持物品位置与骨骼模型无法匹配和对应的情况,如下图:
+
+
+
+为了解决上述问题,在2.8新增了BindItemToBone接口,该接口可以将玩家主副手手持物品的位置绑定到骨骼模型的某个骨骼中,并且支持偏移、旋转和缩放。
+
+
+开发者可以在制作骨骼模型时单独为玩家手持物品的位置增加一个透明骨骼,再调用上述接口,即可将手持物的位置设置到对应位置,再根据表现调整偏移、旋转和缩放参数。
+
+
+为了简化上述来回修改接口调整参数值的过程,在特效编辑器新增了手持物品预览的功能,具体使用方法如下:
+
+1. 进入特效编辑器,切换到对应的骨骼模型
+2. 选中任意想要绑定的骨骼
+
+
+
+
+1. 点击属性面板,找到手持物品预览相关属性
+2. 调整参数,勾选预览,即可在预览窗观察玩家手持的物品被绑定到当前选中的骨骼的效果。
+
+
+
+
+
+
+> 注意:该功能仅供开发者调试最佳的绑定参数,无法直接生效到作品,请自行在挂在骨骼模型到玩家身上后调用BindItemToBone接口设置对应的参数。
+
+
+## 预览模型动画关键帧信息
+当挂接特效时,经常会出现开发者希望特效的出现和持续时间与某个关键帧的时间完全一致,但无法确切知道关键帧的时间,难以匹配,现在,当你选用某个骨骼时,属性面板会显示出该骨骼的所有关键信息,如下图所示。
+
+
+
+
+## 修改和预览steve皮肤贴图
+
+当您未制作模型,仅希望修改和测试一张玩家皮肤贴图时,您可以将皮肤贴图导入`resource_pack_xxx/textures/models`目录下,在特效编辑器选择steve默认模型时,其下方会出现【皮肤贴图属性】,此时开发者可以修改和预览皮肤贴图,如下图所示。
+
+
+
+
+
+
+## 调整预览窗口的分辨率
+如您特别关注某个分辨率下特效的效果是否准确,您可以调整工具栏上的分辨率预设类型和适配基准,帮助您更好观察指定分辨率的效果,如下图所示:
+
+
+
\ No newline at end of file
diff --git a/mcguide/16-美术/9-特效/70-中国版特效属性详细说明.md b/mcguide/16-美术/9-特效/70-中国版特效属性详细说明.md
new file mode 100644
index 0000000..351c562
--- /dev/null
+++ b/mcguide/16-美术/9-特效/70-中国版特效属性详细说明.md
@@ -0,0 +1,1275 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/c950e699-c47e-4bef-9ee5-df99d376af00.png
+hard: 入门
+time: 30分钟
+---
+
+# 中国版特效属性详细说明
+
+## 粒子特效基本属性说明
+
+### 特效方向direction
+
+#### direction
+
+属性 | 说明
+---- | ----------------------------------
+描述 | 设置粒子方向
+默认值 | `Inwards`
+参数范围 | `Inwards`, `Outwards`, `Direction`
+
+- Direction, 使用粒子初始方向方向(每个方向在 `directionMin` 和 `directionMax` 之间随机)
+
+
+
+- Inwards, 使用发射器形状的向心方向
+
+
+
+- Outwards, 使用发射器形状的离心方向
+
+
+
+#### directionMin
+
+属性 | 说明
+---- | -------------------------------------
+描述 | 设置粒子随机方向的最小值, 分别为 x, y, z 轴方向, 负值代表反向
+默认值 | `-1.0 -1.0 -1.0`
+参数范围 | -1.0 ~ 1.0
+提示 | 该参数仅在方向为`Direction`时有效
+
+#### directionMax
+
+属性 | 说明
+---- | ------------------------------------------------------------
+描述 | 设置粒子随机方向的最大值, 分别为 x, y, z 轴方向, 负值代表反向
+默认值 | `1.0 1.0 1.0`
+参数范围 | -1.0 ~ 1.0
+提示 | 该参数仅在方向为`Direction`时有效, directionMax各个方向需要大于directionMin的相应值
+
+```json
+{
+ "direction": {
+ "value": "Inwards",
+ "min": "-1.0 -1.0 -1.0",
+ "max": "1.0 1.0 1.0"
+ }
+}
+```
+
+### 初始速度velocity
+
+属性 | 说明
+---- | -----------------------
+描述 | 粒子的初始速度, 矢量, 分别为最小值和最大值
+默认值 | `1.0 1.0`
+参数范围 | -100000.0 ~ 100000.0
+
+```json
+{
+ "velocity": {
+ "value": "1.0 1.0"
+ }
+}
+```
+
+### 恒定力constantforce
+
+属性 | 说明
+---- | -------------------------
+描述 | 粒子在 x, y, z 轴上所受恒定力, 相当于粒子运动过程中的加速度
+默认值 | `0.0 0.0 0.0`
+参数范围 | -100000.0 ~ 100000.0
+
+```json
+{
+ "constantforce": {
+ "value": "0.0 0.0 0.0"
+ }
+}
+```
+
+### 阻尼力dampingforce
+
+属性 | 说明
+---- | --------------------
+描述 | 方向与粒子速度方向相反的加速度
+默认值 | `0.0`
+参数范围 | -100000.0 ~ 100000.0
+提示 | 当为负数时, 为加速度
+说明 | v 为粒子当前速度 则计算为 `v = v - dampingforce * v`
+
+```json
+{
+ "constantforce": {
+ "value": "0.0 0.0 0.0"
+ }
+}
+```
+
+### 初始尺寸particlesize
+
+属性 | 说明
+---- | ------------------------
+描述 | 面向摄像机的二维平面(x, y)上的粒子初始尺寸
+默认值 | `0.1 0.1`
+参数范围 | -100000.0 ~ 100000.0
+提示 | max 各个方向需要大于 min 的相应值
+
+```json
+{
+ "particlesize": {
+ "min": "0.1 0.1",
+ "max": "0.1 0.1"
+ }
+}
+```
+
+### 初始旋转rotation
+
+属性 | 说明
+---- | --------------------------
+描述 | 面向摄像机的二维平面(x, y)上的粒子的初始旋转量,即绕z轴的旋转的角度
+默认值 | `0.0`
+参数范围 | -999999.0 ~ 999999.0
+提示 | 正数为逆时针, 负数为顺时针
+提示 | 粒子的初始旋转介于min与max之间
+
+```json
+{
+ "rotation": {
+ "min": "0.0",
+ "max": "0.0"
+ }
+}
+```
+
+### 旋转速度rotationspeed
+
+属性 | 说明
+---- | ------------------------
+描述 | 面向摄像机的二维平面(x, y)上的粒子旋转速度
+默认值 | `0.0`
+参数范围 | -999999.0 ~ 999999.0
+提示 | 正数为逆时针, 负数为顺时针
+提示 | 粒子的实际旋转速度介于min与max之间
+
+```json
+{
+ "rotationSpeed": {
+ "min": "0.0",
+ "max": "0.0"
+ }
+}
+```
+
+### 生存时间timetolive
+
+属性 | 说明
+---- | --------------------
+描述 | 粒子的生存时间
+默认值 | `1.0`
+参数范围 | 0.0 ~ 100000.0
+提示 | 粒子的实际生存时间介于min与max之间,例如下列参数则设定粒子的存在时间为 1 - 2 秒
+
+```json
+{
+ "timetolive": {
+ "min": "1.0",
+ "max": "2.0"
+ }
+}
+```
+### 预热prewarm
+属性 | 说明
+---- | --------------------
+描述 | 开启后粒子发射器在游戏初始就开始发射粒子
+默认值 | 不开启
+```json
+{
+ "prewarm": true
+}
+```
+### 独立生存时间independent
+属性 | 说明
+---- | --------------------
+描述 | 开启后每个粒子的生命周期都会独立计算,关闭发射器粒子不会立即消失,而是会按照自身的生命周期逐渐消散
+默认值 | `false`
+参数范围 | `false`,`true`
+```json
+{
+ "independent": false
+}
+```
+### 层级layer
+
+属性 | 说明
+---- | --------------------------
+描述 | 支持粒子前后层级效果,当数值越大,渲染越晚,显示越靠前
+默认值 | `1`
+参数范围 | 0 ~ 15
+
+```json
+{
+ "layer": 1
+}
+```
+
+## 粒子特效动态属性说明
+
+### 动态尺寸sizedelta
+
+属性 | 说明
+---- | --------------------
+描述 | 用来控制粒子尺寸在不同时间的大小变化
+默认值 | 不开启
+提示 | 包含相对时间和绝对时间两种形式
+
+
+
+
+
+
+
+```json
+"sizedelta": [
+ {
+ "scale": "1.000 1.000",
+ "time": "27%"
+ },
+ {
+ "scale": "3.000 3.000",
+ "time": "57%"
+ }
+ {
+ "scale": "1.000 1.000",
+ "time": "89%"
+ }
+]
+```
+
+### 动态颜色colorfade
+
+属性 | 说明
+---- | --------------------
+描述 | 用来控制粒子尺寸在不同时期的颜色变化
+默认值 | 不开启
+提示 | 颜色值在不同的点之间是按照线性变化,支持透明度设置
+
+
+
+
+
+
+
+```json
+"colorfade": [
+ {
+ "color": "1.00 1.00 1.00 1.00",
+ "time": "0.0"
+ },
+ {
+ "color": "0.67 0.00 0.00 0.44",
+ "time": "0.48"
+ },
+ {
+ "color": "1.00 1.00 0.24 1.00",
+ "time": "1.0"
+ }
+]
+```
+
+
+### 粒子扰动disorder
+
+
+
+属性 | 说明
+--------- | ----------------------
+描述 | 支持粒子能够在 x, y, z 轴上随机扰动
+min | 粒子在 x, y, z 轴上的最小扰动幅度
+max | 粒子在 x, y, z 轴上的最大扰动幅度
+interval | 粒子扰动时间间隔(秒)
+increment | 每次扰动后递增幅,多用于实现散开效果
+提示 | 粒子的实际扰动介于min与max之间
+
+```json
+{
+ "disorder": {
+ "min": "0.0 0.0 0.0",
+ "max": "0.0 0.0 0.0",
+ "interval": "0.0",
+ "increment": "0.0"
+ }
+}
+```
+
+## 粒子发射器属性说明
+
+### 最大粒子数量numparticles
+
+
+
+属性 | 说明
+---- | -----------
+描述 | 粒子同时存在的最大数量
+默认值 | `10`
+参数范围 | 0 ~ 100000
+提示 | 同屏显示的粒子数量还会受到发射速率的限制
+
+```json
+{
+ "numparticles": {
+ "value": "10"
+ }
+}
+```
+
+### 发射周期长度activetime
+
+属性 | 说明
+---- | ----------------------------
+描述 | 粒子发射器连续发射粒子的时间,此期间会一直连续发射粒子
+默认值 | `0.0`
+参数范围 | 0.0 ~ 100000.0
+提示 | 需要配合发射冷却时间 inactivetime 联合使用
+说明 | 可将其可以视为发射器生命周期,方便调试有时间限制的效果。如果设置为 0,粒子发射器会一直发射, 不会停歇
+
+```json
+{
+ "activetime": {
+ "value": "0.0"
+ }
+}
+```
+
+### 发射周期间隔inactivetime
+
+属性 | 说明
+---- | ----------------------------
+描述 | 两个发射周期之间的间隔
+默认值 | `0.0`
+参数范围 | 0.0 ~ 100000.0
+提示 | 需要配合连续发射时间 activetime 联合使用
+说明 | 可将其视为发射器冷却时间
+
+```json
+{
+ "inactivetime": {
+ "value": "0.0"
+ }
+}
+```
+
+### 发射速率emissionrate
+
+属性 | 说明
+---- | -------------------------------
+描述 | 发射周期内粒子发射器每秒发射粒子数
+默认值 | `10.0`
+参数范围 | 0.0 ~ 100000.0
+提示 | 该速率仅会在发射周期长度内生效,当处于发射间隔时,将停止发射
+提示 | 粒子的实际发射速率介于min与max之间
+
+```json
+{
+ "emissionrate": {
+ "min": "10.0",
+ "max": "10.0"
+ }
+}
+```
+
+### 发射路径emitterpath
+
+
+
+属性 | 说明
+---- | -----------------------------
+描述 | 粒子发射器发射的路径,多用于配置爆炸等效果
+参数范围 | 偏移 offset 无限制,旋转 rotation,取值为-180°~180°(旋转顺序为xyz),时间 time 需要在粒子生存周期的最大值里
+
+
+注意:rotation参数使用的四元数进行旋转插值,取值范围为-180°~180°,使用时需要有一个time为0的初始关键帧,旋转时会选择最短路径。下面是一个粒子发射器绕y轴旋转360°的例子,需要玩家插入4个关键帧才能实现预期效果。
+
+```json
+{
+ "emitterpath": [
+ {"offset": "1.0 0.0 1.0", "rotation": "0.0 0.0 0.0","time": "0.0"},
+ {"offset": "-1.0 0.0 -1.0", "rotation": "0.0 179.0 0.0","time": "0.1"},
+ {"offset": "0.0 1.0 0.0", "rotation": "0.0 -90.0 0.0","time": "0.15"},
+ {"offset": "0.0 1.0 0.0", "rotation": "0.0 0.0 0.0","time": "0.2"},
+ ]
+}
+```
+
+
+#### tips:如何可视化编辑发射路径
+除了在上图的窗口设置发射路径,现在你还可以在已挂接在模型上的**特效实例**上进行发射路径的可视化编辑,如下图:
+
+
+> 0. 挂接到模型上的特效是特效实例,其属性是实例属性,存储在引擎内存中,与粒子文件里的属性无对应关系。
+
+> 1. 在实例属性的编辑只会针对当前选中的粒子特效实例生效,必须点击【应用修改】后才会同步到文件。
+> 2. 可以勾选图中的【自动应用到文件】选项,将实时将实例属性同步应用到粒子特效的文件内。
+> 3. 可以勾选【预览路径】在场景中查看由箭头构成的发射路径。
+> 4. 每个路径点和旋转角度属性均有删除、向上移动,向下移动,在上面添加,定位当前路径点功能。
+> 5. 通过定位到当前路径点或旋转角度,可在场景中通过对应的拖柄直接拖拽修改该路径点的相对位置和旋转角度,如下图:
+
+
+
+
+
+
+### 发射器形状emittertype
+
+属性 | 说明
+---- | -----------------------------------------
+描述 | 粒子发射器的形状
+默认值 | `Spere`
+参数范围 | `Sphere`, `Hemisphere`, `Cylinder`, `Box`,`Cone`
+
+- Sphere, 球形
+- Hemisphere, 半球形
+- Cylinder, 柱面(圆柱形)
+- Box, 方形
+- Cone, 锥形
+
+```json
+{
+ "emittertype": {
+ "value": "Spere"
+ }
+}
+```
+
+### 发射器尺寸emittersize
+
+属性 | 说明
+---- | --------------
+描述 | 粒子发射器包围盒的尺寸,分别对应 x, y, z 轴
+默认值 | `0.0` `0.0` `0.0`
+参数范围 | 0.0 ~ 100000.0
+
+```json
+{
+ "emittersize": {
+ "value": "0.0 0.0 0.0"
+ }
+}
+```
+
+### 发射器尺寸缩放系数emitterscale
+
+属性 | 说明
+---- | ---------------------------
+描述 | 粒子发射器在不同时间的缩放系数,用于扩展发射器的大小
+默认值 | 不开启
+参数范围 | `value` 无限制,`time` 需要在粒子最大生存时间内
+说明 | 该参数对已发射的粒子无影响
+
+
+
+
+
+```json
+{
+ "emitterscale": [
+ {"time": "0.26", "value": "0.9"},
+ {"time": "1.41", "value": "3.0"},
+ {"time": "2.11", "value": "0.9"}
+ ]
+}
+```
+
+### 发射器表层厚度比例thickness
+
+属性 | 说明
+---- | ----------------------------------------
+描述 | 发射器表层厚度比例, 当为 0 时,发射器仅包含表面形状, 当为 1 时, 发射器为实心
+默认值 | `0.0`
+参数范围 | 0.0 ~ 1.0
+
+```json
+{
+ "thickness": {
+ "value": "0.0"
+ }
+}
+```
+
+## 粒子特效资源属性说明
+
+### 材质material
+
+属性 | 说明
+--- | ------------------------------
+描述 | 粒子材质
+默认值 | `"materials/particles.material"`
+
+```json
+{
+ "material": {
+ "name": "materials/particles.material"
+ }
+}
+```
+### 自定义材质materialname
+
+属性 | 说明
+--- | ------------------------------
+描述 | 指定特效使用自定义名称的材质,默认情况不配置,若配置则会使深度测试、混合模式、点滤波功能和纹理颜色乘动态颜色功能失效(因为上述功能均是依靠切换材质实现),如有需要,请自行编写材质文件实现失效的功能。
+默认值 | 不配置
+
+```json
+{
+ "materialname": {
+ "value": "my_material"
+ },
+}
+```
+### 贴图texture
+
+属性 | 说明
+---- | -----------------------
+描述 | 粒子贴图,仅支持显示整张贴图
+默认值 | `"textures/particle/sun"`
+参数范围 | 无
+
+```json
+{
+ "texture": {
+ "name": "textures/particle/sun"
+ }
+}
+```
+
+### 序列帧ani
+
+属性 | 说明
+---- | -------------
+描述 | 粒子特效里使用的序列帧贴图
+默认值 | ""
+参数范围 | 无
+
+```json
+"texture": {
+ "ani": {
+ "fps": "1",
+ "name": "textures/particle/my123_2"
+ },
+ "name": "textures/particle/my123_2"
+}
+```
+
+### 序列帧帧率fps
+
+属性 | 说明
+---- | ----------------
+描述 | 粒子特效里携带的序列帧的播放速度,每秒播放帧数
+默认值 | `0`
+
+```json
+"texture": {
+ "ani": {
+ "fps": "1",
+ "name": "textures/particle/my123_2"
+ },
+ "name": "textures/particle/my123_2"
+}
+```
+
+### 序列帧随机播放shuffle
+
+属性 | 说明
+---- | ----------------
+描述 | 粒子特效里携带的序列帧是否随机播放各个帧,如果选择打开则播放序列帧是乱序的,关闭则是按顺序播放
+默认值 | false
+
+```json
+"texture": {
+ "ani": {
+ "fps": "1",
+ "name": "textures/particle/my123_2",
+ "shuffle": true
+ },
+ "name": "textures/particle/my123_2"
+}
+```
+
+## 粒子特效渲染属性说明
+
+### 序列帧循环enableloop
+
+属性 | 说明
+---- | ---------------
+描述 | 当粒子的生命周期大于所携带的序列帧的时间时,用于控制序列帧是否循环播放
+默认值 | `true`
+参数范围 | `false`, `true`
+
+```json
+{
+ "enableloop": {
+ "enable": "true"
+ }
+}
+```
+
+### 相对挂点运动relative
+
+属性 | 说明
+---- | --------------------
+描述 | 用于控制粒子特效的运行轨迹是否相对于挂点
+默认值 | `true`
+参数范围 | `true`, `false`
+
+```json
+{
+ "relative": {
+ "value": "true"
+ }
+}
+```
+
+### 混合模式blend
+
+属性 | 说明
+---- | --------------
+描述 | 用于控制不同粒子特效混合效果
+默认值 | `blend`
+参数范围 | `blend`, `add`, `Opaque`
+
+- blend, 透明度混合, 能保证两个颜色显示正常
+- add, 颜色值累加
+- Opaque, 不透明
+
+```json
+{
+ "blend": {
+ "name": "blend"
+ }
+}
+```
+
+
+### 粒子朝向模式faceCameraMode
+
+属性 | 说明
+---- | ---------------------------------------------------
+描述 | 用于控制粒子的朝向
+默认值 | `Rotate XYZ`
+参数范围 | `Rotate XYZ`, `Rotate Y`, `Horizontal`, `Direction`,`Direction Horizontal`
+
+- Rotate XYZ, 粒子朝向相机
+- Rotate Y, 粒子朝向地面
+- Horizontal, 粒子朝向水平方向
+- Direction, 粒子朝向为速度方向
+- Direction Horizontal,粒子朝向水平速度方向
+
+```json
+{
+ "faceCameraMode": {
+ "value": "Rotate XYZ"
+ }
+}
+```
+
+### 深度测试depthtest
+
+属性 | 说明
+---- | -----------------
+描述 | 用于控制粒子特效是否开启深度检测
+默认值 | `false`
+参数范围 | `true`, `false`
+说明 | 如果关闭深度检测,粒子特效会遮盖所在的屏幕平面渲染的东西,如果开启,则会依据深度进行相关渲染
+
+- 关闭深度检测
+
+
+
+- 打开深度检测
+
+
+
+```json
+{
+ "depthtest": {
+ "enable": "false"
+ }
+}
+```
+
+## 粒子拖尾效果属性说明
+粒子拖尾(轨迹)效果配置需要放在trail字段的字典下,具体示例:
+```
+{
+ "particleeffect": {
+ ... // 粒子的各种原有属性
+ "trail": {
+ "lifetime": 3.0,
+ "maxnum": 512,
+ "mindistance": 0.01,
+ "useparticlecolor": false,
+ "useparticlewidth": true,
+ "facemode": 0,
+ "texmode": 0,
+ "textile": "2.0 2.0",
+ "worldspace": true,
+ "colorfade": [
+ {
+ "color": "1.0 1.0 1.0 0.5",
+ "time": "0.0%"
+ },
+ {
+ "color": "1.0 1.0 1.0 1.0",
+ "time": "20.0%"
+ },
+ {
+ "color": "1.0 1.0 1.0 0.0",
+ "time": "100.0%"
+ }
+ ],
+ "widthfade": [
+ {
+ "value": "1.0",
+ "time": "0.0%"
+ },
+ {
+ "value": "1.0",
+ "time": "30.0%"
+ },
+ {
+ "value": "0.5",
+ "time": "100.0%"
+ }
+ ]
+ }
+ }
+}
+```
+### 生命周期 lifetime
+属性 | 说明
+---- | ---------------
+描述 | 单节轨迹的存在时间 单位秒
+默认值 | `0`
+参数范围 | `0.0 ~ 30000.0`
+```json
+{
+ "trail": {
+ "lifetime": 2.0
+ }
+}
+```
+
+### 最大轨迹段数 maxnum
+属性 | 说明
+---- | ---------------
+描述 | 表示粒子轨迹包含最大段数 用于约束特效开销以及进行某些优化
+默认值 | `32`
+参数范围 | `1 ~ 4096`
+```json
+{
+ "trail": {
+ "maxnum": 128
+ }
+}
+```
+
+### 最小轨迹段长度 mindistance
+属性 | 说明
+---- | ---------------
+描述 | 表示单个轨迹段的的最小长度 防止过于频繁地生成轨迹段导致性能问题
+默认值 | `0.01`
+参数范围 | `0.01 ~ 1000.0`
+```json
+{
+ "trail": {
+ "mindistance": 0.02
+ }
+}
+```
+
+### 朝向模式 facemode
+属性 | 说明
+---- | ---------------
+描述 | 轨迹的朝向模式 0表示世界朝向 1表示面向相机
+默认值 | `0`
+参数范围 | `0`, `1`
+```json
+{
+ "trail": {
+ "facemode": 0
+ }
+}
+```
+
+### 是否使用粒子颜色 useparticlecolor
+属性 | 说明
+---- | ---------------
+描述 | 表示是否使用粒子颜色作为轨迹段的初始颜色
+默认值 | `false`
+参数范围 | `true`, `false`
+说明 | 为true时 轨迹将在被生成的时刻使用所属粒子的颜色作为初始颜色 否则使用白色
+```json
+{
+ "trail": {
+ "useparticlecolor": true
+ }
+}
+```
+
+### 轨迹段动态颜色 colorfade(可选)
+属性 | 说明
+---- | ---------------
+描述 | 轨迹颜色曲线 用来表示轨迹段在生命周期内的颜色变化
+默认值 | 全程静态纯白色
+说明 | color值以RGBA顺序排列 可以参考粒子特效的动态属性
+```json
+{
+ "trail": {
+ "colorfade": [
+ {
+ "color": "1.0 1.0 1.0 1.0",
+ "time": "0%"
+ },
+ {
+ "color": "0.5 0.5 0.5 0.0",
+ "time": "100%"
+ }
+ ]
+ }
+}
+```
+
+### 是否使用粒子宽度 useparticlewidth
+属性 | 说明
+---- | ---------------
+描述 | 表示粒子是否使用粒子宽度作为轨迹段的初始宽度
+默认值 | `true`
+参数范围 | `true`, `false`
+说明 | 值为true时 轨迹将使用所属粒子的x缩放值作为初始宽度 否则为1.0
+```json
+{
+ "trail": {
+ "useparticlewidth": true
+ }
+}
+```
+
+### 轨迹段动态宽度 widthfade(可选)
+属性 | 说明
+---- | ---------------
+描述 | 轨迹宽度曲线 用来表示轨迹段在生命周期内的宽度缩放倍率变化
+默认值 | 1.0
+说明 | 格式参考粒子特效的动态属性格式 value中的值表示宽度倍数 而不是宽度值本身
+```json
+{
+ "trail": {
+ "widthfade": [
+ {
+ "value": "1.0",
+ "time": "0%"
+ },
+ {
+ "value": "0.2",
+ "time": "100%"
+ }
+ ]
+ }
+}
+```
+
+### 是否参照世界空间 worldspace
+属性 | 说明
+---- | ---------------
+描述 | 表示轨迹段是否在世界空间下生成
+默认值 | `true`
+参数范围 | `true`, `false`
+说明 | 为true时 会根据粒子的世界位置变化来生成轨迹 否则只会按照粒子相对于发射器的位置变化来生成轨迹 当粒子本身就处于世界空间时 true或false的效果相同
+```json
+{
+ "trail": {
+ "worldspace": true
+ }
+}
+```
+
+### 纹理模式 texmode
+属性 | 说明
+---- | ---------------
+描述 | 表示轨迹的贴图模式 决定轨迹的贴图如何采样
+默认值 | `0`
+参数范围 | `0 ~ 3`
+* Stretch(0): 横向拉伸贴图 来适配整条路径 不支持textile 支持纹理动画(使用粒子的纹理动画信息)
+* Tile(1): 在整条轨迹上重复平铺贴图 支持textile 不支持纹理动画
+* DistributePerSegment(2): 将贴图平分成n块 并分配给n段轨迹进行拉伸 不支持textile 支持纹理动画(使用粒子的纹理动画信息)
+* RepeatPerSegment(3): 对每一个轨迹段进行单独的平铺操作 支持textile 不支持纹理动画
+```json
+{
+ "trail": {
+ "texmode": 2
+ }
+}
+```
+
+### 纹理平铺率 textile
+属性 | 说明
+---- | ---------------
+描述 | 表示轨迹纹理的uv平铺率
+默认值 | `"1.0 1.0"`
+说明 | 目前仅Tile模式与RepeatPerSegment模式支持该属性 其他纹理模式平铺率均为1.0
+```json
+{
+ "trail": {
+ "texmode": 1,
+ "textile": "2.0 1.5"
+ }
+}
+```
+
+## 序列帧特效播放属性说明
+
+### 循环播放loop
+
+属性 | 说明
+---- | ---------------
+描述 | 用于控制序列帧特效是否循环播放
+默认值 | `true`
+参数范围 | `true`, `false`
+
+```json
+{
+ "loop": true
+}
+```
+
+### 帧随机播放shuffle
+
+属性 | 说明
+---- | ---------------
+描述 | 用于控制序列帧特效是否随机播放,即序列帧的播放顺序不是按照固定顺序
+默认值 | `false`
+参数范围 | `true`, `false`
+提示 | 序列帧数量越多效果越明显
+
+```json
+{
+ "shuffle": false
+}
+```
+
+### 播放帧率fps
+
+属性 | 说明
+---- | ----------------
+描述 | 用于控制序列帧特效每秒的播放数量
+默认值 | `30`
+参数范围 | [1 - 100]
+提示 | 受限于屏幕/游戏刷新率,建议序列帧的播放帧率不要超过30
+
+```json
+{
+ "fps": 30
+}
+```
+
+### 延迟开始播放
+
+属性 | 说明
+---- | ----------------
+描述 | 用于控制序列帧特效是否延迟指定时间(秒)播放
+默认值 | `0.0`
+参数范围|[0-999999]
+
+```json
+{
+ "delay": 10.0
+}
+```
+
+### 始终面向摄像机face_camera
+
+属性 | 说明
+---- | ------------------
+描述 | 用于控制序列帧特效是否始终正向于屏幕
+默认值 | `false`
+参数范围 | `true`, `false`
+
+```json
+{
+ "face_camera": false
+}
+```
+
+### 深度检测depth_test
+
+属性 | 说明
+---- | -----------------
+描述 | 用于控制序列帧特效是否开启深度检测
+默认值 | `false`
+参数范围 | `true`, `false`
+说明 | 如果关闭深度检测,序列帧一直会遮盖所在的屏幕平面渲染的东西,如果开启,则会依据深度进行相关渲染
+
+- 关闭深度检测
+
+
+
+- 打开深度检测
+
+
+
+```json
+{
+ "depth_test": false
+}
+```
+
+### 混合模式blend_mode
+
+属性 | 说明
+---- | --------------
+描述 | 用于控制不同序列帧特效混合效果
+默认值 | `1`
+参数范围 | `1`, `2`
+
+- 1, 透明度混合, 能保证两个颜色显示正常
+- 2, 颜色值累加,仅单纯累加对应颜色值
+
+```json
+{
+ "blend_mode": 1
+}
+```
+### 淡出距离
+
+属性 | 说明
+---- | --------------------------
+描述 | 序列帧与摄像机之间的距离小于该值时会自动调整序列帧的透明度
+默认值 | `0.0`
+提示 |距离摄像机越近,序列帧越透明
+
+```json
+{
+ "fade_distance": 10.0,
+}
+```
+### 层级layer
+
+属性 | 说明
+---- | --------------------------
+描述 | 支持序列帧前后层级效果,当数值越大,渲染越晚,显示越靠前
+默认值 | `1`
+参数范围 | 0 ~ 15
+
+```json
+{
+ "layer": 1
+}
+```
+## 序列帧特效贴图属性说明
+
+### 贴图texture
+
+属性 | 说明
+---- | -----------------------------------------------
+描述 | 序列帧的贴图路径
+默认值 | ``
+提示 | 贴图仅支持 .png 格式,在使用时需要忽略后缀名
+提示 | 序列帧 .png 贴图在同一目录下需要同名的 .json 配置文件,否则仅作为一个单帧图片显示,具体参考[序列帧配置](./90-中国版序列帧配置文件解析.md)
+
+
+```json
+{
+ "texture": "textures/sfxs/my123"
+}
+```
+
+### 贴图总缩放系数scale
+
+属性 | 说明
+--- | --------------------------------
+描述 | 序列帧贴图的总缩放参数,分别表示 x, y, z 方向的缩放系数
+默认值 | `1.0 1.0 1.0`
+提示 | 总缩放系数与序列帧的每帧系数叠加
+
+```json
+{
+ "scale": [1.0, 1.0, 1.0]
+}
+```
+
+### 贴图重复次数tex_repeat_num
+
+属性 | 说明
+---- | ----------
+描述 | 序列帧分别在 x, y 上的重复参数
+默认值 | `[1, 1]`
+
+```json
+{
+ "tex_repeat_num": [1, 1]
+}
+```
+
+- 使用 [1, 1] 效果
+
+
+
+- 使用 [5, 2] 效果
+
+
+
+### 旋转速度rot_speed
+
+属性 | 说明
+--- | -----------------------
+描述 | 序列帧贴图的沿 x, y, z 方向的旋转速度
+默认值 | `[0.0, 0.0, 0.0]`
+
+```json
+{
+ "rot_speed": [-1.0, 0.0, 1.0]
+}
+```
+
+## 序列帧特效动态属性说明
+### 每帧缩放scale
+属性 | 说明
+-- | ----------------------------------
+描述 | 用于设置序列帧每帧图片的缩放系数
+提示 | 该属性位在序列帧贴图配置文件的对应帧数里
+提示 | 如果修改该值,所有使用该序列帧贴图的特效都会受到影响
+
+```json
+{
+ "scale":
+ {
+ "x": 3.04,
+ "y": 3.04,
+ "z": 3.04
+ }
+}
+```
+
+
+
+
+
+### 动态颜色frame_color
+
+属性 | 说明
+---- | --------------------
+描述 | 用来控制序列帧特效在不同时期的颜色变化
+默认值 | `不开启`
+提示 | 颜色值在不同的点之间是按照线性变化,支持透明度设置
+
+```json
+{
+ "frame_color":
+ [
+ [
+ 1.0,
+ 0.9411764705882353,
+ 0.09411764705882353,
+ 1.0
+ ],
+ [
+ 0.06666666666666667,
+ 1.0,
+ 0.0196078431372549,
+ 0.7
+ ],
+ [
+ 1.0,
+ 0.23921568627450981,
+ 0.09019607843137255,
+ 1.0
+ ]
+ ]
+}
+```
+
+
+
+
+## 序列帧特效环状序列帧属性说明
+
+### 是否环状序列帧cylinder_enable
+
+属性 | 说明
+---- | --------------------
+描述 | 用于控制序列帧特效是否开启环状序列帧属性
+默认值 | `false`
+参数范围 | `true`, `false`
+
+- 关闭环状序列帧
+
+
+
+- 打开环状序列帧
+
+
+
+```json
+{
+ "cylinder_enable": false
+}
+```
+
+### 顶部半径cylinder_radius_up
+
+属性 | 说明
+---- | ------------------------
+描述 | 当开启环状序列帧属性后,用于控制序列帧的顶部半径
+默认值 | `0.0`
+参数范围 | 0.0 - 100000.0
+
+```json
+{
+ "cylinder_radius_up": 1.0
+}
+```
+
+### 底部半径cylinder_radius_down
+
+属性 | 说明
+---- | ------------------------
+描述 | 当开启环状序列帧属性后,用于控制序列帧的底部半径
+默认值 | `0.0`
+参数范围 | 0.0 - 100000.0
+
+```json
+{
+ "cylinder_radius_down": 1.0
+}
+```
+
+### 近似多边形数cylinder_frac_num
+
+属性 | 说明
+---- | --------------------------
+描述 | 当开启环状序列帧属性后,用于控制序列帧近似多边形数量
+默认值 | `8`
+参数范围 | 1 - 100000
+提示 | 参数越大则效果越好,当低于 3 时,该参数基本无效果
+
+```json
+{
+ "cylinder_frac_num": 10
+}
+```
+
+### 高度cylinder_height
+
+属性 | 说明
+---- | ----------------------
+描述 | 当开启环状序列帧属性后,用于控制序列帧的高度
+默认值 | `0.0`
+参数范围 | 0.0 - 100000.0
+
+```json
+{
+ "cylinder_height": 1.0
+}
+```
\ No newline at end of file
diff --git a/mcguide/16-美术/9-特效/80-中国版粒子配置文件解析.md b/mcguide/16-美术/9-特效/80-中国版粒子配置文件解析.md
new file mode 100644
index 0000000..8ed0de2
--- /dev/null
+++ b/mcguide/16-美术/9-特效/80-中国版粒子配置文件解析.md
@@ -0,0 +1,407 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/e3c80bef-08f6-455e-89cd-c5e8902ed470.png
+hard: 入门
+time: 30分钟
+---
+
+# 中国版粒子配置文件解析
+
+本文档主要包括三个部分:
+
+- [粒子属性介绍](#particleAttr)
+
+ 对粒子的每一个属性进行了介绍,方便读者了解particle json
+
+- [粒子效果规范](#particleRule)
+
+ 对游戏中最大可支持的粒子效果提供了约束,保证粒子效果在大部分机型上能够流畅运行
+
+- [粒子调试指令集](#particleOp)
+
+ 针对粒子编辑器暂时不能外放的现状,提供了实时预览粒子的游戏指令集,方便调试粒子效果
+
+
+
+
+## 1. 粒子属性
+
+粒子特效的配置文件为json格式,如下图所示:
+
+
+
+客户端中的粒子特效会根据数值变化,实时呈现不同的粒子效果,以下为对粒子配置文件json的解释。
+
+### 1.1 Initial
+
+
+
+关于粒子属性:
+
+- 3个数值框的,从左向右分别对应x,y,z,如Constant Force、Direction等
+
+- 2个数值框的,从左向右分别对应最小值和最大值
+
+- **粒子发射器的属性并不是完全如上对应的数值,而是最大值和最小值之间的一个随机值**
+
+ 如上图,Direction具有标有min和max的两个值,分别对应最小值和最大值
+
+- **粒子发射器发射的粒子,实际为空间中的一个朝向相机的矩形面片,这在粒子的size设置的时候只设置x,y得到体现。**
+
+下面简单介绍每个属性的作用及样例:
+
+#### Constant Force
+
+粒子受力,相当于粒子运动过程中的加速度
+
+
+
+#### Direction
+
+粒子发射的初始方向,取值为min和max之间的差值
+
+
+
+#### Damping Force
+
+阻力理解为方向与粒子速度方向相反的加速度,每一帧的运算的公式为:
+
+
v = v - damping force * v
+v为粒子当前速度,所以damping force实际上起到了逆向加速度因子的作用。
+
+
+
+#### Active Time与Inactive Time
+
+##### Active Time
+
+粒子发射器活跃时间
+
+
+
+##### Inactive Time
+
+粒子发射器冷却时间
+
+
+
+Active Time与Inactive Time这两个值是配合使用的,即粒子发射器每活跃Active Time之后,冷却Inactive Time,然后继续循环
+
+在使用的时候,可以将Active Time当作发射器生命周期,方便调试有时间限制的效果。如果将Active Time设置为0,粒子发射器会一直发射,没有停歇
+
+普通效果建议不设置这两个值,或者都设为0
+
+需要实现循环喷射效果时可以使用这两个参数
+
+#### Particle Size
+
+粒子出生时的大小,当前只有x,y值有效,z值无效,留给以后发射立方体用
+
+游戏中一个地形块的大小为1,以此作为尺寸参考
+
+
+
+#### Time To Live
+
+粒子生命周期,即每个粒子的存在时间
+
+
+
+#### Velocity
+
+粒子初始速度
+
+
+
+#### Rotation(废弃,建议使用Rotation Range)
+
+粒子初始角度,即粒子绕z轴的旋转的角度(0~360)
+
+
+
+#### Rotation Speed(废弃,建议使用Rotation Speed Range)
+
+粒子自转速度,每秒旋转Rotation Speed角度
+
+
+
+#### Rotation Range
+
+粒子初始旋转角度,即初始时刻粒子绕x,y,z三轴的旋转角度(0-360)
+
+```json
+{
+ "particleeffect": {
+ "rotationRange": {
+ "max": "90.0 90.0 90.0",
+ "min": "0.0 0.0 0.0"
+ },
+ ...
+ }
+}
+```
+
+#### Rotation Speed Range
+
+粒子自转速度,即绕x,y,z轴每秒旋转的角度(0-360)
+
+```json
+{
+ "particleeffect": {
+ "rotationSpeedRange": {
+ "max": "90.0 90.0 90.0",
+ "min": "0.0 0.0 0.0"
+ },
+ ...
+ }
+}
+```
+
+### 1.2 Variation
+
+该参数与粒子生命周期内的形变有关
+
+- Add:粒子尺寸每秒增加倍数,即`size = size * (1 + add)`,默认该值为0.0。
+
+- Multiply:粒子尺寸每秒尺寸缩放倍数,即`size = size * multiply`,默认值为1.0。
+
+- 每秒粒子尺寸的计算公式为:`size = size * multiply * (1 + add)`
+
+
+
+ ### 1.3 Color
+
+#### Color
+
+设置粒子颜色,格式为RGBA
+
+
+
+#### Color Fade
+
+该参数与粒子生命周期内的颜色变化有关
+
+
+
+粒子在生命周期中,可以在不同的时间点设置不同的颜色关键帧,粒子的颜色逐渐向关键帧渐变。
+
+如上图所示,粒子在0.00s时,颜色为(0.50,0.30,0.50,1.0),在0.5s时颜色值为(1.0,0.0,1.0,1.0),在2.0s时为(0.0,0.0,0.0,1.0)
+
+#### Color与Color Fade
+
+设置Color就不可设置Color Fade,设置Color Fade就不可设置Color,二者的关系是互斥的
+
+如果二者均不设置,则直接读取贴图的颜色
+
+#### Enable Color与Enable Texture
+
+部分粒子配置中会出现"enablecolor"和"enabletexture"配置项,他们都能影响粒子颜色的计算流程:
+
+- 粒子的初始颜色为纯白不透明
+- 若Enable Color启用,则粒子颜色会乘上Color或Color Fade中配置的颜色值,否则跳过
+- 若Enable Texture启用,则粒子颜色还会乘上贴图的颜色,否则只会乘上贴图的透明度
+
+二者均不设置的情况下,
+只要Color或Color Fade中任一配置存在,则Enable Color启用,同时Enable Texture禁用,效果为使用设置指定的颜色;
+要是Color和Color Fade的设置均不存在,则Enable Color禁用,同时Enable Texture启用,效果恰为直接读取贴图颜色。
+
+### 1.4 Emitter
+
+该部分主要介绍与发射器有关的参数
+
+处于性能考虑,每秒最多发射3000颗粒子
+
+#### Number Of Particles
+
+同时存活的粒子最大数量
+
+
+
+#### Emitter Size
+
+粒子发射器尺寸,即粒子出生空间大小,(0,0,0)说明粒子都从原点出生
+
+否则,粒子从定义的空间中随机位置生成
+
+
+
+#### Emission Rate
+
+粒子发射率,数值越高,发射频率越高
+
+左为min,右为max
+
+下图可以理解为最少每秒发射40次,最多每秒发射50次
+
+
+
+#### Emission Shape
+
+粒子发射器形状,当前支持球形和立方体,参数分别为“Box”、”Sphere”
+
+
+
+
+
+### 1.5 Resource
+
+#### Material
+
+**无效,开发中。**
+
+
+
+#### Texture
+
+可参考demo中的bb.png和bb.json进行阅读
+
+- "name"为粒子纹理路径,路径从textures开始,不需要后缀
+
+
+
+ 如果想添加新的纹理,需要将png(必须为png)文件放置在particle路径中
+
+- "ani"为粒子序列帧
+ - "ani"中"name"为序列帧的json配置文件路径,从textures开始,不需要后缀
+ - "ani"中"fps"为序列帧播放帧率(注意数字要加引号),最小值为0,默认值为30
+ - "ani"中"shuffle"为序列帧是否乱序播放(第一帧就开始随机),默认值为false(注意不加引号;图中未配置,使用默认值)
+
+
+
+上图中,"texture"的"name"对应的`textures/particle/bb`为序列帧贴图bb.png,而"ani"的"name"对应的`textures/particle/bb`为序列帧json配置文件bb.json
+
+[序列帧打包方式](./90-中国版序列帧配置文件解析.md#4-texture-packer使用配置)在序列帧文档中有介绍
+
+### 1.6 Render
+
+#### Blend Mode
+
+混合模式,建议开发者多尝试一下
+
+- "add"与背景色是叠加的关系
+
+
+
+- "blend"与背景色是覆盖的关系
+
+
+
+#### Face Camera Mode
+
+可用模式:
+
+- Rotate XYZ
+
+ 粒子始终朝向相机,适合正方形面片
+
+
+
+- Direction
+
+ 粒子Y轴朝向粒子运动方向,适合线性扩散效果
+
+
+
+如下图所示,粒子实际为x = 0.2, y = 2.0的长方形面片,face Camera Mode为Direction:
+
+
+
+建议开发者尝试改变burst.json中的参数,观察效果可以帮助理解
+
+#### Loop
+
+颜色或贴图序列帧是否循环,当粒子生命周期大于Color Fade或序列帧的时长的时候,可以进入循环模式
+
+
+
+
+
+
+
+
+## 2. 粒子效果规范
+
+- 粒子单幅贴图大小不要超过 32 * 32,粒子序列帧贴图参考序列帧规范
+
+- 小规模粒子
+
+ Particle Num <= 30, Particle Emitter Num <= 200
+
+- 中规模粒子
+
+ Particle Num <= 100, Particle Emitter Num <= 50
+
+- 大规模粒子
+
+ Particle Num <= 1000,Particle Emitter Num <= 5
+
+
+
+
+## 3. 粒子调试指令集
+
+### 3.1 指令集
+
+#### //crp \
+
+在玩家眼前创建粒子效果,name为粒子配置文件名,不包括”.json”后缀
+
+#### ///rep <>
+
+重新加载粒子效果,无参数
+
+#### //rmp <>
+
+移除游戏内所有粒子效果,无参数
+
+### 3.2 使用样例
+
+//crp fire
+
+
+
+
+
+
+
+//rmp
+
+
+
+
+
+
+
+//rep
+
+加载mod时,对应mod资源会被拷贝到如下目录中
+
+```%AppData%\MinecraftPE_Netease\games\com.netease\resource_packs```
+
+要动态修改粒子效果,需要修改该目录下的同名mod中的对应粒子特效配置文件,再使用`//rep`指令。
+
+下图为fire.json所在的文件夹
+
+
+
+fire.json原先的配置及表现效果如下所示:
+
+
+
+
+
+修改fire.json中参数如下图后,在游戏中输入`//rep`指令,可以看到该粒子效果发生了改变:
+
+
+
+
+
+
+
+## 4. 致开发者
+
+粒子效果非常灵活,熟练各个参数,可以做出非常出彩的效果
+
+同时,各位开发者也一定不要忘记遵守粒子效果规范,毕竟游戏的性能是有限的
+
+
+
diff --git a/mcguide/16-美术/9-特效/90-中国版序列帧配置文件解析.md b/mcguide/16-美术/9-特效/90-中国版序列帧配置文件解析.md
new file mode 100644
index 0000000..75499be
--- /dev/null
+++ b/mcguide/16-美术/9-特效/90-中国版序列帧配置文件解析.md
@@ -0,0 +1,100 @@
+---
+front: https://nie.res.netease.com/r/pic/20230130/768c242f-92fb-4898-91ea-619fdc31ddfc.png
+hard: 入门
+time: 10分钟
+---
+
+# 中国版序列帧配置文件解析
+
+## 1. 序列帧简介
+
+《我的世界》中提供了序列帧类型的特效,序列帧本质上即为一个单面片的贴图,如果未设置始终面向摄像头,当观察角度位于序列帧的侧面时可以看出为一片面片
+
+
+
+当序列帧的贴图不断变化时,即可以形成视觉上的动画效果,因此可以用来实现序列帧动画特效。在游戏中一般需要将单个特效的所有贴图合在一起变成一幅大图,上述中的特效包含9幅贴图,将9幅图用合图工具(Texture Packer)合图如下所示:
+
+
+
+
+
+## 2. 序列帧json参数说明
+
+序列帧动画主要包含一个json文件与一个贴图,这两者由Texture Packer生成
+
+其中json文件内容如下:
+
+
+
+其中包含frames和meta两个字段:
+
+- **"frames"** 表示每帧动画的贴图信息
+- **"meta"** 字段包含合图软件相关的信息
+
+开发者对此文件基本可以不用关注,其中在frames字段中可以自己手动加入字段 **”scale”** ,表示对该帧进行缩放,没写默认为1倍缩放,即为:
+
+
+
+另外该缩放功能支持插值,即在不同帧之间大小倍数不同时会进行平滑过渡,如果需要关掉插值则需要关掉插值开关(下文提到的[**"lerp_scale"**](#lerpScale)字段)
+
+如果使用编辑器生成序列帧动画,则会在此基础上多一个编辑器对应的json,如下图所示:
+
+
+
+其中cylinder开头的配置为环状序列帧的功能:
+
+- **"cylinder_enable"** 表示是否为环状序列帧
+
+- **"cylinder_frac_num"** 表示近似多边形的个数,即环状体由几个多边形组成
+
+- **"cylinder_height"** 表示环状序列帧高度
+
+- **"cylinder_radius_down"** 和 **"cylinder_radius_up"** 表示底部和顶部的环状半径
+- **"face_camera"** 表示帧动画是否始终面向摄像机
+- **"fps"** 表示帧动画的播放帧率,即一秒播放多少帧动画
+- **"shuffle"** 表示是否开启随机播放帧动画
+- **"layer"** 表示设置渲染层级,默认设置为1,设置范围为0-15,,层级为1表示不开启渲染层级的功能,开启后,渲染层级高的会遮挡层级低的,并且同一层级的特效会根据位置存在遮挡关系
+- **"lerp_scale"** 表示是否开启帧之间的插值
+- **"loop"** 表示帧动画是否循环
+- **"rot_speed"** 表示帧动画的旋转速度
+- **"scale"** 表示帧动画的整体缩放
+- **"tex_repeat_num"** 表示在x轴和y轴两个方向上重复的特效个数
+- **"texture"** 为上述由texture packer生成的具体json特效路径
+
+
+
+## 3. 序列帧贴图生成指南
+
+序列帧贴图资源需要使用Texture Packer生成,打包格式见下文[Texture Packer使用配置](#TexturePacker)
+
+Texture Packer导出大图和json文件,放置在`textures/picture/sfxs`下
+
+如下图所示,序列帧贴图与普通贴图唯一的不同就是多了一个同文件名的json文件,该贴图和json文件都是由Texture Packer导出
+
+
+
+
+
+## 4. Texture Packer使用配置
+
+
+
+Texture Packer主要用来打包序列帧文件,需要注意的配置如下:
+
+
+
+- Allow rotation不要勾选
+
+- Trim mode选择为None
+
+这样导出的大图中每一幅小图都一样大,**当前我们的序列帧绘制只支持大小相同的子图**
+
+
+
+## 5. 序列帧贴图规范
+
+- 贴图格式为 png
+
+- 单张贴图大小不超过512 * 512
+
+- 总像素数不要超过512 * 512 * 5
\ No newline at end of file
diff --git a/mcguide/16-美术/9-特效/images/FrameDynamicColorEffect.gif b/mcguide/16-美术/9-特效/images/FrameDynamicColorEffect.gif
new file mode 100644
index 0000000..3eb38dd
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/FrameDynamicColorEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/ParticleDepthCheckEnableEffect.gif b/mcguide/16-美术/9-特效/images/ParticleDepthCheckEnableEffect.gif
new file mode 100644
index 0000000..5836dc8
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/ParticleDepthCheckEnableEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/ParticleDepthCheckUnEnableEffect.gif b/mcguide/16-美术/9-特效/images/ParticleDepthCheckUnEnableEffect.gif
new file mode 100644
index 0000000..3b6645d
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/ParticleDepthCheckUnEnableEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/V29boneitem.gif b/mcguide/16-美术/9-特效/images/V29boneitem.gif
new file mode 100644
index 0000000..691ef28
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/V29boneitem.gif differ
diff --git a/mcguide/16-美术/9-特效/images/V29editmodel.png b/mcguide/16-美术/9-特效/images/V29editmodel.png
new file mode 100644
index 0000000..a90ffc3
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/V29editmodel.png differ
diff --git a/mcguide/16-美术/9-特效/images/V29finemodel.png b/mcguide/16-美术/9-特效/images/V29finemodel.png
new file mode 100644
index 0000000..685a24d
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/V29finemodel.png differ
diff --git a/mcguide/16-美术/9-特效/images/bb2fbx6.png b/mcguide/16-美术/9-特效/images/bb2fbx6.png
new file mode 100644
index 0000000..fbdb51d
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/bb2fbx6.png differ
diff --git a/mcguide/16-美术/9-特效/images/bb2fbx7.png b/mcguide/16-美术/9-特效/images/bb2fbx7.png
new file mode 100644
index 0000000..88158b0
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/bb2fbx7.png differ
diff --git a/mcguide/16-美术/9-特效/images/bb2fbx8.png b/mcguide/16-美术/9-特效/images/bb2fbx8.png
new file mode 100644
index 0000000..deb193f
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/bb2fbx8.png differ
diff --git a/mcguide/16-美术/9-特效/images/create_binding07.gif b/mcguide/16-美术/9-特效/images/create_binding07.gif
new file mode 100644
index 0000000..74e3fd7
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/create_binding07.gif differ
diff --git a/mcguide/16-美术/9-特效/images/deleteani.gif b/mcguide/16-美术/9-特效/images/deleteani.gif
new file mode 100644
index 0000000..7190d68
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/deleteani.gif differ
diff --git a/mcguide/16-美术/9-特效/images/demo_preview_effect.png b/mcguide/16-美术/9-特效/images/demo_preview_effect.png
new file mode 100644
index 0000000..e155fb5
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/demo_preview_effect.png differ
diff --git a/mcguide/16-美术/9-特效/images/demo_preview_model.gif b/mcguide/16-美术/9-特效/images/demo_preview_model.gif
new file mode 100644
index 0000000..302a449
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/demo_preview_model.gif differ
diff --git a/mcguide/16-美术/9-特效/images/editscreensize.png b/mcguide/16-美术/9-特效/images/editscreensize.png
new file mode 100644
index 0000000..da6f587
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/editscreensize.png differ
diff --git a/mcguide/16-美术/9-特效/images/edittrailpoint.gif b/mcguide/16-美术/9-特效/images/edittrailpoint.gif
new file mode 100644
index 0000000..559828b
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/edittrailpoint.gif differ
diff --git a/mcguide/16-美术/9-特效/images/emitterpath.png b/mcguide/16-美术/9-特效/images/emitterpath.png
new file mode 100644
index 0000000..225b2aa
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/emitterpath.png differ
diff --git a/mcguide/16-美术/9-特效/images/kjpy.gif b/mcguide/16-美术/9-特效/images/kjpy.gif
new file mode 100644
index 0000000..21c97f2
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/kjpy.gif differ
diff --git a/mcguide/16-美术/9-特效/images/material.png b/mcguide/16-美术/9-特效/images/material.png
new file mode 100644
index 0000000..891351c
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/material.png differ
diff --git a/mcguide/16-美术/9-特效/images/ms2.png b/mcguide/16-美术/9-特效/images/ms2.png
new file mode 100644
index 0000000..c34d501
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/ms2.png differ
diff --git a/mcguide/16-美术/9-特效/images/ms3.png b/mcguide/16-美术/9-特效/images/ms3.png
new file mode 100644
index 0000000..7336eb0
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/ms3.png differ
diff --git a/mcguide/16-美术/9-特效/images/multipass1.png b/mcguide/16-美术/9-特效/images/multipass1.png
new file mode 100644
index 0000000..8b3e8cc
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/multipass1.png differ
diff --git a/mcguide/16-美术/9-特效/images/particle_DynamicColorEffectPanel.png b/mcguide/16-美术/9-特效/images/particle_DynamicColorEffectPanel.png
new file mode 100644
index 0000000..52dd7ba
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/particle_DynamicColorEffectPanel.png differ
diff --git a/mcguide/16-美术/9-特效/images/preview_fp_model.gif b/mcguide/16-美术/9-特效/images/preview_fp_model.gif
new file mode 100644
index 0000000..319a49c
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/preview_fp_model.gif differ
diff --git a/mcguide/16-美术/9-特效/images/preview_other_effect.png b/mcguide/16-美术/9-特效/images/preview_other_effect.png
new file mode 100644
index 0000000..99539a2
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/preview_other_effect.png differ
diff --git a/mcguide/16-美术/9-特效/images/preview_other_model.png b/mcguide/16-美术/9-特效/images/preview_other_model.png
new file mode 100644
index 0000000..d4790fc
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/preview_other_model.png differ
diff --git a/mcguide/16-美术/9-特效/images/preview_panel.png b/mcguide/16-美术/9-特效/images/preview_panel.png
new file mode 100644
index 0000000..f180be7
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/preview_panel.png differ
diff --git a/mcguide/16-美术/9-特效/images/refreshmaterial.gif b/mcguide/16-美术/9-特效/images/refreshmaterial.gif
new file mode 100644
index 0000000..2ce1a56
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/refreshmaterial.gif differ
diff --git a/mcguide/16-美术/9-特效/images/showkeyframe.png b/mcguide/16-美术/9-特效/images/showkeyframe.png
new file mode 100644
index 0000000..b4ceafb
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/showkeyframe.png differ
diff --git a/mcguide/16-美术/9-特效/images/spark_DynamicColorEffect.gif b/mcguide/16-美术/9-特效/images/spark_DynamicColorEffect.gif
new file mode 100644
index 0000000..0455c8b
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_DynamicColorEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_DynamicColorEffectPanel.png b/mcguide/16-美术/9-特效/images/spark_DynamicColorEffectPanel.png
new file mode 100644
index 0000000..6054334
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_DynamicColorEffectPanel.png differ
diff --git a/mcguide/16-美术/9-特效/images/spark_DynamicSizeEffect.gif b/mcguide/16-美术/9-特效/images/spark_DynamicSizeEffect.gif
new file mode 100644
index 0000000..2f611ee
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_DynamicSizeEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_DynamicSizeEffectPanel.png b/mcguide/16-美术/9-特效/images/spark_DynamicSizeEffectPanel.png
new file mode 100644
index 0000000..9e25871
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_DynamicSizeEffectPanel.png differ
diff --git a/mcguide/16-美术/9-特效/images/spark_EmitterSizeScaleEffect.gif b/mcguide/16-美术/9-特效/images/spark_EmitterSizeScaleEffect.gif
new file mode 100644
index 0000000..c9bc40b
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_EmitterSizeScaleEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_FrameDepthCheckEffect.gif b/mcguide/16-美术/9-特效/images/spark_FrameDepthCheckEffect.gif
new file mode 100644
index 0000000..4400e4e
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_FrameDepthCheckEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_FrameDepthCheckEnableEffect.gif b/mcguide/16-美术/9-特效/images/spark_FrameDepthCheckEnableEffect.gif
new file mode 100644
index 0000000..b73a2aa
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_FrameDepthCheckEnableEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_FrameEffectNormal.gif b/mcguide/16-美术/9-特效/images/spark_FrameEffectNormal.gif
new file mode 100644
index 0000000..dcc2fb1
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_FrameEffectNormal.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_FrameEffectRing.gif b/mcguide/16-美术/9-特效/images/spark_FrameEffectRing.gif
new file mode 100644
index 0000000..8727317
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_FrameEffectRing.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_FramePerFrameEffect.gif b/mcguide/16-美术/9-特效/images/spark_FramePerFrameEffect.gif
new file mode 100644
index 0000000..1597c5f
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_FramePerFrameEffect.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_FramePerFramePanel.png b/mcguide/16-美术/9-特效/images/spark_FramePerFramePanel.png
new file mode 100644
index 0000000..8044229
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_FramePerFramePanel.png differ
diff --git a/mcguide/16-美术/9-特效/images/spark_ParticleDirection.gif b/mcguide/16-美术/9-特效/images/spark_ParticleDirection.gif
new file mode 100644
index 0000000..0ea0bd9
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_ParticleDirection.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_ParticleDisorder.gif b/mcguide/16-美术/9-特效/images/spark_ParticleDisorder.gif
new file mode 100644
index 0000000..969acbb
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_ParticleDisorder.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_ParticleInwards.gif b/mcguide/16-美术/9-特效/images/spark_ParticleInwards.gif
new file mode 100644
index 0000000..c9b083a
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_ParticleInwards.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_ParticleNumber.gif b/mcguide/16-美术/9-特效/images/spark_ParticleNumber.gif
new file mode 100644
index 0000000..1ef4cf5
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_ParticleNumber.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_ParticleOutwards.gif b/mcguide/16-美术/9-特效/images/spark_ParticleOutwards.gif
new file mode 100644
index 0000000..99dca6e
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_ParticleOutwards.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_ParticlePath.gif b/mcguide/16-美术/9-特效/images/spark_ParticlePath.gif
new file mode 100644
index 0000000..1315af1
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_ParticlePath.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_SizeScalePanel.png b/mcguide/16-美术/9-特效/images/spark_SizeScalePanel.png
new file mode 100644
index 0000000..fb71dc0
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_SizeScalePanel.png differ
diff --git a/mcguide/16-美术/9-特效/images/spark_TexRepeatNum1_1.gif b/mcguide/16-美术/9-特效/images/spark_TexRepeatNum1_1.gif
new file mode 100644
index 0000000..44dc906
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_TexRepeatNum1_1.gif differ
diff --git a/mcguide/16-美术/9-特效/images/spark_TexRepeatNum5_2.gif b/mcguide/16-美术/9-特效/images/spark_TexRepeatNum5_2.gif
new file mode 100644
index 0000000..bc54c6e
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/spark_TexRepeatNum5_2.gif differ
diff --git a/mcguide/16-美术/9-特效/images/stevepng.png b/mcguide/16-美术/9-特效/images/stevepng.png
new file mode 100644
index 0000000..81f29c3
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/stevepng.png differ
diff --git a/mcguide/16-美术/9-特效/images/trailedit.png b/mcguide/16-美术/9-特效/images/trailedit.png
new file mode 100644
index 0000000..7da6a5c
Binary files /dev/null and b/mcguide/16-美术/9-特效/images/trailedit.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A1.png b/mcguide/16-美术/9-特效/picture/A1.png
new file mode 100644
index 0000000..1aad5c6
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A10.png b/mcguide/16-美术/9-特效/picture/A10.png
new file mode 100644
index 0000000..6ea4711
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A10.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A11.png b/mcguide/16-美术/9-特效/picture/A11.png
new file mode 100644
index 0000000..a0dd2dc
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A11.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A12.png b/mcguide/16-美术/9-特效/picture/A12.png
new file mode 100644
index 0000000..10df911
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A12.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A13.png b/mcguide/16-美术/9-特效/picture/A13.png
new file mode 100644
index 0000000..1c02a4a
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A13.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A14.png b/mcguide/16-美术/9-特效/picture/A14.png
new file mode 100644
index 0000000..ede1330
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A14.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A15.png b/mcguide/16-美术/9-特效/picture/A15.png
new file mode 100644
index 0000000..1de2798
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A15.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A17.png b/mcguide/16-美术/9-特效/picture/A17.png
new file mode 100644
index 0000000..1b8ff2e
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A17.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A19.png b/mcguide/16-美术/9-特效/picture/A19.png
new file mode 100644
index 0000000..0462341
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A19.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A2.png b/mcguide/16-美术/9-特效/picture/A2.png
new file mode 100644
index 0000000..ed0d777
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A2.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A20.png b/mcguide/16-美术/9-特效/picture/A20.png
new file mode 100644
index 0000000..8696d85
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A20.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A21.png b/mcguide/16-美术/9-特效/picture/A21.png
new file mode 100644
index 0000000..84339e3
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A21.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A22.png b/mcguide/16-美术/9-特效/picture/A22.png
new file mode 100644
index 0000000..69e6b2e
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A22.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A23.png b/mcguide/16-美术/9-特效/picture/A23.png
new file mode 100644
index 0000000..1aa2db8
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A23.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A24.png b/mcguide/16-美术/9-特效/picture/A24.png
new file mode 100644
index 0000000..ba4c37d
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A24.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A25.png b/mcguide/16-美术/9-特效/picture/A25.png
new file mode 100644
index 0000000..6991caa
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A25.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A26.png b/mcguide/16-美术/9-特效/picture/A26.png
new file mode 100644
index 0000000..0223437
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A26.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A27.png b/mcguide/16-美术/9-特效/picture/A27.png
new file mode 100644
index 0000000..c001299
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A27.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A28.png b/mcguide/16-美术/9-特效/picture/A28.png
new file mode 100644
index 0000000..cf38eb4
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A28.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A29.png b/mcguide/16-美术/9-特效/picture/A29.png
new file mode 100644
index 0000000..8c0e3a4
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A29.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A3.png b/mcguide/16-美术/9-特效/picture/A3.png
new file mode 100644
index 0000000..2d22b00
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A3.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A32.png b/mcguide/16-美术/9-特效/picture/A32.png
new file mode 100644
index 0000000..ca088c3
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A32.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A33.png b/mcguide/16-美术/9-特效/picture/A33.png
new file mode 100644
index 0000000..cf918cc
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A33.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A35.png b/mcguide/16-美术/9-特效/picture/A35.png
new file mode 100644
index 0000000..96e7aa2
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A35.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A4.png b/mcguide/16-美术/9-特效/picture/A4.png
new file mode 100644
index 0000000..3919433
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A4.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A5.png b/mcguide/16-美术/9-特效/picture/A5.png
new file mode 100644
index 0000000..82190bc
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A5.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A6.png b/mcguide/16-美术/9-特效/picture/A6.png
new file mode 100644
index 0000000..180c02e
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A6.png differ
diff --git a/mcguide/16-美术/9-特效/picture/A7.png b/mcguide/16-美术/9-特效/picture/A7.png
new file mode 100644
index 0000000..8691f55
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/A7.png differ
diff --git a/mcguide/16-美术/9-特效/picture/B1.gif b/mcguide/16-美术/9-特效/picture/B1.gif
new file mode 100644
index 0000000..a644c1d
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B1.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B10.gif b/mcguide/16-美术/9-特效/picture/B10.gif
new file mode 100644
index 0000000..13351bc
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B10.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B11.gif b/mcguide/16-美术/9-特效/picture/B11.gif
new file mode 100644
index 0000000..ad0669f
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B11.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B12.gif b/mcguide/16-美术/9-特效/picture/B12.gif
new file mode 100644
index 0000000..a292518
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B12.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B13.gif b/mcguide/16-美术/9-特效/picture/B13.gif
new file mode 100644
index 0000000..462a29f
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B13.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B14.gif b/mcguide/16-美术/9-特效/picture/B14.gif
new file mode 100644
index 0000000..7824207
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B14.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B15.gif b/mcguide/16-美术/9-特效/picture/B15.gif
new file mode 100644
index 0000000..4454b90
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B15.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B2.gif b/mcguide/16-美术/9-特效/picture/B2.gif
new file mode 100644
index 0000000..a5d89f2
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B2.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B3.gif b/mcguide/16-美术/9-特效/picture/B3.gif
new file mode 100644
index 0000000..a2ae496
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B3.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B4.gif b/mcguide/16-美术/9-特效/picture/B4.gif
new file mode 100644
index 0000000..ff725f6
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B4.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B5.gif b/mcguide/16-美术/9-特效/picture/B5.gif
new file mode 100644
index 0000000..b022da3
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B5.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B6.gif b/mcguide/16-美术/9-特效/picture/B6.gif
new file mode 100644
index 0000000..cf23d5b
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B6.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B7.gif b/mcguide/16-美术/9-特效/picture/B7.gif
new file mode 100644
index 0000000..172802b
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B7.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B8.gif b/mcguide/16-美术/9-特效/picture/B8.gif
new file mode 100644
index 0000000..d4c8e8f
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B8.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/B9.gif b/mcguide/16-美术/9-特效/picture/B9.gif
new file mode 100644
index 0000000..7c8d701
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/B9.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/fbx_particle/fbx_particle_1.gif b/mcguide/16-美术/9-特效/picture/fbx_particle/fbx_particle_1.gif
new file mode 100644
index 0000000..e770bba
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/fbx_particle/fbx_particle_1.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/fbx_particle/fbx_particle_2.gif b/mcguide/16-美术/9-特效/picture/fbx_particle/fbx_particle_2.gif
new file mode 100644
index 0000000..e3f7b19
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/fbx_particle/fbx_particle_2.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/create_1.png b/mcguide/16-美术/9-特效/picture/mics_particle/create_1.png
new file mode 100644
index 0000000..0d928d6
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/create_1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/create_2.png b/mcguide/16-美术/9-特效/picture/mics_particle/create_2.png
new file mode 100644
index 0000000..b902166
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/create_2.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/curve_1.gif b/mcguide/16-美术/9-特效/picture/mics_particle/curve_1.gif
new file mode 100644
index 0000000..ac952ae
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/curve_1.gif differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/curve_2.png b/mcguide/16-美术/9-特效/picture/mics_particle/curve_2.png
new file mode 100644
index 0000000..4d615c9
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/curve_2.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/curve_3.png b/mcguide/16-美术/9-特效/picture/mics_particle/curve_3.png
new file mode 100644
index 0000000..bb33ca8
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/curve_3.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/emitter_overview.png b/mcguide/16-美术/9-特效/picture/mics_particle/emitter_overview.png
new file mode 100644
index 0000000..eb4aa1e
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/emitter_overview.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/molang_input.png b/mcguide/16-美术/9-特效/picture/mics_particle/molang_input.png
new file mode 100644
index 0000000..d7d1449
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/molang_input.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable.png b/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable.png
new file mode 100644
index 0000000..f58014d
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable_1.png b/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable_1.png
new file mode 100644
index 0000000..91aa66a
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable_1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable_2.png b/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable_2.png
new file mode 100644
index 0000000..8dce231
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/molang_variable_2.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/particle_billboard.png b/mcguide/16-美术/9-特效/picture/mics_particle/particle_billboard.png
new file mode 100644
index 0000000..5306ef8
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/particle_billboard.png differ
diff --git a/mcguide/16-美术/9-特效/picture/mics_particle/property_overview.png b/mcguide/16-美术/9-特效/picture/mics_particle/property_overview.png
new file mode 100644
index 0000000..bda66fa
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/mics_particle/property_overview.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-1.png b/mcguide/16-美术/9-特效/picture/particle/reg1-1.png
new file mode 100644
index 0000000..e8ebf40
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-10.png b/mcguide/16-美术/9-特效/picture/particle/reg1-10.png
new file mode 100644
index 0000000..8dd3de8
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-10.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-11.png b/mcguide/16-美术/9-特效/picture/particle/reg1-11.png
new file mode 100644
index 0000000..052e175
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-11.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-12.png b/mcguide/16-美术/9-特效/picture/particle/reg1-12.png
new file mode 100644
index 0000000..d641d1c
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-12.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-13.png b/mcguide/16-美术/9-特效/picture/particle/reg1-13.png
new file mode 100644
index 0000000..7f3e04e
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-13.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-14.png b/mcguide/16-美术/9-特效/picture/particle/reg1-14.png
new file mode 100644
index 0000000..39809bd
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-14.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-15.png b/mcguide/16-美术/9-特效/picture/particle/reg1-15.png
new file mode 100644
index 0000000..687fddc
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-15.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-16.png b/mcguide/16-美术/9-特效/picture/particle/reg1-16.png
new file mode 100644
index 0000000..1d76e30
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-16.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-17.png b/mcguide/16-美术/9-特效/picture/particle/reg1-17.png
new file mode 100644
index 0000000..f00ef7c
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-17.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-18.png b/mcguide/16-美术/9-特效/picture/particle/reg1-18.png
new file mode 100644
index 0000000..2fa3286
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-18.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-19.png b/mcguide/16-美术/9-特效/picture/particle/reg1-19.png
new file mode 100644
index 0000000..3e6e84d
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-19.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-2.png b/mcguide/16-美术/9-特效/picture/particle/reg1-2.png
new file mode 100644
index 0000000..eec670e
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-2.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-20.png b/mcguide/16-美术/9-特效/picture/particle/reg1-20.png
new file mode 100644
index 0000000..bb44056
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-20.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-21.png b/mcguide/16-美术/9-特效/picture/particle/reg1-21.png
new file mode 100644
index 0000000..f47515c
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-21.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-22.png b/mcguide/16-美术/9-特效/picture/particle/reg1-22.png
new file mode 100644
index 0000000..55e4c93
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-22.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-23.png b/mcguide/16-美术/9-特效/picture/particle/reg1-23.png
new file mode 100644
index 0000000..fc63d97
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-23.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-24.png b/mcguide/16-美术/9-特效/picture/particle/reg1-24.png
new file mode 100644
index 0000000..579af3b
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-24.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-25.png b/mcguide/16-美术/9-特效/picture/particle/reg1-25.png
new file mode 100644
index 0000000..51a9ca6
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-25.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-26.png b/mcguide/16-美术/9-特效/picture/particle/reg1-26.png
new file mode 100644
index 0000000..46b7533
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-26.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-27-1.png b/mcguide/16-美术/9-特效/picture/particle/reg1-27-1.png
new file mode 100644
index 0000000..cf68466
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-27-1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-27.png b/mcguide/16-美术/9-特效/picture/particle/reg1-27.png
new file mode 100644
index 0000000..6d26912
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-27.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-28.png b/mcguide/16-美术/9-特效/picture/particle/reg1-28.png
new file mode 100644
index 0000000..add938f
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-28.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-29.png b/mcguide/16-美术/9-特效/picture/particle/reg1-29.png
new file mode 100644
index 0000000..0f9a46f
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-29.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-3.png b/mcguide/16-美术/9-特效/picture/particle/reg1-3.png
new file mode 100644
index 0000000..8838f93
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-3.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-4.png b/mcguide/16-美术/9-特效/picture/particle/reg1-4.png
new file mode 100644
index 0000000..f1c4bd4
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-4.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-5.png b/mcguide/16-美术/9-特效/picture/particle/reg1-5.png
new file mode 100644
index 0000000..676dd69
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-5.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-6.png b/mcguide/16-美术/9-特效/picture/particle/reg1-6.png
new file mode 100644
index 0000000..edf7346
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-6.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-7.png b/mcguide/16-美术/9-特效/picture/particle/reg1-7.png
new file mode 100644
index 0000000..fbfae93
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-7.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-8.png b/mcguide/16-美术/9-特效/picture/particle/reg1-8.png
new file mode 100644
index 0000000..021f049
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-8.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg1-9.png b/mcguide/16-美术/9-特效/picture/particle/reg1-9.png
new file mode 100644
index 0000000..5b43632
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg1-9.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-1.png b/mcguide/16-美术/9-特效/picture/particle/reg3-1.png
new file mode 100644
index 0000000..926b123
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-2.png b/mcguide/16-美术/9-特效/picture/particle/reg3-2.png
new file mode 100644
index 0000000..4a62ce6
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-2.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-3.png b/mcguide/16-美术/9-特效/picture/particle/reg3-3.png
new file mode 100644
index 0000000..aa115ab
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-3.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-4.png b/mcguide/16-美术/9-特效/picture/particle/reg3-4.png
new file mode 100644
index 0000000..ba8522d
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-4.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-5.png b/mcguide/16-美术/9-特效/picture/particle/reg3-5.png
new file mode 100644
index 0000000..4c43d28
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-5.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-6.png b/mcguide/16-美术/9-特效/picture/particle/reg3-6.png
new file mode 100644
index 0000000..f30c77c
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-6.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-7.png b/mcguide/16-美术/9-特效/picture/particle/reg3-7.png
new file mode 100644
index 0000000..c158966
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-7.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-8.png b/mcguide/16-美术/9-特效/picture/particle/reg3-8.png
new file mode 100644
index 0000000..86419ed
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-8.png differ
diff --git a/mcguide/16-美术/9-特效/picture/particle/reg3-9.png b/mcguide/16-美术/9-特效/picture/particle/reg3-9.png
new file mode 100644
index 0000000..2331922
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/particle/reg3-9.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg1-1.png b/mcguide/16-美术/9-特效/picture/sfx/reg1-1.png
new file mode 100644
index 0000000..ba96461
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg1-1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg1-2.png b/mcguide/16-美术/9-特效/picture/sfx/reg1-2.png
new file mode 100644
index 0000000..5bf7fcc
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg1-2.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg1-3.png b/mcguide/16-美术/9-特效/picture/sfx/reg1-3.png
new file mode 100644
index 0000000..978f259
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg1-3.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg2-1.png b/mcguide/16-美术/9-特效/picture/sfx/reg2-1.png
new file mode 100644
index 0000000..a53f200
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg2-1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg2-2.png b/mcguide/16-美术/9-特效/picture/sfx/reg2-2.png
new file mode 100644
index 0000000..dee8959
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg2-2.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg2-3.png b/mcguide/16-美术/9-特效/picture/sfx/reg2-3.png
new file mode 100644
index 0000000..f46465a
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg2-3.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg3-1.png b/mcguide/16-美术/9-特效/picture/sfx/reg3-1.png
new file mode 100644
index 0000000..2faa696
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg3-1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg4-1.png b/mcguide/16-美术/9-特效/picture/sfx/reg4-1.png
new file mode 100644
index 0000000..a2f770c
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg4-1.png differ
diff --git a/mcguide/16-美术/9-特效/picture/sfx/reg4-2.png b/mcguide/16-美术/9-特效/picture/sfx/reg4-2.png
new file mode 100644
index 0000000..9a98243
Binary files /dev/null and b/mcguide/16-美术/9-特效/picture/sfx/reg4-2.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/37.png b/mcguide/16-美术/picture/brief_intro/37.png
new file mode 100644
index 0000000..bd74819
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/37.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/38.png b/mcguide/16-美术/picture/brief_intro/38.png
new file mode 100644
index 0000000..c88f78e
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/38.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/39.png b/mcguide/16-美术/picture/brief_intro/39.png
new file mode 100644
index 0000000..9825334
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/39.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/40.png b/mcguide/16-美术/picture/brief_intro/40.png
new file mode 100644
index 0000000..5238c50
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/40.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/41.png b/mcguide/16-美术/picture/brief_intro/41.png
new file mode 100644
index 0000000..c9763ec
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/41.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/42.png b/mcguide/16-美术/picture/brief_intro/42.png
new file mode 100644
index 0000000..0a771e3
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/42.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/43.png b/mcguide/16-美术/picture/brief_intro/43.png
new file mode 100644
index 0000000..0d00cbb
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/43.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/44.png b/mcguide/16-美术/picture/brief_intro/44.png
new file mode 100644
index 0000000..70a2487
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/44.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/45.png b/mcguide/16-美术/picture/brief_intro/45.png
new file mode 100644
index 0000000..820f991
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/45.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/46.png b/mcguide/16-美术/picture/brief_intro/46.png
new file mode 100644
index 0000000..fe411f8
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/46.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/47.png b/mcguide/16-美术/picture/brief_intro/47.png
new file mode 100644
index 0000000..06beb06
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/47.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/48.png b/mcguide/16-美术/picture/brief_intro/48.png
new file mode 100644
index 0000000..5fea99f
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/48.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/49.png b/mcguide/16-美术/picture/brief_intro/49.png
new file mode 100644
index 0000000..ecbd17e
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/49.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/50.png b/mcguide/16-美术/picture/brief_intro/50.png
new file mode 100644
index 0000000..6fa9466
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/50.png differ
diff --git a/mcguide/16-美术/picture/brief_intro/54.png b/mcguide/16-美术/picture/brief_intro/54.png
new file mode 100644
index 0000000..0870e89
Binary files /dev/null and b/mcguide/16-美术/picture/brief_intro/54.png differ
diff --git a/mcguide/18-界面与交互/0-界面编辑器改版说明.md b/mcguide/18-界面与交互/0-界面编辑器改版说明.md
new file mode 100644
index 0000000..8149128
--- /dev/null
+++ b/mcguide/18-界面与交互/0-界面编辑器改版说明.md
@@ -0,0 +1,110 @@
+---
+front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/ui_image004.29b265a4.png
+hard: 入门
+time: 10分钟
+---
+# 界面编辑器改版说明
+
+改版时间:2022.5.10
+
+如果你之前没有重度使用过界面编辑器,可以跳过这篇文档,直接从[界面编辑器使用说明](./1-界面编辑器使用说明.md)开始阅读。
+
+本次界面编辑器改动的主要内容为:
+
+
+
+1. 界面文件的解析能力和兼容性提高
+
+可以解析几乎所有合法的界面Json,不会再出现因为不符合编辑器默认的写法而被覆盖的情况,可以放心大胆的导入手写的界面Json文件使用。
+
+即使界面文件不合法,或者有一些比较罕见但是正确的写法,编辑器也会以控件破损的形式表现,而不是尝试对你的界面文件进行自动修改。
+
+并且界面Json中的继承,变量,属性引用,控件引用等特殊写法在改版后的界面编辑器中都得到了准确的体现。
+
+
+
+
+
+2. 所有继承控件在编辑器内都可以展开显示完整的控件结构
+
+例如下图是编辑器内置的“开关”控件,你现在可以展开这个控件,学习它的构造。
+
+> 如果你对我的世界原版的界面Json不够了解,你暂时不需要使用这个功能。建议按顺序阅读文档进行进一步的学习。
+
+
+
+
+
+3. 移除界面文件和图片的两个资源管理窗口,替换为通用的资源管理器。
+
+资源管理器也较之前的版本有较大优化,详见[新版资源管理器](../15-资源管理/2.5-资源管理器.md)。现在资源管理器的精简模式功能已覆盖旧版的两个资源管理窗口。
+
+- 通过“新建”来新建界面文件
+- 在精简模式的界面标签下查看和打开界面文件
+- 在精简模式的贴图里查看所有的贴图
+
+资源管理器中的界面文件现在支持截图了。
+
+详见[界面编辑器使用说明](./1-界面编辑器使用说明.md#新建界面文件)
+
+
+
+
+
+4. 移除旧版的继承控件功能,修改为“继承原版控件”
+
+旧版的继承控件功能的使用场景广泛,但在每个使用场景下都不是很好用。新增的“继承原版控件”功能聚焦于在当前编辑的界面文件的控件结构中添加继承自原版控件的控件,详见[添加原生控件](./18-添加原生控件.md)。通过这种方式添加的控件也是可以展开的,如下图就是原生的物品容器。
+
+“继承原版控件”仍然包含旧版的继承控件的全部功能,但是我们建议除了“继承原版控件”之外的需求使用下面我们推出的新功能。
+
+
+
+
+
+5. 新增自定义控件功能
+
+如果你希望用继承的方式复用自己的控件,可以使用新的自定义控件的功能。你可以将某个控件(和子控件)添加至控件库。自定义控件库里会显示所有的自定义控件。
+
+你可以通过简单的拖拽从控件库里复用你的自定义控件。自定义控件在控件结构中显示为青色。详见[继承和自定义控件](./13-继承和自定义控件.md)。
+
+
+
+
+
+6. 新增变量和属性引用功能
+
+随着控件层级增加,自定义控件的数量增加,界面会变得越来越复杂,并且自定义控件(继承的控件)在使用时不能修改子控件的属性。
+
+我们经常需要在某个控件中修改其他控件的属性值,我的世界的界面Json里支持的这种写法现在在编辑器中也支持了,即属性引用功能。
+
+例如下面这两个控件其实来源是同一个自定义控件,通过属性引用的方式修改成了不同的样子。
+
+
+
+控件属性面板新增了变量区,里面的所有变量都可以通过界面编辑器添加/管理。如果你的界面Json里包含这样的写法,现在也可以正确的解析到属性面板中了。详见[属性变量引用](./15-变量引用和万用控件.md#属性变量引用)。
+
+旧版的很多编辑器自带的控件的属性实际上都是通过属性引用实现的,现在也统一解析到变量区中,下图是按钮的变量区。
+
+
+
+
+
+7. 新增控件引用
+
+控件引用其实是大家的老朋友,编辑器自带的“滚动列表”控件的滚动内容属性就是控件引用。此外“网格”控件的内容也是控件引用。
+
+现在控件引用会提供一个下拉框,可选择的范围变更为所有的自定义控件(都展示在自定义控件库中),不再是“其他画布下的控件”。
+
+
+
+现在你可以在编辑器中创建自己的万用控件引用来实现类似下图的效果。下图的两个弹窗控件实际上都继承自同一个自定义控件,弹窗的内容以万用控件引用的形式开放为变量,和上面的“滚动内容”属性非常类似,只需要在这个属性里指定不同的自定义控件,弹窗里就可以显示不同的内容,详见[控件引用和万用控件](./15-变量引用和万用控件.md#控件引用和万用控件)。
+
+
+
+
+
+8. 基类画布功能修改
+
+原有的基类画布功能无法正常生效,我们优化了这一功能。现在在创建画布的时候可以直接选择基类画布,详见[异形屏适配和基类画布](./20-界面适配预览和方法.md#异形屏适配和基类画布)。
+
+
diff --git a/mcguide/18-界面与交互/1-界面编辑器使用说明.md b/mcguide/18-界面与交互/1-界面编辑器使用说明.md
new file mode 100644
index 0000000..5dec58c
--- /dev/null
+++ b/mcguide/18-界面与交互/1-界面编辑器使用说明.md
@@ -0,0 +1,122 @@
+---
+front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/ui_image004.29b265a4.png
+hard: 入门
+time: 10分钟
+selection: true
+---
+# 界面编辑器入门
+
+## 基本介绍
+
+界面编辑器用于可视化的编辑《我的世界》游戏内的界面。
+
+进入编辑器后,如果当前显示的不是界面编辑器,那么需要在顶部页签中,点击“界面”进行切换。如下图:
+
+
+
+界面编辑器的界面构成如下:
+
+
+
+
+
+下面简单介绍各个界面的作用:
+
+1. **控件库-原生控件**:将①“控件类型”区域的控件拖拽到③“控件结构”中某个控件,可以为其添加一个子控件。或者直接拖拽到中间的预览窗中,可以直接在屏幕的指定位置创建控件。其中画布比较特殊,画布用于挂载各种非画布控件,不能作为其他控件的子控件。注意,不是所有的控件都可以挂接子控件,自定义控件/继承控件的实例是不能添加子控件的,详见[继承和自定义控件](./13-继承和自定义控件.md)(建议按顺序阅读文档,不需要提前关注)。
+2. **新建变量**:新功能,用于添加变量引用和控件引用,详见后。
+3. **控件结构**:当前选中工程的界面控件树状结构,在这里可以对控件进行选中、隐藏/显示等操作,右键控件,可进行添加子控件、删除、复制等操作。
+4. **快捷选项**:可以在这里调整分辨率,是否显示游戏画面,是否自动设定层级等选项。
+5. **对齐操作**:在界面结构中,按住Ctrl键后多选控件,然后点击对齐按钮,可对齐选中的控件。
+6. **控件库-自定义控件**:①里的控件是《我的世界》基岩版原生的,或者网易提供的,而这里的控件是开发者自定义的,详见[继承和自定义控件](./13-继承和自定义控件.md)。
+7. **资源管理**:展示所有的文件资源。在界面编辑中,我们主要关注界面文件(Json)和贴图,详见[界面资源管理](#界面资源管理)。
+8. **控件属性**:选中控件时,这里会显示该控件可编辑的属性。
+9. **编辑区域**:编辑区域会实时显示界面编辑效果,也可选中、移动、缩放控件。
+
+## 新建界面文件
+
+如果你新建了一个空白作品(地图,附加包均可),或者打开了一个没有界面的作品,你的界面编辑器将与下图类似。
+
+
+
+你有两种方式来新建一个界面文件。
+
+1. 点击控件结构里的新建(只在没有界面文件时可以)
+
+
+
+2. 点击资源管理器的新建,通过新建文件向导创建
+
+在新建文件向导的常用,或者界面页签里选择界面文件,点击下一步
+
+
+
+输入界面文件的文件命名,并点击下一步以完成创建。
+
+
+
+## 界面资源管理
+
+界面编辑器现在使用通用的资源管理器进行文件管理,以精简模式为例,我们在编辑界面时主要关注界面和贴图,界面和贴图在资源管理器左侧的精简模式中点击按钮进行切换。
+
+- 界面
+
+在界面文件夹里可以看到3种文件。
+
+1. 界面配置:即界面文件(Json),双击可以在编辑器中打开这个界面。
+
+
+
+右键界面配置,在弹出的菜单中点击打开文件所在位置,然后可以在windows的文件夹中打开这个json文件。
+
+
+
+
+
+2. 界面模板文件:固定命名为 netease_editor_template_namespace.json,里面保存有一些网易提供的控件模板,无需关心。
+3. 界面定义文件:固定命名为 _ui_defs.json,里面保存这个作品中使用到的界面的文件名称,无需关心。
+
+> 请勿修改或者删除界面模板文件和界面定义文件。
+
+- 贴图
+
+下拉资源管理器左侧的精简模式的滚动条,或者在这里滚动滚轮,点击贴图,可以将目录切换到贴图目录,这里会显示有所有的贴图。
+
+> 这里所有的贴图都是可以直接使用的,并非只有“界面贴图”可以用于界面。
+
+
+
+## 组装控件
+
+《我的世界》的界面和大部分其他游戏的一样,都可以简单的理解为控件的组合。
+
+下图的这些就是界面编辑器中可以直接添加的控件,关于这些控件的介绍,请参考[控件和控件属性](./10-控件和控件属性.md#控件简介)。
+
+《我的世界》中还有大量可以直接继承的控件,我们将在后续逐步添加。
+
+
+
+有两种方式在界面中添加控件:
+
+- 拖拽控件库中的控件到控件结构,或者拖拽到预览窗;
+- 在控件结构中的控件上右键,依次选择添加对象->控件。添加控件后,编辑区域会实时显示添加的控件。
+
+
+
+除了编辑器提供的控件之外,你现在还可以在控件结构中添加自定义的控件。详见[自定义控件](./13-继承和自定义控件.md)。
+
+## 编辑控件属性
+
+在控件列表或者编辑区域中选择控件后,被选中的控件会显示一个红框,其父控件会显示一个蓝框。
+
+
+
+在右侧属性面板中会显示被选中控件的属性,不同的控件有不同的属性,你可以通过修改属性来调整控件的显示效果,详见[控件和控件属性](./10-控件和控件属性.md#控件简介)。
+
+> 如果控件是自定义控件的实例,将显示青色的框,详见[继承和自定义控件](./13-继承和自定义控件.md)。
+>
+> 
+
+下图是文本控件的属性,可以看到我们提供了诸多属性供你修改。
+
+
+
diff --git a/mcguide/18-界面与交互/10-控件和控件属性.md b/mcguide/18-界面与交互/10-控件和控件属性.md
new file mode 100644
index 0000000..2480801
--- /dev/null
+++ b/mcguide/18-界面与交互/10-控件和控件属性.md
@@ -0,0 +1,157 @@
+
+
+# 控件和控件属性
+
+## 控件简介
+
+- **画布**:画布是一个完整的界面,画布下可以挂除了画布以外的子控件。一个界面工程文件中可以有多个画布。新建的界面工程文件会自带一个名字为main的画布。例如下图,这些都是画布。
+
+
+
+- **面板**:面板本身并没有可视元素,把归属一个模块的控件挂在一个面板下,能够让界面结构更加清晰,调整起来也更加方便。
+
+- **图片**:图片控件用于显示图片。图片会在不变形的情况下尽量撑满控件的尺寸。
+
+- **按钮**:按钮是重要的交互控件。可设置按钮上的文本、文本颜色、文本字号、文本偏移。按钮的贴图分为普通、按下、悬浮三种情况。“普通”即为正常状态下的贴图,“按下”为按钮被按下时的贴图,“悬浮”为在PC中,鼠标移动到按钮上时的按钮贴图。设置贴图的方式:在资源管理窗口中,左键按住贴图拖动到贴图框中,待鼠标变为带“+”号的样式时,松开鼠标,即可完成贴图设置。
+
+ 
+
+- **文本**:文本控件用于显示文本,可设置字号和颜色。
+
+- **滚动列表**:滚动的内容可在属性面板的变量区的“滚动内容”配置项中选择。“滚动内容”的下拉列表中,会出现你的自定义控件可供选择。下图中,mailUI是界面文件名称,buttonMail、panelMailBody、gridMailList等是自定义控件名称。如果你想了解更多,可以查看[自定义控件](./13-继承和自定义控件.md)。如果你想深入了解“滚动内容”的原理,可以查看[万用控件](./15-变量引用和万用控件.md),当然我们建议您按顺序查看文档。
+
+ 
+
+ 并不是所有控件都能够作为滚动列表的内容,目前仅限于面板、按钮、网格三种类型可作为滚动列表的内容。如果想在滚动面板里显示文本控件,可将文本控件放在面板下,然后将面板作为滚动列表内容。不过并不支持将滚动列表挂在面板下,再将面板作为另外一个滚动列表的内容。
+
+- **网格**:网格用于需要规律排布的界面,如背包界面。其中内容的配置方式类似滚动列表中的内容。网格规模用于配置网格的行列数。网格会自动将内容均匀的显示在各个格子内。
+
+ 
+
+ 需要注意的是,我的世界游戏引擎中,对网格的尺寸和内容的尺寸有一定要求,否则显示会不符合预期。具体的要求为:
+
+ - 内容的尺寸为固定像素时:
+ - 网格的宽度应大于等于内容的宽度乘以列数,小于内容的宽度乘以(列数+1);
+ - 网格的高度应大于等于内容的高度乘以行数;
+ - 内容的尺寸为百分比时:
+ - 内容的宽度乘以列数需小于等于100%,内容的宽度乘以(列数+1)需大于100%;
+ - 内容的高度乘以行数需大于等于100%。
+
+ 集合名在代码中绑定UI控件时会用到,具体可参考[UI说明文档](./30-UI说明文档.md)。
+
+
+- **轮盘**:轮盘主要用于内容列表中进行选择的场景,比如选择某个表情展示或者抽奖等。在编辑器中创建轮盘控件后,需要填好想设定的切片数量、内直径、外直径系数,然后通过生成模板按钮,生成出对应预览的模板控件样式。 轮盘的本质是引用自定义控件,其中的内容配置主要通过选择各索引对应的控件,这里选择的控件其实就是引用的自定义控件的各个子控件(生成了模板后,开发者可以自行在对应引用的自定义控件中修改样式和属性等)。另外,轮盘也可以通过content变量来切换引用的自定义控件。更多内容可参考[UI说明文档](./30-UI说明文档.md)。
+
+ 
+
+ 
+
+
+
+## 控件属性的结构/分组
+
+这里主要介绍控件的属性在编辑器里的分组。
+
+由于控件的属性较多,并且可以自己增加减少,我们将控件的属性进行了默认分组。
+
+以文本(Label)为例:
+
+
+
+可以看到总共有4个分组,分别为
+
+- 通用:所有控件都有的属性
+- 文本:文本控件特有的属性,如果是其他控件,可能也会有自己特有的属性。
+- 变量区:作为变量使用的属性,详见[变量引用和万用控件](./15-变量引用和万用控件.md)。
+- 变量默认值:指已为某个属性分配了变量名,但是该属性/变量没有被引用,详见[变量引用和万用控件](./15-变量引用和万用控件.md)。
+
+我们以另一个控件滚动列表(Scroll View)为例:
+
+
+
+可以看到还有一个不常用变量区,这个分组与变量区的含义是一样的,区别在于这个分组里的属性很少被用到,所以我们将其划分到这个分组中。
+
+## 通用控件属性
+
+下面这些是每种控件都有的属性。
+
+- **锚点**:每个控件有9个定位点,包括四个角、四边的中点、中心点,锚点可以设定子控件的哪个定位点和父控件的哪个定位点重合,下图中左侧对应父控件、右侧对应子控件。
+
+ 
+
+ 下图为子控件中心和父控件上边中点重合的情况。
+
+
+
+ 下图为子控件右下角和父控件左上角重合的情况。
+
+
+
+- **名称**:控件的名字,只能是字母和数字的组合。
+
+- **隐藏控件**:勾选后会隐藏控件。在控件列表中,点击控件右侧的眼睛也能够实现类似效果。
+
+ 
+
+- **层级**:层级用于控制控件的上下关系。层级高的显示在上面。
+
+- **位移XY**:控制控件相对于锚点位置的偏移,在下面的红框中,可以直接填写数值,单位是像素。除了直接填像素外,还有更高级的用法,详见[位移尺寸高级用法](#位移尺寸属性的高级用法)。
+
+
+
+- **尺寸XY**:尺寸XY,最大尺寸XY,最小尺寸XY,3组数据的含义类似,都是对控件尺寸(宽高)的描述。与位移XY相似,也支持直接填写像素和[更高级的用法](#位移尺寸属性的高级用法)。如果最大尺寸XY,最小尺寸XY,填写0,那么默认不启用这几个属性。如果勾选了适应,比如尺寸X,那么尺寸X的实际数值会保持为父控件的尺寸X的100%。
+
+
+
+> 界面编辑器提供了众多属性,学习这些属性的最好方式就是调整他,并观察效果。
+
+## 位移尺寸属性的高级用法
+
+以位移X为例。
+
+位移用于控制该控件相对于锚点位置的偏移。形式为Px+%。Px表示像素,%表示跟随某个尺寸的百分比。
+
+如位移X配置(如下图)为:跟随父控件尺寸X的10Px+10%,如果父控件的宽度(尺寸X)为100像素,那么子控件的偏移X就为10Px + 10% * 100Px = 20Px。
+
+
+
+除了跟随父控件尺寸X之外,我们还提供了其他的跟随方式。如果想知道其他跟随项的效果,除了通过字面含义理解之外,我们非常建议你实地尝试一下这些跟随项的用法,这会大幅加深你对这个选项的用法。
+
+
+
+如果你直接在vscode等文本编辑器中打开这个界面文件时,可以发现,offset字段的第一个值就与编辑器中的配置非常类似。
+
+
+
+%和Px是按钮,可点击,点击后会按照目前的设置,将位移X的设置由Px+%的形式转为Px,或者%形式。
+
+
+
+- 点击Px,如下图所示,转为20Px
+
+
+
+- 点击%,如下图所示,转为20%,因为父控件的尺寸X是100Px,20% × 100Px = 20Px
+
+
+
+## 位移尺寸高级用法的实际应用
+
+下图是一个弹窗,有一个content用作万用控件(如果你感兴趣,可以参考[万用控件](./15-变量引用和万用控件.md),但是我们建议你按顺序阅读文档)。
+
+
+
+messageBoxPanel是一个panel,然后下面挂接了一个background图片,图片的尺寸XY均勾选了适应,这样可以保证图片始终填满父控件panel。
+
+
+
+我们希望实现的效果是,无论外层控件(messageBoxPanel)怎么放大缩小,content都能占满红框内的区域。
+
+按照下图调整content的位移和尺寸即可:
+
+- 位移X,因为content始终是在X方向(水平方向)的中心,所以填0即可
+- 位移Y,因为content会偏下一点(标题栏有一定的高度),所以我们在这里填7
+- 尺寸X,因为content的宽度是跟随父控件的宽度发生变化的,父控件宽,他也宽,所以这里我们选择跟随100%的父控件尺寸X。又因为这个弹窗左右边框也有宽度,所以我们需要减去这个宽度(-10)
+- 尺寸Y,因为content的高度是跟随父控件的高度发生变化的,父控件高,他也高,所以这里我们选择跟随100%的父控件尺寸Y。又因为这个弹窗的底部边框和标题栏也有高度,所以我们需要减去这个高度(-25)
+
+
diff --git a/mcguide/18-界面与交互/11-图片缩放适配与九宫切图.md b/mcguide/18-界面与交互/11-图片缩放适配与九宫切图.md
new file mode 100644
index 0000000..8205701
--- /dev/null
+++ b/mcguide/18-界面与交互/11-图片缩放适配与九宫切图.md
@@ -0,0 +1,89 @@
+
+
+# 图片缩放适配与九宫切图
+
+## 图片缩放和宽高比
+
+下图是我们需要的示例图片,你可以在浏览器中下载,或者点击这个[地址](https://g79.gdl.netease.com/goods_print02.png)下载,并导入编辑器中备用。
+
+这是一张很小的图片,我的世界中使用的图片通常来说也比较小。
+
+
+
+这张图片的尺寸为16*16,将鼠标悬停在资源管理器的图片文件上,你可以在弹出的悬浮提示中看到这一数据。
+
+
+
+我们放大这张图片,可以看到这张图片具体每个色块的像素信息,这张图片被分成3个部分,外环的直径为4个像素,中环的直径为2个像素,内部正方形的边长为4。
+
+
+
+我们在编辑器中放置一张图片,并将其使用贴图指定为这张图片,然后在预览窗中对这张图片进行拉伸,可以看到,默认状态下,这张图片只是有一个方向(水平或竖直)抵住了红色外框,显示的图片并没有变形。
+
+
+
+在图片适配中关闭“保持宽高比”后,这张图片就可以填满整个红色外框了。
+
+
+
+如果我们希望这张图片尽可能的放大,不惜裁剪掉一部分,可以选择填充,填充的示例效果如下,可以看到,图片的在水平方向填满了红框,竖直方向则被红框裁剪了。
+
+> “填充”的优先级高于“保持宽高比”,一旦勾选填充之后,就不会再保持宽高比。
+
+
+
+## 九宫切图
+
+可以看到,在不确定图片的长宽比的情况下,无论上面的哪一种适配方法,都不够美观。能不能有一种适配方法实现下面这种既填满红框,又能在视觉上保持宽高比的效果呢?这就需要用到九宫切图了。
+
+
+
+### 原理
+
+游戏制作中经常会有上述这样的需求,我们拿到下面这张图片时,会发现我们可以将下面这张图按照下图青色线的方法切成9份(即九宫切图),其中
+
+- 1是不可以进行缩放的,会导致长宽比发生变化
+- 2可以进行任意的水平缩放
+- 3可以进行任意的竖直缩放
+- 4可以进行任意的缩放(反正是纯色了,怎么缩放都可以)
+
+九宫切图后
+
+- 如果我们想要水平拉伸这张图片,那么1,3两种图块是不会动的,只有2,4会水平拉伸
+- 如果我们想要竖直拉伸这张图片,那么1,2两种图块是不会动的,只有3,4会竖直拉伸
+
+
+
+九宫切图的数据就是这4条青色的线与图片4边的距离,可以看到
+
+- 左侧竖直的青色线距离左边的距离为7
+- 右侧竖直的青色线距离右边的距离为7
+- 上方竖直的青色线距离上边的距离为7
+- 下方竖直的青色线距离下边的距离为7
+
+
+
+### 原版九宫
+
+我们调整“原版九宫”的数值,即可在这个图片控件上完成九宫适配。
+
+
+
+### 新版九宫
+
+除了原版九宫外,还有另外一种九宫规则(新版九宫)。
+
+我们按照下图的方式,开启旧版九宫,并同样按照四边都是7的方式进行九宫切割,可以看到不同的结果。
+
+
+
+这是因为两种九宫对屏幕分辨率的适配方法不同。
+
+- 原版九宫适配的是缩放后的实际游戏分辨率,参考[界面适配预览和方法](./20-界面适配预览和方法.md)。
+- 新版九宫适配的是屏幕中的游戏分辨率
+
+你可以根据自己的使用场景使用不同的九宫方法。
+
+
+
+更多信息可以参考[MC九宫格使用与贴图规范](../16-美术/50-贴图规范及九宫格使用.md)。
diff --git a/mcguide/18-界面与交互/13-继承和自定义控件.md b/mcguide/18-界面与交互/13-继承和自定义控件.md
new file mode 100644
index 0000000..fa9283b
--- /dev/null
+++ b/mcguide/18-界面与交互/13-继承和自定义控件.md
@@ -0,0 +1,118 @@
+
+
+# 继承和自定义控件
+
+## 创建自定义控件
+
+例如我们想实现如下这样的玩家属性界面。
+
+可以看到,这个界面中包含4个属性,每个属性长的都很类似。
+
+
+
+都是由一个图片,一个物品渲染,和一个文本组成的
+
+- 图片:作为背景
+- 物品渲染:作为图标使用(我们这里只是借用我的世界原版的一些素材,更好的做法当然是使用自己绘制的图片)
+- 文本:用于属性的说明和数值
+
+
+
+他的控件结构如下。这里我们使用了一个面板(panel)来组织这些控件。
+
+
+
+那么有没有复用的方法呢?
+
+有,我们提供了一种方法,可以让你将这个结构作为一个自定义的控件保存起来。
+
+右键这个面板(panel),在菜单里选择添加至控件库。
+
+
+
+在弹出的窗口中,输入名称,然后点击确定,即可在自定义控件库中添加这个控件。
+
+> 注意不要填写与选择的节点相同的名称。以上图的情况为例,请不要使用“panel”作为控件名称。
+
+
+
+可以看到,在控件库中多了一个你自己的自定义控件。
+
+右键这个自定义控件,选择编辑控件本体,可以在控件结构中打开这个自定义控件进行编辑。你也可以简单的通过在自定义控件库中双击一个控件来编辑它。
+
+
+
+界面编辑器中使用青色表示自定义控件。
+
+
+
+## 使用自定义控件
+
+创建了自定义控件后,接下来是如何使用自定义控件。
+
+1. 在控件结构面板,选中希望挂接自定义控件的节点
+2. 在自定义控件库中,右键想要挂接的自定义控件
+3. 在菜单中选择创建实例
+
+
+
+可以看到,我们成功的在PlayerAttrContent下添加了一个PlayerAttr控件。
+
+
+
+还有一种更为简单直接的方式可以添加自定义控件,你可以像下图这样,直接将自定义控件拖拽至想要挂接的节点。
+
+
+
+简单调整一下位置,我们将得到如下的效果。
+
+
+
+## 继承(自定义控件的原理)
+
+### 本体和实例
+
+自定义控件实际上就是《我的世界》基岩版的UI继承。
+
+我们在这里不关注Json层面的继承写法,只关注继承本身的特性。
+
+编辑器中
+
+- 我们将自定义控件库中的控件称为“**本体**”,即下图的①
+- 我们将自定义控件在控件结构中的实际使用称为“**实例**”,即下图中的②
+
+
+
+注意,在没有使用变量引用时,实例控件的子控件是无法修改的。
+
+因此,如果我们尝试展开一个自定义控件的实例时,我们会提醒你。
+
+
+
+当你展开自定义控件的实例后,你会发现,除了自定义控件的根节点之外,其他节点(子节点)是灰色的,他们的属性的修改也都被禁用了。
+
+
+
+即,**对于自定义控件的实例来说,你能修改的只有这个控件的根节点的属性**。
+
+### 修改本体
+
+如果你修改了本体,比如下图中,我们将item_renderer的道具材质修改为绿宝石块。
+
+
+
+
+
+你会发现,所有他的实例都“**继承**”了这一改变。
+
+这是一个非常好用的特性,能够帮助你快速修改大量的界面。所以如果你的界面中有复用的话,我们强烈建议你使用自定义控件库(即继承)的方式来组装界面。
+
+
+
+到这里,你可能有疑惑,如果不能修改子控件的属性的话,那我如何实现最开始这种效果,因为文本是Lable子控件的属性。
+
+这就需要用到变量了,变量和自定义控件组合使用将发挥**继承**真正的实力,详见[变量引用和万用控件](./15-变量引用和万用控件.md)。
+
+
+
+关于继承的更多底层知识,请参阅[继承控件](./30-UI说明文档.md#继承控件)。
diff --git a/mcguide/18-界面与交互/15-变量引用和万用控件.md b/mcguide/18-界面与交互/15-变量引用和万用控件.md
new file mode 100644
index 0000000..fefe92b
--- /dev/null
+++ b/mcguide/18-界面与交互/15-变量引用和万用控件.md
@@ -0,0 +1,201 @@
+---
+front:
+hard: 入门
+time: 10分钟
+---
+
+# 变量引用和万用控件
+
+## 属性变量引用
+
+下图的4个控件是同一个自定义控件的实例。如果要实现类似下面这种各不相同的效果,需要用到属性引用功能。
+
+
+
+自定义控件的实例,只能修改根节点的属性。所以我们要想办法,在PlayerAttr这个节点直接控制Label节点的内容属性。
+
+即,在PlayerAttr节点增加一个变量,绑定Label节点的内容。
+
+
+
+需要执行如下的操作:
+
+1. 选中自定义控件的根节点(如图,这里是PlayerAttr)
+2. 点击功能区的新建变量
+3. 在菜单中选择:新增属性变量
+
+
+
+这将打开一个新的面板——新建属性变量面板。
+
+我们是选中PlayerAttr节点打开的
+
+- 你在这个面板中可以选择**PlayerAttr**节点和**其子控件**的所有属性
+- 并将这些属性作为**变量**开放到**PlayerAttr**的变量区
+
+
+
+我们选择**label**,并选中**内容**属性。
+
+可以看到,当你选中内容时,变量类型也自动选择了文本内容。
+
+这是因为你可以一次性绑定多个类型相同的属性,我们在这里自动帮你做了筛选。
+
+填写好变量命名后(比如AttrText),点击确定。
+
+
+
+现在,我们就在PlayerAttr的变量区成功创建了AttrText属性,并且这个属性绑定的label控件的内容属性。
+
+我们在这里把值修改为200,可以看到,预览窗里显示的值也变成了200。
+
+
+
+### 属性引用示例
+
+现在让我们使用这一自定义控件快速实现一个货币展示HUD。
+
+由于物品渲染的属性暂时不支持属性变量引用,我们使用一个图片控件来代替,并将这个图片控件命名为icon。
+
+
+
+接下来为PlayerAttr添加一个新的变量(icon_texture),并绑定icon控件的贴图属性。
+
+
+
+可以看到这个图片“消失”了。
+
+
+
+这是因为在PlayerAttr的变量区中,这个新创建的变量(icon_texture)还没有赋值。
+
+
+
+接下来,我们通过windows的文件夹在工作台的下载路径中,找到编辑器的下载路径,在这里可以找到物品的贴图文件夹。
+
+然后找到绿宝石和钻石,两张贴图,并将其导入编辑器的贴图中。
+
+
+
+准备工作到此为止,接下来我们创建一个新的界面文件。并在main画布下创建2个PlayerAttr的实例。
+
+然后分别设置两个实例的变量区的icon_texture变量为钻石贴图和绿宝石贴图。
+
+
+
+效果如下。
+
+
+
+感觉icon有点小。我们打开这个自定义控件,调整一下icon控件的尺寸,然后返回界面文件,可以看到这两个自定义控件实例的样式都被正常修改了。
+
+
+
+## 控件引用和万用控件
+
+### 简介
+
+下图是两个弹窗,他们的外框非常相似,但是内容不同。
+
+
+
+事实上他们使用的是同一个外框,你可以使用控件引用来实现这样的效果。
+
+
+
+### 制作内容物
+
+我们先制作两个内容物。
+
+- 内容1
+
+综合[界面编辑器入门](./1-界面编辑器使用说明.md),[控件和控件属性](10-控件和控件属性.md)两篇文档,我们可以很轻松的实现这个控件。制作完毕之后,我们需要将其添加到控件库,详见[继承和自定义控件](13-继承和自定义控件.md),这里我们命名为QuestionContent。
+
+
+
+- 内容2
+
+内容2是一个滚动列表,想要实现上述形式的滚动列表,我们需要先创建一个文本控件,并将其添加到控件库,比如命名为myLbl。
+
+
+
+然后,我们创建一个滚动列表,在属性“滚动内容”里选择刚才的自定义控件myLbl。并取消勾选下面的“显示背景”。然后,将这个滚动列表添加到控件库,这里我们将其命名为MessageScrollView。
+
+> 其实“滚动内容”就是一个万用控件变量。
+
+
+
+### 制作外框
+
+接下来我们实现一个外框。
+
+外框非常简单,由下面3个控件组成
+
+- 一个图片作为背景图(background节点)
+- 一个文本作为标题(title节点)
+- 一个按钮作为关闭按钮(closeBtn节点)
+
+
+
+值得一提的是,background图片控件的贴图使用的是原生贴图。
+
+
+
+贴图的路径如下,这张贴图在我的世界中自动支持九宫,无需在界面编辑器的属性中填写,是制作弹窗类控件的好资源。
+
+
+
+### 添加万用控件变量
+
+接下来,我们要在background节点下添加一个万用控件,并将其作为变量开放到messageBoxPanel节点。这个功能很难理解,我们推荐你跟着做完,然后我们再做解释。
+
+与属性变量的操作步骤类似:
+
+1. 选中messageBoxPanel节点
+2. 点击新增万用控件变量
+
+
+
+在弹出的菜单中
+
+1. 选中background节点,我们要把万用控件挂接为这个节点的子节点
+2. 填写万用控件命名
+3. 填写变量命名
+4. 可以看到按照上述填写信息之后,编辑器将帮我们实现的操作,点击确定
+
+
+
+观察一下结果,可以发现
+
+1. 在messageBoxPanel节点增加了一个v_content变量
+2. 在background节点下增加了一个content控件
+
+
+
+3. 你可以在v_content中选择一个自定义控件库里的控件
+
+
+
+在修改v_content的属性值之前,我们先调整一下content控件的尺寸,使其可以始终填满外框视觉上的内容部分,具体方法请参考[控件和控件属性](./10-控件和控件属性.md#位移尺寸高级用法的实际应用)。
+
+我们在之前已经做好了两个内容物控件,QuestionContent 和 MessageScrollView。
+
+这里我们选择QuestionContent ,可以看到,我们的万用控件看起来和QuestionContent完全相同。
+
+
+
+### 控件引用总结
+
+即,控件引用变量和万用控件可以实现的效果就是:**可以在属性面板中通过修改变量的值,将子控件的万用控件转变为某个自定义控件**。
+
+理解了这些之后,我们再看一下滚动列表这个控件。
+
+
+
+我们在编辑器中强行把他展开,你会发现,滚动列表就是使用了一个万用控件(scrolling_content)。
+
+
+
+并且这个万用控件的值被开放到了根节点(scroll_view)的属性面板的变量区的“滚动内容”属性。使你可以直接在最外层(scroll_view)修改滚动列表的内容物控件。
+
+
diff --git a/mcguide/18-界面与交互/16-示例:开关与标签切换.md b/mcguide/18-界面与交互/16-示例:开关与标签切换.md
new file mode 100644
index 0000000..c8ddcc0
--- /dev/null
+++ b/mcguide/18-界面与交互/16-示例:开关与标签切换.md
@@ -0,0 +1,198 @@
+---
+front:
+hard: 入门
+time: 10分钟
+---
+
+# 示例:开关与标签切换
+
+## 开关
+
+这个是编辑器里内置的开关(继承自我的世界原版的开关),开关可以理解为包含两种状态的按钮,每次点击会在两种状态中切换。
+
+
+
+开关可以定义的主要就是这6种状态的贴图:
+
+- 对应开关开启的状态:选中锁定贴图,悬浮贴图,按下悬浮贴图
+- 对应开关关闭的状态(开关默认是关闭的):普通贴图(即默认的样子),按下贴图,未选中锁定贴图
+
+锁定就是开关不可用的状态,无法点击。
+
+
+
+## 复杂的开关效果
+
+下图也是一种开关的开启/关闭状态,常用于制作页签。两种状态除了贴图不一样之外,还有文字的区别。
+
+这就导致我们需要对编辑器自带的开关做一些改动,以适应我们的需求。
+
+
+
+上图的UI只用到了下面这两张图片,图一为按钮本体图片,图二为按钮右侧的尖角图片。
+
+
+
+
+
+## 复杂开关的制作步骤
+
+### 控件结构
+
+首先,我们创建一个界面文件,然后创建下图的控件结构。其中,main - panel(0)下的两个panel(面板)分别是
+
+- panel:对应右侧上方的选中(checked)状态的开关,下面的两张贴图分别对应按钮底板和尖角
+- panel(0):对应右侧下方的未选中(unchecked)状态的开关
+
+
+
+### 贴图设置
+
+上述两个panel(面板)控件的底板图片的图片均使用下图。
+
+
+
+两个控件的颜色看起来有些许差别,是因为我们在panel下的底板图片里调整了颜色属性。属性值见下图。
+
+这个颜色是对原有图片颜色的叠加,能实现的效果受图片原有的色彩影响很大,原有图片的色彩越浅,效果越明显。
+
+
+
+适配设置见下图,这里我们使用旧版九宫,可以实现较为精细的效果。
+
+关于九宫的更多用法参考[图片缩放适配与九宫切图](./11-图片缩放适配与九宫切图.md)。
+
+
+
+尖角图片的设置较为简单,不再赘述。
+
+### 尺寸设置
+
+尖角图片的锚点和尺寸XY的数据如下。
+
+
+
+按钮底板的锚点和尺寸XY的数据如下图。
+
+
+
+这样设置可以保证当父节点的尺寸在一定范围内变化时,控件的视觉效果始终保持一个底板+一个尖角的形状,且相对位置不发生太多变化。
+
+
+
+### 开放属性引用并删除变量
+
+我们对panel新增两个属性引用变量,关于属性引用请参考[属性变量引用](./15-变量引用和万用控件.md#属性变量引用):
+
+- 开放panel的尺寸属性到panel,命名为my_toggle_size
+- 开放label的内容属性到panel,命名为my_toggle_text
+
+
+
+找到panel的尺寸XY,可以看到这个属性现在处于不可编辑的状态,你只能通过编辑my_toggle_size的值来影响这个值。
+
+在尺寸X的右侧有一个引用按钮,将鼠标放在上面会显示悬浮提示,内容为这个引用这个属性的变量。
+
+
+
+我们在变量区里找到my_toggle_size,然后通过“···”按钮,点击删除,将这个变量删除。
+
+
+
+我们会发现这个变量被删除了,但是在变量默认值的分组中可以找到这个变量(这里我们填写一个80,50的默认值)。
+
+这是因为panel的尺寸仍然绑定了my_toggle_size变量,只是这个变量没有被正式启用。
+
+
+
+接下来我们删除变量区的my_toggle_text变量,可以发现label控件的变量默认值分组内同样出现了my_toggle_text属性(这里我们填写“当前选中”作为默认值)。
+
+
+
+接下来我们对panel(0)如法炮制,请务必保证这里开放的2个属性引用的变量名称和之前的一样,必须还是my_toggle_size和my_toggle_text。
+
+
+
+### 添加到控件库
+
+我们将panel和panel(0)都添加到控件库,并分别命名为:
+
+- panel:MyToggleChecked
+- panel(0):MyToggleUnchecked
+
+
+
+记得双击打开这两个自定义控件,将这两个控件的根节点的位移XY归零。
+
+完事就绪,我们可以在控件窗口中删除panel和panel(0)了。
+
+### 在开关中应用自定义控件
+
+在控件窗口里新建一个开关。
+
+
+
+如果我们在控件窗口里强行展开开关,可以看到开关就是由8个万用控件组成的,在开关的不同状态,显示不同的控件。
+
+
+
+这里我们不关注变量区,而是打开“不常用变量区”,在这里可以看到大量的控件引用,关于控件引用详情可以参考[这里](./15-变量引用和万用控件.md#控件引用和万用控件)。
+
+我们不制作太精细的效果,暂时将其分为两组:
+
+- 所有的选中……属性:使用MyToggleChecked控件
+- 所有的未选中……属性:使用MyToggleUnchecked控件
+
+
+
+即当开关开启(选中)时,我们的开关将显示MyToggleChecked的样子。
+
+当开关关闭(未选中)时,我们的开关将显示MyToggleUnchecked的样子。
+
+### 在开关中引用自定义控件的属性
+
+我们在“[开放属性引用并删除变量](#开放属性引用并删除变量)”这一步中曾经创建过my_toggle_size和my_toggle_text两个属性,我们将在开关中使用。
+
+我们选择switch_toggle变量区的“+”,选择添加已设变量。
+
+这里可以看到熟悉的my_toggle_size和my_toggle_text两个变量,把他们都添加一下。
+
+
+
+效果如下图,可以看到在开关的变量区增加了这两个变量,并且他们可以控制开关下面所有的万用控件的同名属性。属性引用就是以变量名作为匹配的,即:
+
+- switch_toggle的my_toggle_size变量,控制所有红框的子节点的my_toggle_size属性(面板的尺寸属性)
+- switch_toggle的my_toggle_text变量,控制所有黄框的子节点的my_toggle_text属性(文本的内容属性)
+
+
+
+可以在这里调整数值查看效果。
+
+
+
+如果你想直接在预览窗中通过拖拽switch_toggle的红色外框调整各万用控件的尺寸,你可以勾上my_toggle_size的两个“适应”属性。
+
+
+
+## 测试复杂开关
+
+使用资源管理器的“新建”创建一个界面预设,参考下图。
+
+
+
+在新建文件向导的第二页,我们无需修改,直接点击创建即可。
+
+
+
+编辑器会自动打开我们刚创建好的界面预设,并跳转到预设编辑器,选中界面预设。
+我们在界面预设的属性面板中,勾选预加载,并且保证绑定的界面画布为刚才包含switch_togggle的画布。
+
+
+
+然后点击编辑器右上角的运行按钮,选择当前最新的稳定版开发包,等待开发包打开。
+
+然后按下F11切换为模拟触屏模式,就可以点击这个开关进行切换了。
+
+
+
+以上是一个简单的自定义开关的例子,更复杂使用这种开关来实现一套页签切换的例子可以参考[UI数据绑定](./70-UI数据绑定.md)。
diff --git a/mcguide/18-界面与交互/18-添加原生控件.md b/mcguide/18-界面与交互/18-添加原生控件.md
new file mode 100644
index 0000000..d019ded
--- /dev/null
+++ b/mcguide/18-界面与交互/18-添加原生控件.md
@@ -0,0 +1,46 @@
+
+
+# 添加原生控件
+
+《我的世界》中大量使用了继承控件,我们找到工作台的下载路径,并找到资源包里面的ui目录,里面可以看到我的世界原生的大量的界面文件。
+
+我们最熟悉的按钮其实就是ui_common.json中定义的一个自定义控件。
+
+
+
+我们打开ui_common,映入眼帘的即是button——我的世界中使用的按钮。
+
+这里我们主要关注两个信息:
+
+- ui_common.json的namespace(命名空间):common
+- 按钮控件的名称:button
+
+接下来会用到。
+
+
+
+那么,如何在你的界面中直接使用原生的控件呢?
+
+1. 我们先创建一个界面文件,并在main画布下挂接一个面板(panel)
+2. 选中面板,点击功能区的“添加原生控件”按钮
+
+
+
+3. 在弹出的弹窗里按照下图填写。(命名空间填写json文件里的common,控件名称填写json文件里的button)
+
+
+
+4. 点击确定,这样你就在你的界面中添加了一个原生的button
+
+
+
+当然,原生的按钮显得不那么好用,我们还是推荐你使用编辑器提供的按钮。
+
+我们尝试下另一个常用的控件:container_item,这个就是广泛用在各种原生界面中的物品容器。
+
+我们在编辑器中尝试对其进行展开,可以看到这个控件的内部结构。
+
+善用添加原生控件可以帮助你快速搭建与原生界面类似的界面,以及学习原生界面的写法。
+
+
+
diff --git a/mcguide/18-界面与交互/19-控件属性动画.md b/mcguide/18-界面与交互/19-控件属性动画.md
new file mode 100644
index 0000000..256ad7d
--- /dev/null
+++ b/mcguide/18-界面与交互/19-控件属性动画.md
@@ -0,0 +1,563 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# 控件属性动画
+
+MC为部分UI控件属性提供了一套属性动画逻辑,活用他们,可以让你的界面更加精美绚丽。
+
+一言以蔽之,界面属性动画,就是使界面的某一控件的某个属性值跟随时间发生变化,并以此产生动画效果,例如下图中的效果就是一个uv属性的动画。
+
+
+
+以下所有属性动画的示例均可参考 UIDemoModUI 动画演示,demo的下载位置见[这里](../20-玩法开发/13-模组SDK编程/60-Demo示例.md)。
+
+另外,这里还会介绍如何通过接口去控制你的动画。
+
+## Demo介绍
+
+将上述的 UIDemoModUI 导入Studio,并使用编辑器打开。
+
+> 默认会使用旧版编辑器打开,第一打开时需要点击升级按钮。旧版编辑器不包含属性动画相关功能。
+
+双击打开UIAnimationScreen界面文件。
+
+本质上来说,属性动画与自定义控件非常类似,由于属性动画主要用于某一具体的控件的动画,没有单独展示的意义,目前并不会出现在自定义控件库中。
+
+### 支持的属性动画类型
+
+并非所有的控件属性都支持动画,当前支持的属性有:
+
+- 位移和尺寸
+- 透明度
+- 裁剪
+- 颜色
+- 序列帧
+- UV动画
+
+同一个控件,可以有多个属性同时设置属性动画,所有的属性动画都会在界面创建后自动播放。
+
+可以看到当前支持的所有属性都存在于图片控件中,我们接下来的所有示例都会以图片为准。
+
+### 创建属性动画
+
+新建一个界面文件,并创建一个面板和一个图片,如下图。
+
+
+
+选中需要添加动画的控件,这里是image,然后在功能区点击“添加动画”按钮。
+
+
+
+弹出一个添加动画的弹窗,如下图。
+
+- 复用动画:在这里可以选择自定义控件库里的动画,也可以留空,表示创建一个新动画。
+- 首段动画名称:创建的动画在自定义控件库里的名称。
+- 属性动画的属性类型选框
+
+> 如果复用动画,那么首段动画名称将不可修改,显示的就是复用的动画的名称。
+> 首段动画名称可以留空,表示动画不加入自定义控件库。需要注意的是,如果留空,首段动画就不能被其他属性动画复用,也不能循环播放。
+
+
+
+填写好必要信息后,点击确定即可,这里我们选择透明度。
+
+### 编辑属性动画
+
+如下图,可以发现image控件的属性面板中,透明度属性从一个数值变为了一个列表。
+
+这个列表展示的就是透明度属性动画的细节信息。
+属性动画在编辑器中的形式是列表,列表的每一个元素表示一个动画片段,当动画播放时,会从列表的第一个元素顺次播放到最后一个元素。
+
+
+
+
+
+上图黄框内的6个按钮,其作用分别为:
+
+- 添加元素:为动画添加一个新的动画片段
+- 取消动画:取消这个属性的动画,并将其恢复为固定值的形式
+- 删除元素:删除一个动画片段
+- 向上移动:与上方的动画片段调换位置
+- 向下移动:与下方的动画片段调换位置
+- 上方新建元素:在上方插入一个动画片段
+
+> 对于取消动画/删除动画,如果你的动画保存在自定义控件库中,那么这并不会导致动画片段的信息丢失,你仍然可以从自定义控件库中复用。
+
+除了增删动画片段之外,修改属性是最常见的编辑属性动画的方法,每个动画片段的属性基本相同,他们的含义分别为:
+
+- 命名空间:该动画所在的界面文件的命名空间,你可以在下拉框中选择其他的界面文件以切换动画信息保存的文件,一般情况下无需在意这个属性
+- 动画名称:动画片段在自定义控件库中的名称
+- 动画类型:一般与属性的类型相同
+- 持续时间:此动画片段持续的时间,经过这段时间后,动画片段播放完毕,开始播放下一段动画
+- from:动画的起始帧,即刚开始播放此动画时的属性值
+- to:动画的最终帧,即此动画将要播放完毕时的属性值
+- 循环片段:控制动画的最后几个片段循环播放
+
+> 除了首段动画外,动画名称不能为空,即除了首段动画外,后续的动画片段必须保存在自定义动画库中。
+> 同一个属性动画中,不能出现2个相同的动画名称的动画片段。
+
+如下图我们额外添加2个动画片段,并调整数值如下。
+
+
+
+### 保存和另存动画
+
+由于有复用逻辑,对于属性动画的保存,我们提供了2种方式
+
+- 创建副本,相当于另存为新的动画,会在自定义控件库里创建一系列新的动画
+- 应用修改,修改当前使用的动画,会影响所有复用这个动画的自定义控件
+
+
+
+> 你必须先保存才能播放动画,或者切换到其他控件,其他编辑器
+
+### 播放动画
+
+保存完毕后,可以播放动画,对编辑的效果进行预览。我们提供了2种预览方式。
+
+1. 点击属性动画的播放按钮,可以对这个属性动画进行单独预览
+
+
+
+2. 点击功能区的“播放选中控件动画”按钮,可以对这个控件的所有属性动画同时进行预览
+
+
+
+例如我们为这个控件再添加一个尺寸动画,那么使用方式2预览的表现如下图:
+
+
+
+### 动画循环
+
+属性动画支持循环,且可以自己定义参与循环的片段,你可以通过下图中的循环片段属性调整,循环的规则如下:
+
+- 一个属性动画,只有最后的动画片段有“循环片段”这个属性
+- 只能让最后几段动画循环
+- “循环片段” = 0表示没有循环
+- 例如你填写了5个动画片段,按顺序分别是A→B→C→D→E,且“循环片段” = 3,那么实际的播放顺序是A→B→C→D→E→C→D……(CDE循环)
+- “循环片段”不能超过属性动画的动画片段数
+- 如果首段动画没有名称,那么它不能参与循环
+- 序列帧动画不能循环
+
+
+
+### 取消属性动画
+
+点击属性动画的取消按钮,可以取消该属性动画,并且将其恢复到固定数值的状态。
+
+
+
+> 如果动画已经保存到自定义控件库中,那么取消动画并不会删除这个动画
+
+### uv动画和序列帧动画
+
+uv动画和序列帧动画都是uv起点属性的动画,不同于其他属性动画只能使用固定的动画片段类型,比较特殊。
+
+我们新建一张图片,并使用my_eating_apple.png作为图片资源。然后添加一个属性动画,动画的类型选择“uv起点”,如下图,可以看到2种动画(通过动画类型的下拉框切换)。
+
+1. 序列帧
+
+序列帧属性动画与序列帧特效类似,都是通过切换图片的显示区域达到动画的效果,序列帧动画主要关注下列属性:
+
+- 播放帧数:代表序列帧贴图资源总共包含的总帧数,例如我们使用的图片中总共包含了苹果的36个状态,所以这个值填写36
+- 起始帧:表示第一帧播放第几张图
+- 帧率:每秒播放的帧数,10表示每秒切换10张图,总共是36张图,播放一次需要的时间为3.6秒
+- 是否可逆:勾选时序列帧播放完毕后倒放回第一帧
+
+
+
+使用序列帧动画时,图片的uv尺寸不能填写[0,0],这里填写的是序列帧的每一帧的尺寸大小。
+
+> 序列帧动画使用的图片,想要实现正常的效果,每个子图的大小必须一致
+> 序列帧动画会自我循环,所以没有循环的属性。因为会自我循环,所以序列帧动画后面的动画片段是不会被读取到的
+
+2. uv动画
+
+动画类型从“序列帧”切换到“uv”,可以制作uv动画。uv动画与其他动画类似,按照下图的信息填写,保存并播放,可以查看uv动画的效果。
+
+
+
+## 属性动画Json写法简介
+
+属性动画依然是以Json数据的形式写在UI文件中,格式和控件类似。
+
+要表现一个属性动画,需要先写一个Json数据块,透明度动画举例如下(相关参数会在下文详细描述):
+
+```json
+ {
+ "anim_type" : "alpha",
+ "duration" : 1.0,
+ "from" : 0.0,
+ "to" : 1.0
+ }
+```
+
+这段代码块代表一个控件在1秒钟内alpha值从0线性变化到1的属性动画,为了将这个动画绑定到控件上,一共有两种写法。
+
+一种是将Json数据块直接赋给alpha属性:
+
+```json
+ {
+ "alphaImg" : {
+ "alpha" : {
+ "anim_type" : "alpha",
+ "duration" : 0.30,
+ "from" : 0.0,
+ "to" : 1.0
+ },
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ }
+ }
+```
+
+另一种则是将属性动画写成自定义控件的形式写在UIjson文件的最外层,在alpha属性值以 “@”+动画名 的形式进行赋值:
+
+```json
+ {
+ "alphaImg" : {
+ "alpha" : "@show_alpha_ani",
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ },
+ "show_alpha_ani": {
+ "anim_type" : "alpha",
+ "duration" : 0.30,
+ "from" : 0.0,
+ "to" : 1.0
+ },
+ }
+```
+
+两种写法都能达成相同的效果,不同的是第二种写法能够被复用。
+
+目前UI编辑器还不支持属性动画的创建和编辑,但通过修改UIJson定义的属性动画可在UI编辑器播放,此时挂载了属性动画的属性在编辑器内修改对应属性无法生效。
+
+## 属性动画类型与Json配置
+
+### 通用属性
+
+通用属性是每种属性动画都支持的属性
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| anim_type | 动画类型,取值["alpha", "clip", "color", "flip_book", "offset", "size", "uv"],不同的动画类型只能赋给对应的属性。 |
+| duration | 动画持续时间,单位为秒。|
+| from | 动画起始数据,根据动画类型的不同,支持写入的数据类型也不同,控件初始化时会用该值初始化对应属性 |
+| to | 动画结束数据,根据动画类型的不同,支持写入的数据类型也不同 |
+| next | 当前动画播放完毕后接着播放的动画,**注2**举了一个使图片控件的alpha值从0到1再到0的渐变动画的例子。 |
+
+* 注1
+
+填写属性动画属性值时请注意不同的动画所需要的属性值类型或取值范围均可能不同,填写错误会导致动画无法生效或表现异常。
+
+* 注2
+
+```json
+ "alphaImg" : {
+ "alpha" : "@show_alpha_ani",
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ },
+ "show_alpha_ani": {
+ "anim_type" : "alpha",
+ "duration" : 0.30,
+ "from" : 0.0,
+ "next" : "@hold_alpha_ani",
+ "to" : 1.0
+ },
+ "hold_alpha_ani" : {
+ "anim_type" : "alpha",
+ "duration" : 1,
+ "from" : 1.0,
+ "next" : "@hide_alpha_ani",
+ "to" : 1.0
+ },
+ "hide_alpha_ani" : {
+ "anim_type" : "alpha",
+ "duration" : 0.30,
+ "from" : 1.0,
+ "to" : 0.0
+ },
+
+```
+
+### 透明度动画
+
+控件透明度动画,需要挂载在"alpha"属性值上
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| anim_type | "alpha" |
+| from | 透明度起始值,取值0-1.0。 |
+| to | 透明度结束值,取值0-1.0。 |
+
+
+
+```json
+ "alphaImg" : {
+ "alpha" : "@show_alpha_ani",
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ },
+ "show_alpha_ani": {
+ "anim_type" : "alpha",
+ "duration" : 0.30,
+ "from" : 0.0,
+ "next" : "@hold_alpha_ani",
+ "to" : 1.0
+ },
+ "hold_alpha_ani" : {
+ "anim_type" : "alpha",
+ "duration" : 1,
+ "from" : 1.0,
+ "next" : "@hide_alpha_ani",
+ "to" : 1.0
+ },
+ "hide_alpha_ani" : {
+ "anim_type" : "alpha",
+ "duration" : 0.30,
+ "from" : 1.0,
+ "to" : 0.0
+ },
+
+```
+
+### 裁剪动画
+
+控件裁剪动画,需要挂载在图片控件的"clip_ratio"属性值上
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| anim_type | "clip" |
+| from | 裁剪程度起始值,取值0-1.0。0表示不裁剪,1表示完全裁剪,即该控件不渲染 |
+| to | 裁剪程度结束值,取值0-1.0。 |
+
+
+
+```json
+ "clipImg" : {
+ "clip_ratio" : {
+ "anim_type" : "clip",
+ "duration" : 1.0,
+ "from" : 0.0,
+ "to" : 1.0
+ },
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ },
+
+```
+
+### 颜色动画
+
+控件颜色动画,需要挂载在图片控件的"color"属性值上
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| anim_type | "color" |
+| from | 颜色起始值,颜色(r , g, b)取值范围[0 , 1],不支持alpha值属性设置或参与动画 |
+| to | 颜色结束值 |
+
+
+
+```json
+ "colorImg" : {
+ "color": "@color_ani",
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ },
+ "color_ani": {
+ "anim_type" : "color",
+ "duration" : 1.0,
+ "from" : [1,0,0],
+ "to" : [0,0,1]
+ },
+
+```
+
+### 序列帧动画
+
+控件序列帧动画,需要挂载在图片控件的"uv"属性值上.
+
+序列帧动画,又称逐帧动画,其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。通过一张序列帧动画资源图,以及一些自定义的设置,可以在图片控件上展示序列帧动画。
+
+| 变量
| 解释 |
+| :-----------------: | -------------------------------------------- |
+| anim_type | "flip_book" |
+| initial_frame | uv动画起始帧 |
+| frame_count | 帧数,代表序列帧贴图资源总共包含的总帧数 |
+| fps | 帧率,每秒播放的帧数 |
+| reversible | 是否可逆,默认值为false,为true时序列帧播放完毕后倒放回第一帧 |
+
+
+
+```json
+ "flipbookImg" : {
+ "texture" : "textures/ui/my_eating_apple",
+ "type" : "image",
+ "uv" : "@flipbook_ani",
+ "uv_size" : [ 64.0, 64.0 ],
+ "visible" : true
+ },
+ "flipbook_ani": {
+ "anim_type": "flip_book",
+ "initial_frame": 10,
+ "frame_count": 36,
+ "fps": 10,
+ "reversible": false
+ },
+```
+
+当一个图片控件被用作序列帧的载体时,该控件的属性配置有以下规则需要遵守:
+
+| 变量
| 解释 |
+| :-----------------: | -------------------------------------------- |
+| texture | 贴图的路径,贴图需要符合序列帧样式,如下图 |
+| uv | 序列帧本质上就是一种特殊的uv动画。 |
+| uv_size | uv尺寸表示需要显示的尺寸,要和序列帧贴图中的一帧大小相同 |
+
+
+
+### 位移动画
+
+控件位移动画,需要挂载在控件的"offset"属性值上
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| anim_type | "offset" |
+| from | 位移起始值,自身相对父节点的偏移,详见[通用属性](./30-UI说明文档.md#通用属性) |
+| to | 位移结束值 |
+
+
+
+```json
+ "offsetImg" : {
+ "offset" : "@offset_ani",
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ },
+ "offset_ani": {
+ "anim_type" : "offset",
+ "duration" : 1.0,
+ "from" : [0, 0],
+ "to" : [0, 50]
+ },
+
+```
+
+**注**
+
+位移动画需要起始值和结束值的偏移类型相同,例如起始值为["50%", 0],结束值则需要为["100%", 50],即变化的类型需保持一致。
+
+如果有需要调用接口动态修改该控件的尺寸,请避免使用SetSize,改为使用SetFullSize。
+
+如果有需要调用接口动态修改该控件的偏移属性,请避免使用SetPosition,改为使用SetFullPosition。
+
+### 尺寸动画
+
+控件尺寸动画,需要挂载在控件的"size"属性值上
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| anim_type | "size" |
+| from | 尺寸起始值,控件大小,详见[通用属性](./30-UI说明文档.md#通用属性) |
+| to | 尺寸结束值 |
+
+
+
+```json
+ "sizeImg" : {
+ "size" : "@size_ani",
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ },
+ "size_ani": {
+ "anim_type" : "size",
+ "duration" : 1.0,
+ "from" : [100, 100],
+ "to" : [150, 150]
+ },
+
+```
+
+**注**
+
+尺寸动画需要起始值和结束值的偏移类型相同,例如起始值为["50%", 0],结束值则需要为["100%", 50],即变化的类型需保持一致。
+
+如果有需要调用接口动态修改该控件的尺寸,请避免使用SetSize,改为使用SetFullSize。
+
+如果有需要调用接口动态修改该控件的偏移属性,请避免使用SetPosition,改为使用SetFullPosition。
+
+### UV动画
+
+控件UV动画,需要挂载在图片控件的"uv"属性值上
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| anim_type | "uv" |
+| from | uv坐标初始值。uv坐标为[x,y]表示图片控件以所选图片左上角为原点,偏移(x,y)像素开始截取图片。 |
+| to | uv坐标结束值 |
+
+
+
+```json
+ "sizeImg" : {
+ "uv" : "@uv_ani",
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "visible" : true
+ },
+ "uv_ani": {
+ "anim_type" : "uv",
+ "duration" : 5,
+ "from" : [0, 0],
+ "to" : [2240, 0]
+ },
+
+```
+
+
+## 控制动画
+
+
+目前的SDK接口支持注册动画,给属性添加动画,移除属性的动画,暂停播放单一(或者全部)属性动画等等,开发者可以参考以下的接口:
+
+注册动画: RegisterUIAnimations
+
+取消注册动画: UnregisterUIAnimation
+
+
+暂停动画: PauseAnimation
+
+播放动画: PlayAnimation
+
+停止播放动画: StopAnimation
+
+
+给单一属性设置动画: SetAnimation
+
+
+给单一属性移除动画: RemoveAnimation
+
+
+设置动画播放结束后的回调: SetAnimEndCallback
+
+
+删除回调: RemoveAnimEndCallback
+
+
+这些接口在 UIDemoModUI 中部分使用(注册和添加动画请点击 "无动画按钮")
+
+
\ No newline at end of file
diff --git a/mcguide/18-界面与交互/2-从零开始创建UI.md b/mcguide/18-界面与交互/2-从零开始创建UI.md
new file mode 100644
index 0000000..582892f
--- /dev/null
+++ b/mcguide/18-界面与交互/2-从零开始创建UI.md
@@ -0,0 +1,270 @@
+---
+front:
+hard: 入门
+time: 分钟
+selection: true
+---
+
+# 从零开始创建UI界面
+
+这篇教程会详细介绍如何通过工作台内嵌的UI编辑器,创建一个基础的FPS战斗界面。教程包括界面控件的创建(包含面板,图片和按钮)以及按钮相关的逻辑绑定。将按照以下步骤来进行介绍:
+* 如何根据自己的需要使用UI编辑器进行界面编辑和保存
+* 如何根据json中的内容进行按钮逻辑python的相关绑定
+
+## 使用UI编辑器
+
+我们的目的是制作一个简易射击模板。
+
+
+
+实现这个模板手机版界面的部分功能。
+
+
+
+### 进入UI编辑器
+
+打开MC 工作台,我们点击创建空白AddOn。
+
+
+
+选择空白附加包,在弹出的“新建空白附加包”弹窗中填写信息,并点击启动编辑以进入编辑器。
+
+
+
+进入编辑器后,你需要先通过顶部页签切换到“界面”,以打开界面编辑器,如下图:
+
+
+
+### 导入UI资源
+首先,我们把制作界面需要的图片通过UI编辑器的资源管理器窗口,选择图片文件导入。如下图。
+
+
+
+注意,目前我们仅支持png格式的图片文件,此外,图片名称仅支持以数字、字母、下划线组成的名称,该命名规则也是整个UI编辑器通用的命名规则,若不满足以上规则,资源导入会失败。
+
+界面需要的图片资源可以点击这里下载:[简易射击模板界面贴图资源](https://g79.gdl.netease.com/awesome_ui_textures.zip)。
+
+成功导入图片后的资源管理窗口如下图所示,在资源管理器的精简模式中切换到贴图,可以看到所有的贴图。
+
+
+
+如果你使用完整模式的话,UI的贴图在这个目录(根目录\resourcepack(资源包)\textures\ui)。关于资源管理的更多内容请参考[文件结构](../15-资源管理/2-文件结构.md)。
+
+
+
+> 精简模式的贴图没有区分具体用处,展示的是所有作品目录中的贴图。你可以使用其他目录中的贴图,如果他不在ui文件夹下,编辑器会自动帮你复制一份到ui文件夹。
+
+### 新建UI文件
+
+现在让我们来创建一个界面文件:
+
+1. 使用资源管理器的新建按钮
+2. 在弹出的新建文件向导弹窗中选择界面文件,点击下一步
+3. 填写文件命名,这里我们命名为fpsBattle,并点击创建
+
+
+
+新建UI文件成功后,UI编辑器会自动载入该UI文件的编辑模式,并自带main画布,整体界面如下图所示。你可以将资源管理器(精简模式)切换到界面,这里将显示所有的界面文件。
+
+
+
+如果你喜欢完整模式,界面文件的路径(根目录\resourcepack(资源包)\ui)如下图。
+
+
+
+如你所见,预览窗正中间的巨大的黄色像素块是艾利克斯的可爱的后脑勺。如果你想专注于界面编辑,不想被游戏干扰,你可以关闭“显示游戏画面”这个选项。
+
+
+
+### 创建panel面板控件
+
+首先,我们先创建两个面板(panel)。面板是所有控件中最基础的一个,除去通用属性外,没有任何专属属性,主要用于控件归纳,就如同文件夹一样。创建面板和创建所有其他控件一样,我们鼠标左键单击选中main,然后右键点击弹出菜单,选择"添加对象"-"面板",如下图。
+
+
+
+或者将控件库中的面板控件直接拖拽到控件结构的main控件上,完成创建,如下图。
+
+
+
+还可以先选中控件结构中的main,然后直接将面板拖拽到预览窗中,如下图。
+
+
+
+### 重命名控件
+创建完毕后对两个面板进行重命名操作,点击选中需要重命名的面板,在右侧的属性面板中修改它的名称,如下图。将其重命名为aimPanel,buttonPanel分别用来存放准心图片控件和所有按钮控件。
+
+
+
+
+
+### 创建准心图片控件
+面板创建成功后,我们来创建准心,准心通常是一张图片,和新建面板一样我们选中aimPanel并新建一个图片控件,这样新建的控件将会将aimPanel作为父节点。然后将其重命名为aimImage,如下图。
+
+
+
+创建完成之后,选中该图片控件,我们要替换它的图片,往下滑动属性窗口至"图片"这一栏,我们将先前导入图片资源拖拽到贴图设置处进行赋值,完成后场景中的图片就会由默认图片显示变为我们导入的图片显示,如下图。
+
+
+
+图片设置后,我们就可以通过调整锚点、尺寸和位移调整该控件相对于父节点的位置。这三个属性描述如下:
+
+锚点:每个控件有9个定位点,包括四个角、四边的中点、中心点,锚点可以设定子控件的哪个定位点和父控件的哪个定位点重合,下图中左侧对应父控件、右侧对应子控件。
+
+位移:位移用于控制该控件相对于锚点位置的偏移。位移的形式为%+Px。%表示父控件尺寸的百分比,Px表示像素。
+
+尺寸:尺寸为控件的宽(X)和高(Y)。也是%+Px的形式,其意义同位移。
+
+一般来说,控件的偏移和尺寸均用Px配置即可,比较复杂的情况才需要用到%。这里我们只是简要概括一下控件属性的作用和用法,详情请前往阅读[控件和控件属性](./10-控件和控件属性.md)。
+
+我们分别如下调整aimPanel和aimImage,设置后的界面如下图所示:
+
+
+
+aimPanel属性
+
+
+
+aimImage属性
+
+### 创建瞄准按钮控件
+准心完成之后,我们随后来制作瞄准按钮。选中buttonPanel并以该节点作为父节点创建一个按钮控件,并命名为aimButton,步骤等同于创建图片控件。
+
+
+
+设置一下buttonPanel的属性,与aimPanel的相同,不再单独截图。
+
+设置aimButton的属性如下图。
+
+> 位移XY的取值正负均可
+>
+> - 对于位移X来说,**正数表示向右位移**,负数表示向左位移
+> - 对于位移Y来说,**正数表示向下位移**,负数表示向上位移
+
+由于我们的锚点定在右下角,所以我们需要这个按钮相对于锚点像左上位移,即位移XY的最终取值都需要是负数。
+
+
+
+aimButton属性
+
+这样设置可以保证无论是比例,分辨率的屏幕,这个按钮始终在中间靠右的地方,并且外框大小成正方形。
+
+
+
+和图片控件不同的是,按钮控件有三种图片状态可供设置,分别对应默认状态,按下状态和鼠标悬浮状态,对于鼠标悬浮状态,我们使用和按下状态一样的图片,如下拖动图片到对应的贴图位置,两个状态的图片分别是:
+
+- 普通贴图:aim.png
+- 按下贴图:aim_click.png
+
+另外,因为瞄准按钮不需要按钮文字,我们顺便可以把按钮属性中的按钮文本设置为空。
+
+因为我们要制作的是手机版的界面,不关注悬停的纹理(如果是电脑版,则悬停图片也是必须提供的)。
+
+
+
+目前为止,你的界面应该是这样的:
+
+
+
+### 创建瞄准镜控件
+
+接下来我们制作瞄准镜图片控件aimingImage,将aimPanel作为父节点创建图片控件,创建完成之后,勾选尺寸XY的适应,可以使图片铺满屏幕。
+
+
+
+拖动瞄准镜图片赋值,如下图。
+
+
+
+赋值完成后界面如下图。
+
+
+
+默认情况下,UI系统会默认保证图片的原生比例,如上图,你需要将图片的保持宽高比勾掉。
+
+
+
+### 调整层级
+
+如果你的瞄准镜图片挡住了你的瞄准按钮,那可能是因为你的aimPanel挡住了buttonPanel。请保证你的buttonPanel在aimPanel的下方,编辑器的规则是下方的控件会挡住上方,只有下面这种顺序才能保证瞄准按钮可以正常挡住其他控件。
+
+
+
+如果你不希望控件的遮挡关系被控件的顺序控制,那么你需要勾掉自动设定层级。
+
+
+
+取消自动层级之后,你可以在属性面板手动修改层级属性。层级较大的界面会遮挡层级较小的界面。
+
+
+
+注意:自动层级一旦取消勾选之后将无法再重新勾选。
+
+
+
+
+
+### 完善我们的UI
+以此类推,我们在buttonPanel下新建shootButton模拟左键射击按钮,调整它们的锚点、大小和位置,使之到达正确的位置,如下图。
+
+
+
+shootButton的锚点,位移XY,尺寸XY的参考属性如下。按照这种方法填写,可以确保在屏幕拉伸或者收缩后,shootButton和aimButton两个按钮控件相对与buttonPanel的位置和大小正常变化。你可以将编辑器内的预览窗拖拽缩放,以观察这个效果。
+
+
+
+### 保存UI文件
+
+界面完成之后点击右上角保存按钮,如下图,UI文件制作完成。
+
+
+
+保存成功后,fpsBattls.json文件会输出到mod存档资源包的ui文件夹下,如下图。
+
+
+
+## 创建python逻辑
+从上一部分的描述中我们可以得知,UI编辑器制作的json文件只负责界面布局,以及各个控件属性的初始状态。而游戏中的UI除了布局还包含具体的界面逻辑,这就需要我们通过python代码加以实现。
+
+此文档主要关注界面创建,代码部分可以参考工作台的模板。
+
+
+
+我们打开关卡编辑器,在舞台中可以看到常驻底下有一个UI逻辑零件和PE版UI界面。
+
+
+
+在舞台上点击“PE版UI界面”,可以在他的属性面板中看到,这个界面预设绑定了我们刚刚创建的这个界面文件。关于界面预设的用法详见:[界面预设](../20-玩法开发/14-预设玩法编程/0-理解预设系统/10-预设/5-界面预设.md)。
+
+
+
+在舞台上点击“UI逻辑零件”,在属性面板中点击配套文件 - 脚本 - 打开文件按钮,可以打开他的脚本文件。
+
+
+
+下面的代码片段是截取自这个脚本,实现的效果是
+
+1. 在引擎的OnUIInitFinished事件触发时
+2. 获取当前Mod运行的平台(PC或者PE)
+3. 然后激活(显示)对应的界面预设
+
+```python
+ def InitClient(self):
+ import mod.client.extraClientApi as clientApi
+ self.ListenForEngineEvent(UiInitFinishedEvent, self, self.OnUIInitFinished)
+```
+
+```python
+ def OnUIInitFinished(self, args):
+ import mod.client.extraClientApi as clientApi
+ if clientApi.GetPlatform() == 0:
+ uiNodePreset = self.GetParent().GetChildPresetsByName("PC版UI界面")[0]
+ else:
+ uiNodePreset = self.GetParent().GetChildPresetsByName("PE版UI界面")[0]
+ if uiNodePreset:
+ uiNodePreset.SetUiActive(True)
+```
+
+我们利用[UI API文档](40-UIAPI文档.html)中对各个控件的接口和游戏原生支持的格式化,可以在python代码中动态的改变界面的表现,具体可以参考[样式代码](https://minecraft-zh.gamepedia.com/index.php?title=%E6%A0%B7%E5%BC%8F%E4%BB%A3%E7%A0%81&variant=zh)
+
+当然,更多API功能还需要你的发现和尝试。
+
diff --git a/mcguide/18-界面与交互/20-界面适配预览和方法.md b/mcguide/18-界面与交互/20-界面适配预览和方法.md
new file mode 100644
index 0000000..81765b7
--- /dev/null
+++ b/mcguide/18-界面与交互/20-界面适配预览和方法.md
@@ -0,0 +1,96 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# 不同分辨率界面适配
+
+## 预览不同分辨率下的效果
+
+在界面编辑器可以发现如下图的一系列分辨率相关的选项
+
+
+
+我们在界面编辑器里提供了各种常见分辨率的模拟,你可以选择你希望适配的分辨率来查看效果。
+
+
+
+如下图,可以看到当前选择的是全面屏手机(2160×1080)的分辨率。左侧还有一个实际分辨率,显示的是当前预览窗的《我的世界》的实际分辨率是540:270,这是由《我的世界》本身的适配规则决定的,见下面的[适配原理](#适配原理)。
+
+需要注意的,游戏里的所有像素都是按照实际分辨率计算的,而实际分辨率通常比手机或者电脑的屏幕小得多,所以当你在设置位移尺寸的时候,如果需要直接填写像素,需要格外注意适配问题。
+
+
+
+## 适配原理
+
+手机的分辨率是多种多样的,想尽量的适配更多的分辨率,就需要了解《我的世界》中界面适配的方法。适配界面时涉及的尺寸如下:
+
+
+
+其中画布一般和屏幕大小相同,少数情况会小于屏幕,由系统和玩家设置决定。
+
+前面我们已经知道,控件的尺寸为百分比加一个固定像素值的形式。系统在计算控件实际的显示尺寸时,会对所有固定像素乘以一个比例a。举例如下:
+
+| | **画布尺寸** | **父控件尺寸** | **子控件设定尺寸** | **子控件实际显示尺寸** |
+| ------ | ------------ | -------------- | ------------------ | ---------------------- |
+| **宽** | 900Px | 800Px | 10%+50Px | 80Px+50Px\*a |
+| **高** | 750Px | 750Px | 20%+100Px | 150Px+100Px\*a |
+
+那么比例a是怎么确定的呢?系统会按如下步骤计算这个比例:
+
+1. **计算画布的宽除以320、画布的高除以210的值**。上面的例子中,这两个值为900/320=2.81,750/210=3.57。
+2. **计算a的最大值**。在1)中计算的两个比例分别取整,然后再取最小值,作为a的最大值。在上面的例子两个比例取整后分别为2和3,最小值就是2。
+3. **计算a的最终值**。根据某些的规则得到一个比2)中小的值,作为a最终的值。这个规则开发者无需关心。一般来说最终值和2)里计算的最大值是一样的。
+
+在上面的例子中,a的值为2,那么控件显示的宽为80Px+50Px\*a=180Px,高为150Px+100Px\*a=350Px。
+
+通俗一点来说,游戏里有一个320Px\*210Px的适配区域(下图中紫色实线部分),游戏把这个适配区域按整数倍膨胀,直到再膨胀就会超出画布为止。然后将这个整数比例乘以控件尺寸中的固定像素,再加上比例部分计算得到的像素,作为最终的控件显示尺寸。
+
+
+
+因此,如果我们想UI在各种分辨率的屏幕下都不会超出屏幕边界,可以把决定显示范围的父控件(比如顶层的面板控件)的尺寸设为固定尺寸,且数值在320\*210以下。需要注意的是,贴图并不需要受限于这个尺寸,可以适当扩大贴图尺寸,以在大分辨率的屏幕里获得更好的效果。
+
+此外,在PC基岩版中,适配的基准值为376x250,略大于手机适配的320x210,如果想一份界面资源同时适配手机和PC基岩版,那么需要以手机的标准来制作。
+
+## 异形屏适配和基类画布
+
+如果你制作的是手机模组,可能会遇到玩家的屏幕是异形屏的情况,例如挖孔屏,刘海屏等。
+
+有一个简单的方法来进行适配,就是使用基类画布。如果你打算对异形屏进行适配,最好一开始就使用基类画布,如果你已经做了一半,那你可以这样做(我们以界面模板这个邮件界面为例):
+
+1. 在main画布下新建一个panel(面板),并且将panel的尺寸XY的适应勾上。
+2. 将原来main画布下的其他控件拖拽到panel(面
+
+
+
+1. 右键panel添加到控件库,这里我们命名为mailContent,结果如下图
+
+
+
+> 这个操作是为了让main画布下的所有内容可以塞到同一个自定义控件中。如果你的main画布下面本来就是只有一个自定义控件的实例,那么你可以跳过这一步,或者main画布下面本来就只有一个直接的子节点(不关注孙节点等),那么直接把这个唯一的子节点创建为自定义控件即可。
+
+1. 创建一个基类画布,在画布的属性面板的变量区里选择刚刚创建的mailContent,这样就完成了基类画布的使用。
+
+
+
+> 如果你之前在画布上创建了变量,很遗憾,你必须再手动创建一次。
+
+你可能注意到了,如果你使用基类画布的话,你不能直接在基类画布下对控件进行编辑,而是需要编辑这个自定义控件。
+
+
+
+基类画布实际上使用了[控件引用](./15-变量引用和万用控件.md#控件引用和万用控件)。
+
+展开screen画布,然后继续按照下图的方式展开,你可以看到这个root_screen_panel实际上是一个万用控件。
+
+继续展开,就是我们熟悉的mailContent控件的内容。
+
+
+
+你可以在这里很方便的复制路径,复制到的路径可以直接使用在模组的SDK代码中。
+
+
+
+可以看到,启用基类画布之后,路径发生了较大的变化,所以我们强烈建议你在制作UI之前先想要是否要使用基类画布。
+
diff --git a/mcguide/18-界面与交互/21-操作安全性说明.md b/mcguide/18-界面与交互/21-操作安全性说明.md
new file mode 100644
index 0000000..f8b6b4c
--- /dev/null
+++ b/mcguide/18-界面与交互/21-操作安全性说明.md
@@ -0,0 +1,47 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# 操作安全性
+
+## 加载自定义控件失败
+
+如果自定义控控件所在的文件中不存在该自定义控件,或者该文件不合法(不符合json格式,缺少根节点下缺少"namespace"节点)就会导致该报错的产生。
+
+## 无法删除当前编辑的自定义控件
+
+当前正在编辑的自定义控件是不允许进行删除的。
+
+## UI名字已经被系统或原生使用
+
+在MC中已经存在了部分原生控件,并且占用了一定的命名空间,用户应当用其他名称命名UI文件
+
+## 继承循环错误
+
+当前正在编辑自定义控件的时候,当控件继承关系比较复杂的时候,比较难察觉到继承导致的循环错误,比如三个控件 A,B,C,如果继承关系为 B继承自A,C继承自B,那么在编辑A的时候,如果将在A中实例化C并且保存到A中,那么就会间接导致自定义控件C所继承的对象中包含自己,从而导致在实例化C的时候,会出现循环错误。
+
+## 包含循环错误
+
+当前正在编辑自定义控件的时候,当控件继承关系以及包含关系比较复杂的时候,容易导致这个包含循环错误,比如三个 A,B,C,如果继承关系为B继承自C,如果C中包含了一个继承自A的子节点,在B不改写自身子节点的情况时,相当于B也包含了一个继承自A的子节点,如果此时用户编辑的是自定义控件A,对B实例化在A中的时候,就会间接导致自定义控件A中包含了继承自自定义控件A的节点,从而导致循环错误。
+
+## 添加变量失败
+
+用户尝试更新的变量为全局变量或者是UI编辑器暂时不支持的变量类型,比如 "\$variable_1": "\$variable_2" 这类变量引用变量的情况,则会导致该报错
+
+## 更新变量失败
+
+报错原因见[添加变量失败](#AddVariable)。
+
+## 丢失引用导致的变量无法解析
+
+比如一个image类型的控件,基础属性 "alpha" 引用了变量 "\$myAlpha",并且该变量是声明在他的父组件,那么在将该image控件创建为自定义控件的时候,"\$myAlpha"变量是不存在于该自定义控件上的(假设该控件身上也没有声明 "\$myAlpha|default"变量),因此在实例该自定义控件的时候,他的实例一开始也是不包含该变量的,如果将这个实例挂载到一个不含有"\$myAlpha"变量的父节点树下,那么将会导致该实例在解析属性 "alpha" 的时候搜索不到 "\$myAlpha"变量而报解析错误。
+
+同样,如果一个控件为万用控件,它继承的控件是由变量解析的,如果搜索不到变量则解析不了它所继承的对象,从而导致它变为一个破损控件。
+
+因此,用户在删除变量以及创建自定义控件过程中,都会提示用户该潜在的风险。
+
+## 变量循环
+
+在更改万用控件所继承的变量值的时候,会对变量值所对应的自定义控件进行解析生成,假设一种情况,万用控件A继承自变量 "\$myCustomControl",并且值为 "myNamespace.myCustomControl",也就是A继承了自定义控件 myCustomControl,如果这个自定义控件恰好里面也包含一个继承自变量 "\$myCustomControl"的万用控件,并且该万用控件的这个变量也被解析为 "myNamespace.myCustomControl",那么此时就会造成变量循环,在解析继承控件的时候会不断进行循环变量的解析。
\ No newline at end of file
diff --git a/mcguide/18-界面与交互/30-UI说明文档.md b/mcguide/18-界面与交互/30-UI说明文档.md
new file mode 100644
index 0000000..2144611
--- /dev/null
+++ b/mcguide/18-界面与交互/30-UI说明文档.md
@@ -0,0 +1,2301 @@
+---
+front:
+hard: 入门
+time: 分钟
+---
+
+# UI说明文档
+
+## 文件命名说明
+
+* json文件名 json中的namespace python文件名 三者需要一致
+
+* 示例中为"myUIName"
+
+```json
+ myUIName.json
+
+ "namespace" : "myUIName"
+
+ myUIName.py
+
+```
+
+## JSON编写说明
+
+Json是UI界面的显示内容和绑定的集合,UI是一种树状的组织结构,界面和界面中的控件都是一个UI Node节点,后续的很多方法的调用也需要这个树状结构的路径来标识。
+
+* 注:目前MCStudio已提供UI编辑器,开发者可以在UI编辑器内对界面进行可视化编辑,并导出可以使用的json文件。各个控件在UI编辑器中的使用介绍将在下文中详细介绍。
+
+### 命名空间
+
+命名空间是这个界面的名称,我们规定json文件名和namespace一致。
+
+```json
+ "namespace" : "myUIName"
+```
+
+### Main Screen
+
+main是这个界面名称,我们规定使用main,即一个json文件是一个界面。
+
+controls中的内容是该界面下的树状节点,即子节点。
+
+```json
+ "main@common.base_screen" : {
+ "controls" : [
+ ]
+ }
+```
+
+| 变量 | 解释 |
+| :---------------------: | :-------------------------------------------- |
+| main@common.base_screen | 表示main screen是common.base_screen的一个子类 |
+
+```
+my_namespace
+|____main
+ |test_image
+ |test_panel
+ |test_label
+```
+
+* 关于控件的适配问题,固定大小像素能在屏幕像素发生变化时保持形状大小不变,而百分比则能够保持与屏幕分辨率一致的比例,可能导致控件变形。
+
+
+### 特殊情况下的根节点路径变化
+
+一般地,在使用UI API时,对某控件进行操作时我们需要通过传入该控件相对于展示screen的相对路径来对控件实例进行操作,例如如下UI界面结构
+
+```
+my_namespace
+| main
+ | panel0
+ | text0
+```
+
+text0的路径为
+
+```
+path = "/panel0/text0"
+```
+
+但是当展示screen为了使用原生的功能而继承了common.base_screen时,部分功能的生效会伴随着根节点路径的修改,因此在使用UI API时控件的路径都发生了变化。
+
+#### 适配异形屏
+
+为了适配异形屏,我们可以展示screen中的内容通过引用的形式写在screen的$screen_content属性中。
+
+```json
+ "main@common.base_screen" : {
+ "$screen_content":"myUIName.panel0"
+ },
+ "panel0":{
+ "controls" : [
+ {
+ "text0@myUIName.text0" : {}
+ }
+ ],
+ "type" : "panel"
+ },
+ "text0" : {
+ "text" : "Hello World!",
+ "type" : "label",
+ "visible" : true
+ }
+```
+
+被$screen_content引用的内容,其显示内容的范围不会被异形屏遮挡。此时text0的路径为
+
+```
+base_path = "/variables_button_mappings_and_controls/safezone_screen_matrix/inner_matrix/safezone_screen_panel/root_screen_panel"
+path = base_path + "/text0"
+```
+
+可见控件的路径相对于展示screen的相对路径前还需要加上base_path路径才能正确拿到对应text0控件的路径,有关text0的api才会生效。
+
+## 控件介绍
+
+### screen
+
+screen,即画布控件,是游戏中一个UI界面的根节点,所有其他控件只有挂在画布下才能被正确显示出来。
+
+```json
+"main1" : {
+ "absorbs_input" : true,
+ "always_accepts_input" : false,
+ "controls" : [
+ {
+ "label0@test.label0" : {}
+ }
+ ],
+ "force_render_below" : false,
+ "is_showing_menu" : true,
+ "render_game_behind" : true,
+ "render_only_when_topmost" : true,
+ "should_steal_mouse" : false,
+ "type" : "screen"
+ },
+ "main2@common.base_screen" : {
+ "$screen_content" : "test.netease_editor_root_panel_base_screen0",
+ "absorbs_input" : true,
+ "always_accepts_input" : false,
+ "force_render_below" : false,
+ "is_showing_menu" : true,
+ "render_game_behind" : true,
+ "render_only_when_topmost" : true,
+ "should_steal_mouse" : false
+ },
+ "netease_editor_root_panel_base_screen0" : {
+ "anchor_from" : "top_left",
+ "anchor_to" : "top_left",
+ "controls" : [
+ {
+ "label1@test.label1" : {}
+ }
+ ],
+ "layer" : 1,
+ "offset" : [ 0, 0 ],
+ "size" : [ "100%", "100%" ],
+ "type" : "panel",
+ "visible" : true
+ }
+```
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| type | 当前控件类型 |
+| absorbs_input | 是否阻挡输入,默认值为true,置false时方向键生效 |
+| always_accepts_input | 是否始终接受鼠标事件,默认值为false,置true时该界面不在堆栈顶部也可以接受事件 |
+| force_render_below | 是否渲染下方的界面,默认值为false,置true时被该界面覆盖的界面也会被渲染 |
+| is_showing_menu | 是否是非常驻UI界面,默认为true,置false时该界面不会影响hud_screen的渲染 |
+| render_game_behind | 是否在该界面创建时依然渲染游戏,默认值为true,置false时该界面创建时游戏界面定格 |
+| render_only_when_topmost | 是否仅在堆栈顶部时渲染,默认值为true,置false时即使该界面被其他界面覆盖也会被渲染 |
+| should_steal_mouse | 是否隐藏鼠标,默认值为false,置true时该界面被创建时将不会出现鼠标 |
+|gamepad_cursor_deflection_mode| 是否开启手柄光标偏转模式,默认值为false,主要用于手柄适配[轮盘控件](#selectionwheel)
+| $screen_content | 当该画布继承自common.base_screen时生效,会将该属性对应的控件作为该画布的内容显示,该内容将会适配异形屏 |
+
+* 注
+
+always_accepts_input,force_render_below, render_game_behind, render_only_when_topmost属性仅在调用PushScreen接口创建UI时才会正常生效。
+
+absorbs_input暂时无法生效,等待后续修复。
+
+下图为UI编辑器中画布属性编辑面板
+
+
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| 始终支持按键 | 对应always_accepts_input字段 |
+| 创建时运行游戏 | 对应render_game_behind字段 |
+| 强制持续渲染 | 对应force_render_below字段 |
+| 仅在顶层渲染 | 对应render_only_when_topmost字段 |
+| 继承基类画布 | 是否继承基类控件,若勾选,UI编辑器会自动创建一个不可见的,以netease_editor_root_panel开头的panel,并将该画布的内容放置在该panel下,并将$screen_content属性代表的控件指向该panel。继承基类控件后,画布内容将会适配异形屏。 |
+
+### 通用属性
+
+通用属性是每个控件都支持编辑的属性,对每个控件的位置、大小等基本属性进行设置。
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| anchor_from | 挂接在父节点锚点的位置,取值范围["top_left", "top_middle", "top_right", "left_middle", "center", "right_middle", "bottom_left", "bottom_middle", "bottom_right"] |
+| anchor_to | 自身挂接锚点的位置,取值同anchor_from |
+| layer | 当前控件相对父节点的层级,最终显示层级取决于父节点到该节点的layer之和 |
+| offset | 自身相对父节点的偏移,值为百分比+像素(1个像素等于屏幕上3个像素) |
+| size | 相对父节点的大小,取值同offset |
+| max_size | 最大尺寸,取值同offset。当该控件尺寸可变时,最大不能超过该属性配置的尺寸 |
+| min_size | 最小尺寸,取值同offset。当该控件尺寸可变时,最小不能小于该属性配置的尺寸 |
+| clips_children | 裁剪子控件,取值bool值,开启后该控件范围外的子控件将不会被渲染 |
+| clip_offset | 裁剪偏移,取值[x,y]。当开启裁剪子控件后,用来调整裁剪范围的偏移 |
+| alpha | 透明度,取值0-1.0。调整控件的透明度 |
+| propagate_alpha | 透明度传递,取值bool。该控件的透明度是否会影响子控件 |
+| enable | 是否可交互,取值bool。关闭该属性后按钮等控件变得不可交互 |
+| type | 当前控件类型 |
+| visible | 默认是否显示,true为显示,false为不显示 |
+
+下图为UI编辑器中控件的通用属性编辑面板
+
+
+
+| 变量
| 解释 |
+| :-----------------: | ----------------------------------------------------------- |
+| 锚点 | 左右两侧的按钮组分别代表anchor_from字段和anchor_to字段的值,从左到右从上到下依次代表取值范围中["top_left", "top_middle", "top_right", "left_middle", "center", "right_middle", "bottom_left", "bottom_middle", "bottom_right"]的其中一个 |
+| 名称 | 改变控件的名称,只接受字母、数字、下划线的组合|
+| 隐藏控件 | 对应visible字段,设置visible属性会实时的反映在UI编辑器左侧的控件结构窗口里 |
+| 层级 | 对应layer字段, 当UI编辑器关闭自动层级调整功能时,该属性会在属性窗口中出现。该属性仅支持正整数。 |
+| 位移X |对应offset字段的第一个数据,用于控制该控件相对于锚点位置的偏移。位移的形式为%+Px,Px表示像素,%表示百分比跟随,以位移X为例,跟随有["无", "父控件尺寸X", "最大兄弟控件尺寸X", "子控件尺寸X", "最大子控件尺寸X", "尺寸Y"]选项。详情见**注**。点击"PX"和"%"按钮将实现百分比跟随和像素的相互转换。|
+| 位移Y |对应offset字段的第二个数据,用于控制该控件相对于锚点位置的偏移,和位移X组成该控件的offset属性|
+| 尺寸X | 对应size字段的第一个数据,配置形式同位移,界面和位移属性基本相同,不同在“适应”属性勾选框。勾选后尺寸的宽度将适应该控件的内容,如Label控件的文本内容或图片控件的图片宽度,生成的json中尺寸样式为"default"|
+| 最大尺寸 | 对应max_size字段。|
+| 最小尺寸 | 对应min_size字段。|
+| 裁剪内容 | 对应clips_children字段。|
+| 裁剪偏移 | 对应clip_offset字段。|
+| 透明度 | 对应alpha字段。若勾选影响子控件,则会将该控件的propagate_alpha属性置True,繁殖则置False|
+| 交互 | 对应enable字段。|
+| 可被继承 | 若勾选可被继承,则该控件可以被继承控件继承使用,反之则不能被继承。勾选后,该控件会生成在json文件的最外层,和main处在同一层级,即一个命名空间下唯一,不勾选则生成在该控件父节点的controls字段中 |
+
+**注 以位移X为例的跟随选项解释**
+
+| 选项
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| 无 | 无跟随,仅Px生效,生成json中位移样式类似"100px"或100 |
+| 父控件尺寸X | 跟随父控件的宽度,生成json中位移样式类似"100%+100px" |
+| 最大兄弟控件尺寸X | 跟随其兄弟控件中控件宽度最大控件的宽度,选中后百分比将锁定为100,生成json中位移样式类似"100%sm+100px" |
+| 子控件尺寸X | 跟随子控件的宽度之和,生成json中位移样式类似"100%c+100px" |
+| 最大子控件尺寸X | 跟随其子控件中控件宽度最大控件的宽度,选中后百分比将锁定为100,生成json中位移样式类似"100%cm+100px" |
+| 尺寸Y | 跟随自身控件的高度,生成json中位移样式类似"100%y+100px" |
+
+位移Y,尺寸X, 尺寸Y类似
+
+### Label
+
+Label 是文本框控件,用来显示文本信息,默认的字体是MC字体,如果有中文会变成中文字体格式,暂时不支持换字体,可以通过接口统一设置字体,如果需要设置后续有介绍。
+```json
+ "label0" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "color" : [ 1, 1, 1 ],
+ "font_scale_factor" : 1.0,
+ "font_size" : "normal",
+ "font_type" : "smooth",
+ "layer" : 1,
+ "offset" : [ 0, 0 ],
+ "shadow" : false,
+ "size" : [ 100, 100 ],
+ "text" : "Hello World!",
+ "text_alignment" : "center",
+ "line_padding" : 0.0,
+ "type" : "label",
+ "visible" : true
+ },
+```
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| color | 字体颜色(r , g, b, a)取值范围[0 , 1] |
+| font_size | 字体大小,取值["large", "normal", "small"]|
+| font_scale_factor | 字体缩放比例 |
+| shadow | MC自带的字体阴影,true为显示,false则不显示 |
+| text | 该Label显示的内容,可以通过后续的API在代码中设置该值 |
+| text_alignment | Label中文字的对齐方式,取值为["left", "center", "right"] |
+| line_padding | 行间距,可以设置每行文字之间的间距 |
+| font_type | 字体,取值["smooth", "unicode", "default", "rune"] |
+
+下图为UI编辑器中文本控件的属性编辑面板
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ----------------------------------------------------------- |
+| 内容 | 对应text字段,支持任何形式的文本 |
+| 显示投影 | 对应shadow字段 |
+| 字体 | 对应font_type字段,可以修改文本的字体。需要注意的是当文本中出现中文时,该字体显示将强制转为unicode,该属性将不会生效。 |
+| 对齐 | 对应text_alignment字段,左中右对应["left", "center", "right"]数据 |
+| 文本颜色 | 对应color字段,点击按钮弹出颜色选择窗口,可以在调色板上取色或者使用吸管吸取界面上的颜色|
+| 字号 | 对应font_size和font_scale_factor字段,以一定的规则同时设置两个字段达到字号的效果 |
+| 行间距 | 对应line_padding字段 |
+
+**注**
+
+由于游戏的UI框架遵循[整数倍缩放](./1-界面编辑器使用说明.md#《我的世界》界面适配方法), 不同分辨率的机型,其缩放倍率和表现存在些微区别,其中文本控件受影响较大,当字体大小较小时会出现部分机型文字显示模糊的情况。经过测试,在UI编辑器中字体大小定为8及以上
+
+
+
+即属性font_size为normal,font_scale_factor为1.0及以上时
+
+
+
+该文字在任何机型上都不会模糊。当字体大小小于这个标准时,将不保证该文字在任意机型下都能清晰显示。
+
+由于格式控制符的存在,文本中尽量不要使用“%”。若一定需要显示“%”,应当在代码中输入"%%%%"方可生效。
+
+### Image
+
+Image是指图片控件,具有图片裁剪,图片九宫格,颜色叠加,uv偏移,旋转显示的额外属性。
+
+```json
+ "image0" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "is_new_nine_slice" : false,
+ "layer" : 2,
+ "nine_slice_buttom" : 0,
+ "nine_slice_left" : 0,
+ "nine_slice_right" : 0,
+ "nine_slice_top" : 0,
+ "offset" : [ 0, 0 ],
+ "size" : [ 100, 100 ],
+ "texture" : "textures/netease/common/image/default",
+ "nineslice_size" : [ 0, 0, 0, 0 ],
+ "grayscale" : false,
+ "keep_ratio" : true,
+ "clip_direction" : "left",
+ "clip_ratio" : 0.0,
+ "type" : "image",
+ "uv" : [ 0, 0 ],
+ "uv_size" : [ 107, 107 ],
+ "rotate_pivot": [0.5, 0.5],
+ "rotate_angle": 0,
+ "visible" : true
+ },
+```
+
+| 变量
| 解释 |
+| :-----------------: | -------------------------------------------- |
+| texture | 贴图的路径,该路径从resouce_pack中的textures目录开始 |
+| uv | uv坐标的初始值为[0, 0]。uv坐标为[x,y]表示图片控件以所选图片左上角为原点,偏移(x,y)像素开始截取图片。 |
+| uv_size | uv尺寸表示需要显示的尺寸,默认值为图片的宽高。uv尺寸为[x,y]表示图片控件将截图x*y像素的图片范围显示在控件中。 |
+| keep_ratio | 保持宽高比。取值bool。 |
+| grayscale | 是否去色,取值bool。勾选后该图片变为黑白图片。 |
+| clip_direction | 裁剪方向,取值范围["left", "right", "up", "down", "center"] |
+| clip_ratio | 裁剪尺寸,取值范围0-1.0。0表示不裁剪,1表示完全裁剪,即该控件不渲染 |
+| is_new_nine_slice | 设置为true标记该图片开启九宫格显示的功能,与下方的nine_slice_bottom,nine_slice_left,nine_slice_right,nine_slice_top共同设置旧版九宫属性|
+| nine_slice_bottom | 切片距离下边的距离,默认值为0 |
+| nine_slice_left | 切片距离左边的距离,默认值为0 |
+| nine_slice_right | 切片距离右边的距离,默认值为0 |
+| nine_slice_top | 切片距离上边的距离,默认值为0 |
+| nineslice_size | 设置原版九宫属性,相比于旧版九宫属性更符合像素风格。当设置了旧版九宫属性时优先旧版属性。该值支持数组和单个数字,数组代表[left,top,right,down]九宫属性,单个数值代表上下左右均采用该数值作为九宫属性,当四个方向的数值均为0时表示不开启原版九宫 |
+| rotate_pivot | 旋转锚点,数值类型为[float, float],默认值为[0.5, 0.5],具体见下文旋转说明|
+| rotate_angle | 旋转角度,数值类型为float,默认值为0,具体见下文旋转说明|
+
+
+
+当Image控件进行旋转操作时,它是以旋转锚点为基准进行变换,而rotate_pivot是用来计算控件旋转锚点坐标的属性。旋转锚点坐标系的原点位于控件的左上角,X轴正方向向右,Y轴正方向向下(和图像坐标系一样)。rotate_pivot属性的值是一个二维向量,取值范围不限,实际的 **旋转锚点的坐标 =(控件的x坐标 + rotate_pivot[0] * 控件的宽度, 控件的y坐标 + rotate_pivot[1] * 控件的高度)**,比如(0,0)表示控件的左上角,(1,1)表示控件的右下角。
+
+这是以左上角作为旋转锚点的旋转,rotate_pivot = (0, 0)
+
+
+
+这是以右上角作为旋转锚点的旋转,rotate_pivot = (1, 0)
+
+
+
+旋转锚点不仅仅是在图片内,也可以去到图片外,需要注意的是,旋转这个变换是最后作用的变换,图片控件先是算出当前的位置大小,再根据当前的位置大小算出旋转锚点,然后再应用旋转,并且这个旋转也只是视觉上的旋转,并不是控件真实的位置发生了改变(红框才是控件本身的位置信息和大小信息)。明白这点后,我们可以用一些常见例子来完成一些复杂的效果,比如给一张旋转的图添加水平运动动画。
+
+
+
+json如下:
+
+```json
+{
+ "main" : {
+ "controls" : [
+ {
+ "panel":
+ {
+ "size": [200, 200],
+ "controls": [
+ {
+ "testImage@UIDemo.image": {}
+ }
+ ],
+ "type": "panel"
+ }
+ }
+ ],
+ "type" : "screen"
+ },
+ "image" : {
+ "layer": 3,
+ "size": [ 100, 100 ],
+ "offset": "@UIDemo.animation_in",
+ "texture": "textures/netease/common/image/default",
+ "is_new_nine_slice": false,
+ "nine_slice_buttom" : 0,
+ "nine_slice_left" : 0,
+ "nine_slice_right" : 0,
+ "nine_slice_top" : 0,
+ "nineslice_size" : [0, 0, 0, 0],
+ "type": "image"
+ },
+ "animation_in": {
+ "anim_type": "offset",
+ "duration": 1.5,
+ "from": [ -100, 0 ],
+ "to": [ 100, 0 ],
+ "next": "@UIDemo.animation_out"
+ },
+ "animation_out": {
+ "anim_type": "offset",
+ "duration": 1.5,
+ "from": [ 100, 0 ],
+ "to": [ -100, 0 ],
+ "next": "@UIDemo.animation_in"
+ },
+ "namespace" : "UIDemo"
+}
+```
+
+可以从上面看出来,根据旋转锚点做的旋转,本质上是一种自转,对应于接口 Rotate ,如果想进行的是绕着某个固定点旋转,则需要用到接口 RotateAround(和公转的概念是一致的),这两种旋转是能复合到一起的,具体如何一起使用做出稍微复杂的效果可以参考 [Demo](../20-玩法开发/13-模组SDK编程/60-Demo示例.md#UIDemoMod),需要注意无论是哪种旋转,本质上都只是视觉上的效果,并不是实际的坐标和大小。
+
+
+下图为UI编辑器中图片控件的属性编辑面板
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 使用贴图 | 对应texture字段,将资源管理窗口中的图片资源拖曳到该图片小窗内赋值,可以在上方的下拉选项栏中重新选回默认图片 |
+| 图片适配 | 普通表示不开启九宫并保持宽高比,填充表示填满当前控件,选中旧版九宫则is_new_nine_slice置true,开启旧版九宫设置,选中原版九宫则开启原版九宫。 |
+| 去色 | 对应grayscale字段。 |
+| 裁剪方向 | 对应clip_direction字段。分别对应["从右向左裁剪","从左向右裁剪","从下向上裁剪","从上向下裁剪","从四周向中心裁剪"] |
+| 裁剪尺寸 | 对应clip_ratio字段。 |
+| uv起点 | 对应uv字段,默认为0,0 |
+| uv尺寸 | 对应uv_size字段,默认值为该texture的宽高 |
+| 旋转角度 | 对应rotate_angle字段,默认为 0|
+| 旋转锚点 | 对应rotate_pivot字段,默认为 0.5,0.5 |
+
+### Image Button
+
+Button 是按钮控件,同时含有Image和Label。按钮有三种状态,分别为default/hover/pressed,可以分别对应不同的贴图。
+
+* 注 $符号表示定义变量
+* controls表示控制的子节点,
+
+```json
+ "button0@common.button" : {
+ "$default_texture" : "textures/netease/common/button/default",
+ "$hover_texture" : "textures/netease/common/button/hover",
+ "$is_new_nine_slice" : false,
+ "$label_color" : [ 1, 1, 1 ],
+ "$label_font_scale_factor" : 1.0,
+ "$label_font_size" : "large",
+ "$label_layer" : 3,
+ "$label_offset" : [ 0, 0 ],
+ "$label_text" : "Button",
+ "$nine_slice_buttom" : 0,
+ "$nine_slice_left" : 0,
+ "$nine_slice_right" : 0,
+ "$nine_slice_top" : 0,
+ "$nineslice_size" : [ 0, 0, 0, 0 ],
+ "$pressed_button_name" : "%fpsBattle.click",
+ "$pressed_texture" : "textures/netease/common/button/pressed",
+ "$texture_layer" : 2,
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "is_handle_button_move_event" : true,
+ "button_mappings" : [],
+ "bindings" : [
+ {
+ "binding_collection_name" : "",
+ "binding_condition" : "always_when_visible",
+ "binding_type" : "collection_details"
+ }
+ ],
+ "controls" : [
+ {
+ "default@fpsBattle.default" : {}
+ },
+ {
+ "hover@fpsBattle.hover" : {}
+ },
+ {
+ "pressed@fpsBattle.pressed" : {}
+ },
+ {
+ "button_label@fpsBattle.button_label" : {}
+ }
+ ],
+ "default_control" : "default",
+ "hover_control" : "hover",
+ "layer" : 3,
+ "offset" : [ 0, 0 ],
+ "pressed_control" : "pressed",
+ "size" : [ 100, 50 ],
+ "type" : "button",
+ "visible" : true
+ },
+ "button_label" : {
+ "color" : "$label_color",
+ "font_scale_factor" : "$label_font_scale_factor",
+ "font_size" : "$label_font_size",
+ "font_type" : "smooth",
+ "layer" : "$label_layer",
+ "max_size" : [ "100%", "100%" ],
+ "offset" : [ 0, 0 ],
+ "shadow" : false,
+ "text" : "$label_text",
+ "text_alignment" : "center",
+ "type" : "label"
+ },
+ "default" : {
+ "is_new_nine_slice" : "$is_new_nine_slice",
+ "layer" : "$texture_layer",
+ "nine_slice_buttom" : "$nine_slice_buttom",
+ "nine_slice_left" : "$nine_slice_left",
+ "nine_slice_right" : "$nine_slice_right",
+ "nine_slice_top" : "$nine_slice_top",
+ "texture" : "$default_texture",
+ "type" : "image"
+ },
+ "hover" : {
+ "is_new_nine_slice" : "$is_new_nine_slice",
+ "layer" : "$texture_layer",
+ "nine_slice_buttom" : "$nine_slice_buttom",
+ "nine_slice_left" : "$nine_slice_left",
+ "nine_slice_right" : "$nine_slice_right",
+ "nine_slice_top" : "$nine_slice_top",
+ "texture" : "$hover_texture",
+ "type" : "image"
+ },
+ "pressed" : {
+ "is_new_nine_slice" : "$is_new_nine_slice",
+ "layer" : "$texture_layer",
+ "nine_slice_buttom" : "$nine_slice_buttom",
+ "nine_slice_left" : "$nine_slice_left",
+ "nine_slice_right" : "$nine_slice_right",
+ "nine_slice_top" : "$nine_slice_top",
+ "texture" : "$pressed_texture",
+ "type" : "image"
+ },
+```
+
+| 变量
| 解释 |
+| :------------------: | ---------------------------------- |
+| default | 表示按钮默认状态下的显示的图片内容 |
+| hover | 表示按钮处于悬浮状态下的图片内容 |
+| pressed | 表示按钮处于按下状态下的图片内容 |
+| $is_new_nine_slice | 设置为true标记该图片开启九宫格显示的功能,从Json结构里可以看出三张图片的九宫设置用的是同一个 |
+| $nine_slice_bottom | 切片距离下边的距离,默认值为0 |
+| $nine_slice_left | 切片距离左边的距离,默认值为0 |
+| $nine_slice_right | 切片距离右边的距离,默认值为0 |
+| $nine_slice_top | 切片距离上边的距离,默认值为0 |
+| $nineslice_size | 设置原版九宫属性,相比于旧版九宫属性更符合像素风格。当设置了旧版九宫属性时优先旧版属性。该值支持数组和单个数字,数组代表[left,top,right,down]九宫属性,单个数值代表上下左右均采用该数值作为九宫属性,当四个方向的数值均为0时表示不开启原版九宫 |
+| $pressed_button_name | fpsBattle代表编写UI逻辑的python类名,click代表按钮按下时会执行该python类的click函数。也可以使用API AddTouchEventHandler 动态注册按钮回调|
+| is_handle_button_move_event | 表示按钮是否可以响应按钮移动事件,需置true配合API AddTouchEventHandler使用 |
+| button_mappings | 表示按钮事件响应映射网,需置[]配合API AddTouchEventHandler使用 |
+
+下图为UI编辑器中按钮控件的属性编辑面板。
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 文本 | 对应button_label/text字段所引用的值,支持任何形式的文本 |
+| 文本颜色 | 对应button_label/color字段所引用的值,点击按钮弹出颜色选择窗口,可以在调色板上取色或者使用吸管吸取界面上的颜色 |
+| 字号 | 对应button_label/font_size和button_label/font_scale_factor字段,以一定的规则同时设置两个字段达到字号的效果 |
+| 文本偏移 | 对应button_label/offset字段所引用的值,设置按钮上的文字相对中心点的偏移 |
+| 使用贴图 | 分别对应default/texture,pressed/texture,hover/texture字段所引用的值,将资源管理窗口中的图片资源拖曳到该图片小窗内赋值,可以在上方的下拉选项栏中重新选回默认图 |
+| 图片适配 | 普通表示不开启九宫,选中旧版九宫则is_new_nine_slice置true,开启旧版九宫设置,选中原版九宫则开启原版九宫。 |
+### Panel
+
+panel为面板控件,主要是用来将控件进行分类和管理,类似文件夹。
+
+```json
+ "panel" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "layer" : 0,
+ "offset" : [ 0, 0 ],
+ "size" : [ "50.000000%+0 px", "50.000000%+0px" ],
+ "type" : "panel",
+ "visible" : true
+ }
+```
+
+| 变量 | 解释 |
+| :--: | ---------- |
+| type | 类型为panel |
+
+面板控件暂时没有专属的属性,如有,后续在此处添加。
+
+### InputPanel
+
+input_panel与panel类似,可以用来放置其他控件,但除此之外还可以用来拖动,或实现“模态框”功能。
+
+```json
+"InputPanel" : {
+ "anchor_from" : "top_left",
+ "anchor_to" : "top_left",
+ "button_mappings": [
+ {
+ "from_button_id": "button.menu_select",
+ "to_button_id": "#netease_to_button_id",
+ "mapping_type": "pressed"
+ }
+ ],
+ "layer" : 10,
+ "modal" : true,
+ "is_swallow": true,
+ "contained": true,
+ "draggable": "both",
+ "offset" : [ 0.0, 0.0 ],
+ "size" : [ 198.0, 137.0 ],
+ "type" : "input_panel",
+ "visible" : true
+}
+```
+
+| 变量 | 默认值 | 解释 |
+| :-------------: | ------------- | ------------------------------------------------------------ |
+| modal | false | 设为true时,该InputPanel视为模态框,见**注2** |
+| is_swallow | false | 设为true时,该InputPanel的输入会吞噬事件,见**注3** |
+| draggable | not_draggable | 当前控件可拖拽方式,默认为not_draggable不可拖拽,"horizontal"代表水平拖拽,"vertical"代表垂直拖拽,"both"代表自由拖拽 |
+| contained | false | 该控件可拖动时,是否会被父控件的大小范围所限制,默认值为false,见**注4** |
+| button_mappings | [] | 该值为开启拖拽功能所必须的属性,可以理解成开启接受屏幕点击事件 |
+
+* 注1
+
+```
+该控件的拖动功能也遵循UI控件的碰撞规则,当InputPanel中有按钮、滚动列表等接受鼠标事件的控件时,点击在这些控件并不会触发InputPanel的拖动操作。
+```
+
+* 注2
+
+```
+“模态框”是指将用户的UI点击操作限制在这个控件及其子控件,而其他的控件都不会响应用户操作。
+
+如果界面上同时存在多个模态框,其中层级最高的生效。
+
+可以用来处理ScrollView控件上显示其他控件时,点击会穿透到ScrollView的问题,可参考UIDemo示例的“InputPanel演示”
+
+界面编辑器暂不支持,可先用Panel搭建后手动在json中修改属性。
+
+```
+
+* 注3
+
+```
+吞噬事件是指点击该面板时,点击事件不会穿透到世界。如破坏方块、镜头转向不会被响应。
+
+```
+
+* 注4
+
+```
+InputPanel维护着一个拖拽偏移量,它代表着在整个拖拽过程中,InputPanel相对于控件出生点坐标的偏移量,**与控件自身的offset无关**。举个例子,InputPanel经过了5次手动拖拽后位置向右移动了5像素,则拖拽偏移量的值为(5, 0)。
+
+当contained为true时,拖拽偏移量存在限制,最小不能超过(0,0),最大不能超过父控件的大小减去InputPanel控件的大小。
+
+这也就意味着无论InputPanel是否设置了offset,由于初始拖拽偏移量为(0,0), 使控件无法负方向移动,因此需要将InputPanel放置在其父控件的左上角,或调用SetOffsetDelta接口手动设置拖拽偏移量。
+
+```
+
+### StackPanel
+
+布局面板,用于自动布局该控件的子控件
+
+```json
+"stack_panel0": {
+ "layer": 1,
+ "orientation": "horizontal",
+ "size": [100, 100],
+ "type": "stack_panel",
+ "controls": [{
+ "panel_0": {
+ "type": "panel",
+ "size": [2, 2]
+ }
+ }, {
+ "fill_0": {
+ "type": "panel",
+ "size": ["fill", 1]
+ }
+ }]
+},
+```
+
+| 变量 | 解释 |
+| :-------------: | ------------------------------------------------------------ |
+| orientation | 当前控件布局方式方式,"horizontal"代表水平排布,"vertical"代表垂直排布|
+| type | 类型为stack_panel |
+| size | 在stack_panel的子控件中,size属性支持使用"fill"字段来动态填充剩余空间。例如,若排列方式为"horizontal",可以通过设置子控件"size":["fill",1]来让控件在横向上铺满剩余空间。 |
+
+下图为UI编辑器中布局面板控件的属性编辑面板。
+
+
+
+
+
+| 变量 | 解释 |
+| :-------------: | ------------------------------------------------------------ |
+| 排列方式 | 对应orientation字段|
+
+**注**
+
+排序的顺序和子控件的排序有关,需要手动调整。
+
+### TextEditBox
+
+TextEditBox是输入框控件,用来输入文字信息,可以获取输入内容,设置输入框内容,触发输入中和输入完成事件,设置最大输入值等。下面的示例展示了一个搜索框的信息。
+
+```json
+ "text_edit_box0@common.text_edit_box" : {
+ "$edit_box_default_texture" : "textures/ui/edit_box_indent",
+ "$edit_box_hover_texture" : "textures/ui/edit_box_indent_hover",
+ "$font_size" : "normal",
+ "$is_new_nine_slice" : false,
+ "$nine_slice_buttom" : 0,
+ "$nine_slice_left" : 0,
+ "$nine_slice_right" : 0,
+ "$nine_slice_top" : 0,
+ "$nineslice_size" : [ 0, 0, 0, 0 ],
+ "$place_holder_text" : "请输入内容",
+ "$place_holder_text_color" : [ 0.50, 0.50, 0.50 ],
+ "$text_background_default" : "fpsBattle.edit_box_background_default",
+ "$text_background_hover" : "fpsBattle.edit_box_background_hover",
+ "$text_box_name" : "%fpsBattle.message_text_box",
+ "$text_box_text_color" : [ 1, 1, 1 ],
+ "$text_edit_box_content_binding_name" : "#fpsBattle.message_text_box_content",
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "enabled_newline" : false,
+ "layer" : 5,
+ "max_length" : 512,
+ "offset" : [ 0, 0 ],
+ "size" : [ 300, 27 ],
+ "type" : "edit_box",
+ "visible" : true
+ },
+ "edit_box_background_default" : {
+ "is_new_nine_slice" : "$is_new_nine_slice",
+ "nine_slice_buttom" : "$nine_slice_buttom",
+ "nine_slice_left" : "$nine_slice_left",
+ "nine_slice_right" : "$nine_slice_right",
+ "nine_slice_top" : "$nine_slice_top",
+ "texture" : "$edit_box_default_texture",
+ "type" : "image"
+ },
+ "edit_box_background_hover" : {
+ "is_new_nine_slice" : "$is_new_nine_slice",
+ "nine_slice_buttom" : "$nine_slice_buttom",
+ "nine_slice_left" : "$nine_slice_left",
+ "nine_slice_right" : "$nine_slice_right",
+ "nine_slice_top" : "$nine_slice_top",
+ "texture" : "$edit_box_hover_texture",
+ "type" : "image"
+ },
+```
+
+| 变量
| 解释 |
+| :----------------------------------------------------------: | ----------------------------------------------------------- |
+|max_length | 初始最大输入长度,后续可代码设置 |
+| $text_box_name | 获取输入到的信息,监听了BF_EditChanged和BF_EditFinished的函数Textbox,会在输入框内容修改和输入完成时调到该函数,可参考下面的**注1** |
+|$text_edit_box_content_binding_name | 输入框显示ReturnTextString中返回的内容,这与上面形成了一个双向绑定,可参考下面的**注1** |
+| $place_holder_text | 输入框初始化没有输入时的提示语 |
+| $is_new_nine_slice | 设置为true标记该图片开启九宫格显示的功能,从Json结构里可以看出两张图片的九宫设置用的是同一个 |
+| $nine_slice_bottom | 切片距离下边的距离,默认值为0 |
+| $nine_slice_left | 切片距离左边的距离,默认值为0 |
+| $nine_slice_right | 切片距离右边的距离,默认值为0 |
+| $nine_slice_top | 切片距离上边的距离,默认值为0 |
+| $nineslice_size | 设置原版九宫属性,相比于旧版九宫属性更符合像素风格。当设置了旧版九宫属性时优先旧版属性。该值支持数组和单个数字,数组代表[left,top,right,down]九宫属性,单个数值代表上下左右均采用该数值作为九宫属性,当四个方向的数值均为0时表示不开启原版九宫 |
+
+* 注1
+
+```python
+class TestScreen(ScreenNode):
+ def __init__(self, namespace, name, param):
+ ScreenNode.__init__(self, namespace, name, param)
+ self.text = ""
+ self.holder = str("请输入姓名")
+
+ @ViewBinder.binding(ViewBinder.BF_EditChanged | ViewBinder.BF_EditFinished)
+ def TextBox(self, args):
+ print "SearchTextBox ", args
+ self.text = args["Text"]
+ return ViewRequest.Refresh
+
+ @ViewBinder.binding(ViewBinder.BF_BindString)
+ def ReturnTextString(self):
+ return self.text
+
+```
+
+* 注2
+
+max_length 可以通过接口SetEditTextMaxLength,接口详细调用可见下文。
+
+注意:输入框推荐在创建UI的isHud为0的情况下使用,如:
+
+clientApi.CreateUI("testMod", "testUI", {**"isHud":0**})
+
+因为在安卓机器上,当isHud为1时,选中文本输入框后单指无法取消选中,需要双指点击屏幕取消选中,如下图:
+
+
+
+PC和IOS平台没有这个问题
+
+下图为UI编辑器中文本输入框控件的属性编辑面板。
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 提示文字 | 对应$place_holder_text字段,代表没有文本输入时底部显示 |
+| 提示文字颜色 | 对应$place_holder_text_color字段,代表提示文字的颜色,点击按钮弹出颜色选择窗口,可以在调色板上取色或者使用吸管吸取界面上的颜色 |
+| 输入文本颜色 | 对应$text_box_text_color字段,代表输入文本的颜色 |
+| 绑定输入框交互 | 对应$text_box_name字段 |
+| 绑定输入框内容 | 对应$text_edit_box_content_binding_name字段 |
+| 提示文字字号 | 对应$font_size字段,可供选择的有["small","middle","large"],对应值[4,8,16]|
+| 文字最大长度 | 对应max_length字段,即代表可输入文本的最大长度 |
+| 使用贴图 | 分别对应$edit_box_default_texture控件默认状态,$edit_box_hover_texture控件鼠标悬浮状态字段所引用的值,将资源管理窗口中的图片资源拖曳到该图片小窗内赋值,可以在上方的下拉选项栏中重新选回默认 |
+| 图片适配 | 普通表示不开启九宫,选中旧版九宫则is_new_nine_slice置true,开启旧版九宫设置,选中原版九宫则开启原版九宫。 |
+
+### PaperDoll
+
+该控件可以用于在ui上显示骨骼模型
+
+```json
+"paper_doll0" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "animation" : "",
+ "animation_looped": true,
+ "layer" : 7,
+ "modelname" : "",
+ "modelsize" : 1.0,
+ "offset" : [ 0, 0 ],
+ "renderer" : "paper_doll_renderer",
+ "size" : [ 100, 100 ],
+ "type" : "custom",
+ "visible" : true,
+ "enable_scissor_test" : false,
+ },
+```
+| 变量
| 解释 |
+| :----------: | ----------------------------------------------------------- |
+| modelname | 要显示的骨骼模型的名称,可通过API中的SetUiModel接口动态修改 |
+| animation | 骨骼模型播放的动作,可通过API中的SetUiModel接口动态修改 |
+| animation_looped | 骨骼模型播放动作是否循环播放,可通过API中的SetUiModel接口动态修改 |
+| modelsize | 骨骼模型的显示缩放 |
+| renderer | 对纸娃娃控件自定义的渲染模块,不建议改动该字段 |
+| enable_scissor_test | 超出父控件区域后是否裁剪,默认为false, 该属性需要父控件开启clips_children属性才能生效,[RenderPaperDoll](https://wiki.bedrock.dev/json-ui/json-ui-documentation.html)|
+
+下图为UI编辑器中纸娃娃控件的属性编辑面板。
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 模型类型 | 可选原版模型和FBX模型,FBX模型可通过资源管理器界面导入。选中FBX模型时显示模型名称选项,可选导入的FBX模型。选中原版模型时默认modelname使用steve |
+| 模型名称 | 对应modelname字段 |
+| 模型缩放 | 对应modelsize字段,支持0-100的正整数 |
+
+### NeteasePaperDoll
+
+该控件可以用于在ui上显示:
+
+1)生物,包括玩家与普通生物;
+
+2)骨骼模型展示;
+
+3)生物类型原版模型展示。
+
+```json
+"paper_doll0" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "layer" : 22,
+ "offset" : [ 0.0, 0.0 ],
+ "renderer" : "netease_paper_doll_renderer",
+ "init_rot_y": 60.0,
+ "rotation": "gesture_x",
+ "screen_scale": 1.0,
+ "size" : [ 100, 100 ],
+ "type" : "custom",
+ "visible" : true,
+ "enable_scissor_test" : false,
+}
+```
+
+相关字段说明:
+
+| 变量
| 解释 |
+| :---------------------------------: | ------------------------------------------------------------ |
+| renderer | 不能改动该字段 |
+| rotation | 渲染模型的朝向,可选的值有:
none:默认值,没有任何旋转角度
auto:随着时间而旋转
gesture_x:可以通过触控以Y轴旋转, 但需要InputPanel控件配合生效。详情请参考UIDemoMod中的纸娃娃演示示例
freedom_gesture:可以自主选择绕xyz轴旋转, 但需要InputPanel控件配合生效。详情请参考官网Mod 中的NeteasePaperDollDemoMod
|
+| init_rot_y | 初始朝向(Y轴为旋转轴),单位:角度,[RenderPaperDoll](./40-UIAPI文档.md#renderpaperdoll)参数init_rot_y动态设置 |
+| screen_scale | 放缩系数,默认为1,基于UI的size进行放缩,[RenderPaperDoll](./40-UIAPI文档.md#renderpaperdoll)参数scale动态设置 |
+| skeleton_model_name | 骨骼模型名称,默认为空字符,[RenderPaperDoll](./40-UIAPI文档.md#renderpaperdoll)参数skeleton_model_name动态设置 |
+| animation | 骨骼模型动画名称,默认为idle,[RenderPaperDoll](./40-UIAPI文档.md#renderpaperdoll)参数animation动态设置 |
+| animation_looped | 骨骼动画是否循环播放,默认为true,[RenderPaperDoll](./40-UIAPI文档.md#renderpaperdoll)参数animation_looped动态设置 |
+| entity_identifier | 生物标识,如minecraft:cat,默认为空字符,[RenderPaperDoll](./40-UIAPI文档.md#renderpaperdoll)参数entity_identifier动态设置 |
+| enable_scissor_test | 超出父控件区域后是否裁剪,默认为false, 该属性需要父控件开启clips_children属性才能生效,[RenderPaperDoll](https://wiki.bedrock.dev/json-ui/json-ui-documentation.html)|
+
+**接口使用例子以及说明:**
+
+1)渲染玩家或者生物,包括玩家的装备等物品的渲染
+
+```python
+path = '/demoPanel/dollPanel/viewer_panel/paper_doll_panel/paper_doll'
+param = {
+ "entity_id": "-8589934591", # 玩家或生物Id
+ "scale": 0.5, # 放缩系数
+ "render_depth": -50, # 渲染深度,对于玩家默认-50,普通生物-15,该参数可解决UI遮挡剔除问题
+ "init_rot_y": 60, # 初始朝向
+ "molang_dict": {"variable.liedownamount": 1} # molang变量dict,其中key为字符串,value为float类型
+}
+uiNode.RenderPaperDoll(path, param)
+```
+
+2)渲染骨骼模型
+
+```python
+path = '/demoPanel/dollPanel/viewer_panel/paper_doll_panel/paper_doll'
+param = {
+ "skeleton_model_name": "datiangou", # 大天狗模型
+ "scale": 1.0,
+ "animation": "fengxi", # 动画名称
+ "animation_looped": False, # 是否循环播放
+}
+uiNode.RenderPaperDoll(path, param)
+```
+
+3)渲染原版生物模型(不需要生物实例)
+
+```python
+path = '/demoPanel/dollPanel/viewer_panel/paper_doll_panel/paper_doll'
+param = {
+ "scale": 1.0,
+ "entity_identifier": "minecraft:cat", # 渲染猫的原版模型
+ "init_rot_y": 60,
+ "molang_dict": {"variable.state": 2, "variable.liedownamount": 1} # 通过molang变量来调整渲染效果(坐下的猫)
+}
+uiNode.RenderPaperDoll(path, param)
+```
+
+使用注意事项:
+
+1)如果渲染位置不正确,请调整UI的位置;
+
+2)如果渲染模型过大或者过小,请调整UI的大小或者参数scale;
+
+3)如果生物模型被裁剪,请调整参数render_depth或者UI的layer;
+
+4)可以通过使用参数molang_dict来驱动原版模型的渲染,如果发生如下图的渲染错误,需要自行调整molang表达式;
+
+
+
+
+### ItemRenderer
+
+该控件可以用于在ui上显示物品
+
+```json
+"item_renderer0" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "layer" : 1,
+ "offset" : [ 0, 0 ],
+ "property_bag" : {
+ "#item_id_aux" : 131072
+ },
+ "renderer" : "inventory_item_renderer",
+ "size" : [ 100, 100 ],
+ "type" : "custom",
+ "visible" : true
+ },
+```
+| 变量
| 解释 |
+| :----------: | ----------------------------------------------------------- |
+| renderer | 对显示物品自定义的渲染模块,不建议改动该字段 |
+| property_bag | 控件属性信息,#item_id_aux代表物品id,131072代表草方块在游戏内的值 |
+
+下图为ItemRenderer在UI编辑器中的控件表现
+
+
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 道具类型 | 可选原版道具和自定义道具,自定义道具可在关卡编辑器中设置。选中自定义道具时显示道具ID和附加值输入栏,可输入自定的道具ID和附加值。选中原版道具时隐藏道具ID和附加值输入栏,显示道具材质,点击弹出道具材质选择窗口 |
+| 道具材质 | 点击弹出道具材质选择窗口,展示所有原版道具图片,选中后编辑器自动设置该道具对应的道具ID和附加值 |
+| 道具ID和附加值 | 填写设置自定义道具时设置的道具ID和附加值 |
+| 附魔效果 | 勾选后道具表现出现附魔流光效果 |
+
+* 注
+
+道具在游戏中的物品id会根据游戏运行平台、加载Mod数量、游戏大版本等不同会发生变化,因此UI编辑器的ItemRenderer控件静态保存在json中的数据,在游戏中并不一定能正确显示,建议使用UIAPI-SetUiItem来对该控件进行动态设置,详见《UIAPI文档》。
+
+原版道具显示正常。
+
+### ScrollView
+
+该控件是可以滑动的窗口,需要有其他控件附属。
+
+```json
+ "scroll_view0@common.scrolling_panel" : {
+ "$background_nine_slice_buttom" : 0,
+ "$background_nine_slice_left" : 0,
+ "$background_nine_slice_right" : 0,
+ "$background_nine_slice_top" : 0,
+ "$background_nineslice_size" : [ 0, 0, 0, 0 ],
+ "$box_nine_slice_buttom" : 0,
+ "$box_nine_slice_left" : 0,
+ "$box_nine_slice_right" : 0,
+ "$box_nine_slice_top" : 0,
+ "$box_nineslice_size" : [ 0, 0, 0, 0 ],
+ "$is_background_nine_slice" : false,
+ "$is_box_nine_slice" : false,
+ "$is_track_nine_slice" : false,
+ "$scroll_background_image_control" : "fpsBattle.scroll_background_image",
+ "$scroll_background_texture" : "textures/ui/ScrollRail",
+ "$scroll_box_mouse_image_control" : "fpsBattle.scroll_box_image",
+ "$scroll_box_texture" : "textures/ui/newTouchScrollBox",
+ "$scroll_box_touch_image_control" : "fpsBattle.scroll_box_image",
+ "$scroll_track_image_control" : "fpsBattle.scroll_track_image",
+ "$scroll_track_texture" : "textures/ui/ScrollRail",
+ "$scrolling_content" : "fpsBattle.image",
+ "$show_background" : true,
+ "$track_nine_slice_buttom" : 0,
+ "$track_nine_slice_left" : 0,
+ "$track_nine_slice_right" : 0,
+ "$track_nine_slice_top" : 0,
+ "$track_nineslice_size" : [ 0, 0, 0, 0 ],
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "layer" : 9,
+ "offset" : [ 0, 0 ],
+ "size" : [ 100, 80 ],
+ "type" : "scroll_view",
+ "visible" : true
+ },
+```
+
+|变量
| 解释 |
+| ------------------------------ | ----------------------------------------------- |
+| scrolling_content | 这里保存了该滑动窗口的内容 |
+| show_background | 是否显示背景 |
+| $is_background_nine_slice | 设置为true标记背景图片开启九宫格显示的功能 |
+| $background_nine_slice_buttom | 切片距离下边的距离,默认值为0 |
+| $background_nine_slice_left | 切片距离左边的距离,默认值为0 |
+| $background_nine_slice_right | 切片距离右边的距离,默认值为0 |
+| $background_nine_slice_top | 切片距离上边的距离,默认值为0 |
+| $background_nineslice_size | 设置原版九宫属性,相比于旧版九宫属性更符合像素风格。当设置了旧版九宫属性时优先旧版属性。该值支持数组和单个数字,数组代表[left,top,right,down]九宫属性,单个数值代表上下左右均采用该数值作为九宫属性,当四个方向的数值均为0时表示不开启原版九宫 |
+| $is_box_nine_slice | 设置为true标记滑动块图片开启九宫格显示的功能 |
+| $box_nine_slice_buttom | 切片距离下边的距离,默认值为0 |
+| $box_nine_slice_left | 切片距离左边的距离,默认值为0 |
+| $box_nine_slice_right | 切片距离右边的距离,默认值为0 |
+| $box_nine_slice_top | 切片距离上边的距离,默认值为0 |
+| $box_nineslice_size | 设置原版九宫属性,相比于旧版九宫属性更符合像素风格。 |
+| $is_track_nine_slice | 设置为true标记滑轨图片开启九宫格显示的功能 |
+| $track_nine_slice_buttom | 切片距离下边的距离,默认值为0 |
+| $track_nine_slice_left | 切片距离左边的距离,默认值为0 |
+| $track_nine_slice_right | 切片距离右边的距离,默认值为0 |
+| $track_nine_slice_top | 切片距离上边的距离,默认值为0 |
+| $track_nineslice_size | 设置原版九宫属性,相比于旧版九宫属性更符合像素风格。 |
+| $scroll_background_texture | 滚动列表背景图片 |
+| $scroll_box_texture | 滑动块图片 |
+| $scroll_track_texture | 滑轨图片 |
+
+下图为UI编辑器中滚动列表控件的属性编辑面板。
+
+
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 滚动列表-内容 | 对应$scrolling_content字段,只接受其他screen画布中的控件,且被选中控件不可以是文本、图片、滚动列表控件,若被选中控件为panel,那么子节点中含有滚动列表的panel控件同样不可以被选中 |
+| 滚动列表-隐藏背景 | 对应show_background字段 |
+| 滚动列表-使用贴图 | 对应$scroll_background_texture字段,将资源管理窗口中的图片资源拖曳到该图片小窗内赋值,可以在上方的下拉选项栏中重新选回默认图片 |
+| 滚动列表-图片适配 | 普通表示不开启九宫,选中旧版九宫则is_new_nine_slice置true,开启旧版九宫设置,选中原版九宫则开启原版九宫。 |
+| 滚动条滑块-使用贴图 | 对应$scroll_box_texture字段,将资源管理窗口中的图片资源拖曳到该图片小窗内赋值,可以在上方的下拉选项栏中重新选回默认图片 |
+| 滚动条滑块-图片适配 | 普通表示不开启九宫,选中旧版九宫则is_new_nine_slice置true,开启旧版九宫设置,选中原版九宫则开启原版九宫。 |
+| 滚动条背景-使用贴图 | 对应$scroll_track_texture字段,将资源管理窗口中的图片资源拖曳到该图片小窗内赋值,可以在上方的下拉选项栏中重新选回默认图片 |
+| 滚动条背景-图片适配 | 普通表示不开启九宫,选中旧版九宫则is_new_nine_slice置true,开启旧版九宫设置,选中原版九宫则开启原版九宫。 |
+
+滚动列表的内容以scrolling_content为引用可以由我们自定义,但是承载scrolling_content的父控件scrolling_view_port的size如不经修改默认为["100%","100%"],即与我们的滚动列表定的大小相同,而可滚动区域的判定会取scrolling_content的size和其父控件scrolling_view_port作比较,两者大小之差即为可拖动范围。而我们UI控件的size是不会根据其子控件的size做到动态完全覆盖,因此如果我们的scrolling_content的大小是动态变化的,需要我们在代码中手动设置scrolling_content的size,详见UI-API[SetSize](./40-UIAPI文档.md#SetSize)
+
+而对于scrolling_content的绝对路径,一共有以下两种,可以通过UI-API[GetAllChildrenPath](./40-UIAPI文档.md#GetAllChildrenPath)清楚的看到。
+
+```python
+scroll_view_path = "/scroll_view0"
+touch_path = scroll_view_path + "/scroll_touch/scroll_view/panel/background_and_viewport/scrolling_view_port/scrolling_content"
+mouse_path = scroll_view_path + "/scroll_mouse/scroll_view/stack_panel/background_and_viewport/scrolling_view_port/scrolling_content"
+```
+
+我们知道在PC端进行游戏时,按F11可以切换鼠标控制和遥感控制两种操作模式,而在手机端进行游戏时只有遥感控制这一种操作模式。不同的操作模式,scroll_view的scrolling_content会生成在不同的路径下,遥感模式使用touch_path获得scrolling_content的绝对路径,而鼠标控制使用mouse_path获得。
+
+### Grid
+
+Grid组件属于网格型的排列,可以依附在滚动条中,用来实现背包等功能。
+
+```json
+ "grid0" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "collection_name" : "test_grid",
+ "grid_dimensions" : [ 2, 2 ],
+ "grid_item_template" : "fpsBattle.netease_editor_template_image",
+ "grid_rescaling_type" : "none",
+ "maximum_grid_items" : 0,
+ "layer" : 1,
+ "offset" : [ 0, 0 ],
+ "size" : [ 200, 200 ],
+ "type" : "grid",
+ "visible" : true
+ },
+ "netease_editor_template_image" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "layer" : 1,
+ "offset" : [ 0, 0 ],
+ "size" : [ "50%", "50%" ],
+ "texture" : "textures/netease/common/image/default",
+ "type" : "image",
+ "uv" : [ 0, 0 ],
+ "uv_size" : [ 107, 107 ],
+ "visible" : true
+ },
+```
+
+| 变量
| 解释 |
+| ----------------------------------------------------------- | ---------------------- |
+|grid_rescaling_type | 网格调节方式,目前可取值范围["none","horizontal"],当取值none是grid_dimensions生效,取值horizontal时maximum_grid_items生效|
+|maximum_grid_items | 最大格子数量|
+| grid_dimensions | 初始值大小2X2 |
+|grid_item_template | 被当作生成网格单元的控件模板|
+
+下图为UI编辑器中网格控件的属性编辑面板。
+
+
+
+
+
+
+
+|变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 集合名 | 对应collection_name字段 |
+| 内容 | 对应grid_item_template字段,只接受其他screen画布中的控件,且被选中控件不可以是滚动列表、网格控件,若被选中控件为panel,那么子节点中含有滚动列表、网格的panel控件同样不可以被选中 |
+| 网格调节方式 | 对应grid_rescaling_type字段,配置网格模式时,格子固定生成m * n个格子;配置水平模式时,格子按网格最大数量水平连续生成若干格子,一般搭配控件尺寸Y勾选"适应"使用 |
+| 网格规模 | 对应grid_dimensions字段 |
+| 网格最大数量 | 对应maximum_grid_items字段 |
+
+**注:**
+
+1. grid是在renderer渲染的时候才创建,所以只要没有显示过该界面,调用GetChildrenName和GetAllChildrenPath都无法获取到grid的子节点信息。如果要初始化grid的信息必须在UI渲染结束后一帧再来调用这两个接口获取子节点信息并初始化
+
+2. 当grid控件与ScrollView一起使用时,如果grid控件中设置单个UI元素(例如按钮)的数目值超过当前grid控件显示的最大数目时,需要配合scrollview一同使用。当scrollview拉动时,由于MC内置逻辑实现方式,grid控件会将没有渲染必要的格子剔除并缓存以节约渲染成本,并在其恢复渲染必要时添加回grid的子节点列表中。在这一过程中,每个UI元素都不一定会在其原本的位置,从而导致内容错位。此时需要开发者监听**GridComponentSizeChangedClientEvent**事件,当收到事件后,需要通过**GetAllChildrenPath**接口获取grid中返回的所有UI元素的路径值,这些路径值尾部包含该UI元素在grid中的索引数目。依据索引数目,mod开发者将物品背包或者类似的显示所需的UI信息值依次设置到grid中的子元素中。建议开发者采用MVC模式控制grid中的内容显示:M代表需要显示的数据信息容器,V代表grid容器和容器中包含的子UI控件,C代表控制组装的UI元素的函数或者模块,并由初始化和监听**GridComponentSizeChangedClientEvent**事件触发驱动。详情请参考UIDemoMod中的滚动列表演示示例。
+
+3. grid控件不建议使用其子控件路径对其动态生成的格子控件直接进行SetVisible等操作,因为在每次界面刷新时grid控件会对所有的格子做一次数据更新,更新的过程中会强制将格子可见性置True。如果有需要对格子进行操作,可以使用数据绑定的方式,如下代码和json。需要注意的是在数据绑定的回调函数中需要明确grid本身是否可见,否则会造成grid子节点控件的可见性数据异常,从而影响界面操作逻辑。
+
+```json
+ "grid1" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "collection_name" : "gridDemo",
+ "grid_dimensions" : [ 2, 2 ],
+ "grid_item_template" : "UIDemo.scrollviewBtn0",
+ "layer" : 39,
+ "offset" : [ 0, 0 ],
+ "size" : [ 200, 200 ],
+ "type" : "grid",
+ "visible" : true
+ },
+ "scrollviewBtn0@UIDemo.scrollviewBtn": {
+ "bindings" : [
+ {
+ "binding_collection_name" : "gridDemo",
+ "binding_condition" : "always",
+ "binding_name" : "#UIDemo.visible",
+ "binding_name_override" : "#visible",
+ "binding_type" : "collection"
+ }
+ ],
+ "visible" : "#UIDemo.visible"
+ },
+```
+
+```python
+class UIDemoScreen(ScreenNode):
+ def __init__(self, namespace, name, param):
+ self.demoGridControl = None
+ ......
+
+ def Create(self):
+ self.demoGridControl = self.GetBaseUIControl("/grid1")
+ ......
+
+ @ViewBinder.binding_collection(ViewBinder.BF_BindBool, "gridDemo", "#UIDemo.visible")
+ def GridItemVisible(self, index):
+ return index < self.showNum and self.demoGridControl.GetVisible()
+```
+
+可以看到grid格子的visible属性我们以"#UIDemo.visible"设置,而该字段经由bindings字段的设置取代了系统变量#visible,再在python代码中绑定了"#UIDemo.visible"字段的函数更新回调。因此每个格子的visible属性就会读取python函数的返回值进行动态的设置。有关于数据绑定详情可见[UI绑定和返回](#UI绑定和返回)
+
+### ProgressBar
+
+ProgressBar进度条控件,用于百分比显示进度
+```json
+ "progress_bar0" : {
+ "$clip_direction" : "left",
+ "$clip_ratio" : 0.0,
+ "$is_new_nine_slice" : false,
+ "$nine_slice_buttom" : 0,
+ "$nine_slice_left" : 0,
+ "$nine_slice_right" : 0,
+ "$nine_slice_top" : 0,
+ "$nineslice_size" : [ 0, 0, 0, 0 ],
+ "$progress_bar_empty_texture" : "textures/ui/empty_progress_bar",
+ "$progress_bar_filled_texture" : "textures/ui/filled_progress_bar",
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "controls" : [
+ {
+ "empty_progress_bar@fpsBattle.empty_progress_bar" : {}
+ },
+ {
+ "filled_progress_bar@fpsBattle.filled_progress_bar" : {}
+ }
+ ],
+ "layer" : 8,
+ "offset" : [ 0, 0 ],
+ "size" : [ 100, 10 ],
+ "type" : "panel",
+ "visible" : true
+ },
+ "empty_progress_bar" : {
+ "is_new_nine_slice" : "$is_new_nine_slice",
+ "layer" : 1,
+ "nine_slice_buttom" : "$nine_slice_buttom",
+ "nine_slice_left" : "$nine_slice_left",
+ "nine_slice_right" : "$nine_slice_right",
+ "nine_slice_top" : "$nine_slice_top",
+ "texture" : "$progress_bar_empty_texture",
+ "type" : "image"
+ },
+ "filled_progress_bar" : {
+ "clip_direction" : "$clip_direction",
+ "clip_ratio" : "$clip_ratio",
+ "is_new_nine_slice" : "$is_new_nine_slice",
+ "layer" : 2,
+ "nine_slice_buttom" : "$nine_slice_buttom",
+ "nine_slice_left" : "$nine_slice_left",
+ "nine_slice_right" : "$nine_slice_right",
+ "nine_slice_top" : "$nine_slice_top",
+ "texture" : "$progress_bar_filled_texture",
+ "type" : "image"
+ },
+```
+
+| 变量
| 解释 |
+| :-----------------------------------------------------------: | ---------------------- |
+| $progress_bar_empty_texture | 进度条背景图片 |
+| $progress_bar_filled_texture | 进度条前景图片 |
+| $clip_direction | 进度条加载方向,目前支持["left", "right", "up", "down", "center"] |
+|grid_item_template | 被当作生成网格单元的控件模板|
+| $is_new_nine_slice | 设置为true标记该图片开启九宫格显示的功能,从Json结构里可以看出两张图片的九宫设置用的是同一个 |
+| $nine_slice_bottom | 切片距离下边的距离,默认值为0 |
+| $nine_slice_left | 切片距离左边的距离,默认值为0 |
+| $nine_slice_right | 切片距离右边的距离,默认值为0 |
+| $nine_slice_top | 切片距离上边的距离,默认值为0 |
+| $nineslice_size | 设置原版九宫属性,相比于旧版九宫属性更符合像素风格。当设置了旧版九宫属性时优先旧版属性。该值支持数组和单个数字,数组代表[left,top,right,down]九宫属性,单个数值代表上下左右均采用该数值作为九宫属性,当四个方向的数值均为0时表示不开启原版九宫 |
+
+下图为UI编辑器中进度条控件的属性编辑面板。
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 使用贴图 | 填充对应$progress_bar_filled_texture字段,空白对应$progress_bar_empty_texture,将资源管理窗口中的图片资源拖曳到该图片小窗内赋值,可以在上方的下拉选项栏中重新选回默认图片 |
+| 图片适配 | 普通表示不开启九宫,选中旧版九宫则is_new_nine_slice置true,开启旧版九宫设置,选中原版九宫则开启原版九宫。 |
+
+### SwitchToggle
+
+开关控件,用于两个状态之间的切换
+```json
+"switch_toggle0@common_toggles.switch_toggle_collection" : {
+ "$default_texture" : "textures/ui/toggle_off",
+ "$hover_texture" : "textures/ui/toggle_on",
+ "$pressed_no_hover_texture" : "textures/ui/toggle_on_hover",
+ "$pressed_texture" : "textures/ui/toggle_off_hover",
+ "$toggle_name" : "#fpsBattle.toggle_name",
+ "$toggle_state_binding_name" : "#fpsBattle.toggle_state",
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "bindings" : [
+ {
+ "binding_collection_name" : "",
+ "binding_condition" : "always_when_visible",
+ "binding_type" : "collection_details"
+ }
+ ],
+ "layer" : 6,
+ "offset" : [ 0, 0 ],
+ "size" : [ 100, 100 ],
+ "type" : "panel",
+ "visible" : true
+ },
+```
+
+| 变量
| 解释 |
+| :-----------------------------------------------------------: | ---------------------- |
+| $default_texture | 开关默认图片 |
+| $hover_texture | 开关鼠标悬浮状态图片 |
+| $pressed_texture | 开关按下图片 |
+| $pressed_no_hover_texture | 开关鼠标悬浮状态按下图片 |
+| $toggle_name | 获取输入到的信息,监听了BF_ToggleChanged的函数,类似文本输入框 |
+|$toggle_state_binding_name | 开关控件显示toggle_state中返回的内容,这与上面形成了一个双向绑定,类似文本输入框|
+
+* 注1
+
+```python
+class TestScreen(ScreenNode):
+ def __init__(self, namespace, name, param):
+ ScreenNode.__init__(self, namespace, name, param)
+ self.currentToggleShow = True
+
+ @ViewBinder.binding(ViewBinder.BF_ToggleChanged)
+ def OnDemoToggleChangeCallback(self,args):
+ self.currentToggleShow = args["state"]
+ return ViewRequest.Refresh
+
+ @ViewBinder.binding(ViewBinder.BF_BindBool)
+ def ReturnToggleState(self):
+ return self.currentToggleShow
+
+```
+
+下图为UI编辑器中开关控件的属性编辑面板。
+
+
+
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| 使用贴图 | 滑轨开对应$hover_texture字段,滑轨关对应$default_texture,滑轨开时按下对应$pressed_no_hover_texture字段,滑轨关时按下对应$pressed_texture,将资源管理窗口中的图片资源拖曳到该图片小窗内赋值,可以在上方的下拉选项栏中重新选回默认图片 |
+| 绑定开关交互 | 对应$toggle_name字段 |
+| 绑定开关内容 | 对应$toggle_state_binding_name字段 |
+
+### Slider
+
+滑动条控件,用于拖动设置进度或百分比。
+
+```json
+"slider0@common.slider": {
+ "$slider_tts_text_value": "#netease_tts_text_value",
+ "$slider_name": "#UIDemoScreen.OnDemoSliderChange",
+ "$slider_value_binding_name":"#UIDemoScreen.ReturnSliderValue",
+ "$slider_steps_binding_name": "#UIDemoScreen.ReturnSliderStep",
+ "$background_default_control": "common.slider_background",
+ "$progress_default_control": "common.slider_progress",
+ "$progress_default_clip_direction": "left",
+ "$background_hover_control": "common.slider_background_hover",
+ "$progress_hover_control": "common.slider_progress_hover",
+ "$progress_hover_clip_direction": "left",
+ "$slider_direction": "horizontal",
+ "$slider_box_layout": "common.slider_button_layout",
+ "$slider_box_hover_layout": "common.slider_button_hover_layout",
+ "$slider_box_locked_layout": "common.slider_button_locked_layout",
+ "$slider_box_indent_layout": "common.slider_button_indent_layout",
+ "$slider_box_size": [ 10, 16 ],
+ "size": [ 100, 10 ],
+ "offset": [ 0, 0 ],
+ "$slider_step_factory_control_ids": {
+ "slider_step": "@common.slider_step",
+ "slider_step_hover": "@common.slider_step_hover",
+ "slider_step_progress": "@common.slider_step_progress",
+ "slider_step_progress_hover": "@common.slider_step_progress_hover"
+ },
+ }
+```
+
+| 变量
| 解释 |
+| :---------------------------------: | ------------------------------------------------------------ |
+| $slider_tts_text_value | 开发者无需关注,但为必填属性,建议值为 "#netease_tts_text_value"(只要是以"#"开头的字符串值即可) |
+| $slider_name | 获取滑动条的信息,监听了BF_SliderChanged的函数OnDemoSliderChange,会在滑动条值改变时调到该函数,可参考下面的**注1** |
+| $slider_value_binding_name | 滑动条显示ReturnSliderValue中返回的值,这与上面形成了一个双向绑定,该值必须是float类型,可参考下面的**注1** |
+| $slider_steps_binding_name | 滑动条总步长,由ReturnSliderStep函数中返回的值进行设置。当设置大于1时该滑动条为固定格类型,类似设置面板中能见度设置,滑动范围为0-总步长;当设置小于等于1时该滑动条为百分比类型,类似设置面板中音量设置,滑动范围为0-1。 |
+| $background_default_control | 滑动条背景默认情况下显示的控件,须为image |
+| $progress_default_control | 滑动条前景默认情况下显示的控件,会根据当前进度进行裁剪,须为image |
+| $progress_default_clip_direction | 滑动条前景默认情况下被裁剪方向, 可填"left", "right", "up", "down", "center" |
+| $background_hover_control | 滑动条背景在鼠标悬浮及按下情况下显示的控件,须为image |
+| $progress_hover_control | 滑动条前景在鼠标悬浮及按下情况下显示的控件,会根据当前进度进行裁剪,须为image |
+| $progress_hover_clip_direction | 滑动条前景在鼠标悬浮及按下情况下被裁剪方向, 可填"left", "right", "up", "down", "center" |
+| $slider_direction | 滑动条方向,可填"horizontal","vertical"和"none",默认为"horizontal"。注意当滑动条方向改变时不会自动改变滑动条前景默认情况和悬浮及按下情况下被裁减的方向,如有需要请修改$progress_default_clip_direction和$progress_hover_clip_direction属性 |
+| $slider_box_layout | 滑动格默认情况下显示的控件 |
+| $slider_box_hover_layout | 滑动格鼠标悬浮情况下显示的控件 |
+| $slider_box_locked_layout | 滑动格鼠标不可用情况下显示的控件 |
+| $slider_box_indent_layout | 滑动格按下情况下显示的控件 |
+| $slider_box_size | 滑动格大小 |
+| $slider_step_factory_control_ids | 当滑动条为固定格类型滑动条时,滑动条会生成等距的分隔线来标明单步滑动的位置。而这一系列的分割线就是由$slider_step_factory_control_ids属性内的各个控件控制的。 |
+| slider_step | 背景分隔线默认情况下显示的控件 |
+| slider_step_hover | 背景分隔线鼠标悬浮情况下显示的控件 |
+| slider_step_progress | 前景分隔线默认情况下显示的控件 |
+| slider_step_progress_hover | 前景分隔线鼠标悬浮情况下显示的控件 |
+
+* 注1
+
+```python
+class UIDemoScreen(ScreenNode):
+ def __init__(self, namespace, name, param):
+ ScreenNode.__init__(self, namespace, name, param)
+ self.sliderPercentValue = 0.5 # 百分比值
+ # self.sliderAbsValue = 5.0 # 固定值
+
+ @ViewBinder.binding(ViewBinder.BF_SliderChanged | ViewBinder.BF_SliderFinished)
+ def OnDemoSliderChange(self, value, isFinish, _unused):
+ self.sliderPercentValue = value # 百分比类型滑动条保存值
+ # self.sliderAbsValue = value # 固定格类型滑动条保存值
+ return ViewRequest.Refresh
+
+ @ViewBinder.binding(ViewBinder.BF_BindFloat)
+ def ReturnSliderValue(self):
+ return self.sliderPercentValue # 百分比类型滑动条返回值
+ # return self.sliderAbsValue # 固定格类型滑动条返回值
+
+ @ViewBinder.binding(ViewBinder.BF_BindInt)
+ def ReturnSliderStep(self):
+ return 1 # 百分比类型滑动条
+ # return 10 # 固定格类型滑动条
+```
+
+下图为Slider在游戏中的控件表现
+
+
+
+
+
+### SelectionWheel
+
+该控件表现为一个轮盘选择UI,为了开发方便,可继承common_selection_wheels命名空间下的base_selection_wheel控件,[Demo](../20-玩法开发/13-模组SDK编程/60-Demo示例.md#UIDemoMod)中表现如下。
+
+
+
+该控件结构稍微复杂,本质上是一堆控件的组合,直接看json不够直观。总体是分为两部分,一部分控件是不管鼠标怎么移动,都不影响那部分控件的可见性(visible属性),比如这些ItemRenderer以及中间的Label。
+
+
+
+而另一部分控件根据鼠标不同的位置,确定显示哪个控件,比如这个轮盘本身,本质上是一堆带不同选中效果的图片控件。
+
+
+
+Demo中显示的轮盘控件是一个圆环形状,这是因为计算鼠标位置映射到哪个控件的时候是按照鼠标落在圆环的哪个扇区决定的,这是比较精确的显示,但实际上是可以用相似的形状去贴近这个圆环的,比如如果圆环切分的不够多,均分成6个,就可以用下面的形状去近似。
+
+这是轮盘控件近似的映射区域。
+
+
+
+这是轮盘控件实际的映射区域。
+
+
+
+了解了这个控件结构后,制作自己的轮盘控件需要确定的就是弄清楚鼠标移到哪个区域对应哪一个图片。实际上轮盘的映射规则并不明显,这里提供一个python函数,计算出 index == 0 的区域在极坐标系中的角度范围,下图是极坐标系示意图。
+
+
+
+
+index == 0 的区域在极坐标系中的坐标范围计算
+
+```python
+# 获取第一个item的角度范围
+def getFirstItemRange(itemNum):
+ perItemSize = 360 / itemNum
+ offset = 180 - perItemSize / 2
+ rangeStart = -(0 - offset)
+ rangeEnd = -(perItemSize - offset)
+ print(rangeStart, rangeEnd)
+ return rangeStart, perItemSize
+```
+
+
+为了方便开发者更快地确定不同数量叶片的情况,[UIDemoMod](../20-玩法开发/13-模组SDK编程/60-Demo示例.md#UIDemoMod) 中有3-10个叶片的图片示例(外直径400,内直径200,路径为 "UIDemoMod/uidemoResourcePack/textures/ui/SelectionWheel/samples"),后续UI编辑器中将会集成对应的工具生成这些图片。
+
+
+
+值得注意的是,生成的图片中,有一张图片是需要作为这个轮盘的默认状态(也就是鼠标还未移到控件上的时候控件显示的状态),这张图片所对应的控件,就是轮盘的默认状态(也叫默认索引)。
+
+有了上面的理解,json中的属性就比较清晰,我们以下面的json为例说明。
+
+```json
+{
+ "namespace": "custom_wheel_namespace",
+ "wheel_state" : {
+ "type" : "image"
+ },
+ "custom_selection_wheel_content":{
+ "type": "panel",
+ "controls": [
+ {
+ "state_default@custom_wheel_namespace.wheel_state": {
+ "texture" : "textures/ui/circle/custom_wheel_selection_default"
+ }
+ },
+ {
+ "state_0@custom_wheel_namespace.wheel_state": {
+ "texture" : "textures/ui/circle/custom_wheel_selection_0"
+ }
+ },
+ {
+ "state_1@custom_wheel_namespace.wheel_state": {
+ "texture" : "textures/ui/circle/custom_wheel_selection_1"
+ }
+ },
+ {
+ "state_2@custom_wheel_namespace.wheel_state": {
+ "texture" : "textures/ui/circle/custom_wheel_selection_2"
+ }
+ },
+ {
+ "state_3@custom_wheel_namespace.wheel_state": {
+ "texture" : "textures/ui/circle/custom_wheel_selection_3"
+ }
+ },
+ {
+ "state_4@custom_wheel_namespace.wheel_state": {
+ "texture" : "textures/ui/circle/custom_wheel_selection_4"
+ }
+ },
+ {
+ "state_5@custom_wheel_namespace.wheel_state": {
+ "texture" : "textures/ui/circle/custom_wheel_selection_5"
+ }
+ }
+ ]
+ },
+ "custom_selection_wheel@common_selection_wheels.base_selection_wheel" : {
+ "inner_radius" : 0.35,
+ "outer_radius" : 1.0,
+ "size" : [ 200, 200 ],
+ "slice_count" : 6,
+ "initial_button_slice": -1,
+ "$content": "custom_wheel_namespace.custom_selection_wheel_content",
+ "state_controls" : [
+ "state_default",
+ "state_0",
+ "state_1",
+ "state_2",
+ "state_3",
+ "state_4",
+ "state_5"
+ ]
+ }
+}
+
+```
+
+| 属性
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| slice_count | 轮盘切片的数量,如上图显示,这个轮盘有6个选择,所以将圆环平均切成了6份|
+| outer_radius | 轮盘的外直径**系数**,该值是一个**比例值**,默认为1.0,**不建议修改该值**。 该比例值是用来计算轮盘响应的外直径的有多大,轮盘的外直径 = outer_radius * min(width, height),其中 width,height分别轮盘控件的宽高(控件size属性值)|
+| inner_radius | 轮盘的内直径系数,默认为0.0。 |
+| state_controls | 上文所说的那一部分跟随鼠标位置变化的控件的名称, 这些控件必须是轮盘的子控件(不一定是直接子控件,可以是孙子或者更往下的子控件),在轮盘中,每个状态控件都有一个索引 index,默认状态控件的 index = -1,其他状态的index范围为 [0, slice_count - 1] ,需要注意的是,第一个控件必须是作为默认状态控件。|
+| initial_button_slice | 轮盘刚创建出来时所处的索引,默认值为-1|
+
+
+| 变量
| 解释 |
+| :------------: | ---------------------------------------------------- |
+| $content | 轮盘的内容控件,本质是一个[控件变量](15-变量引用和万用控件),请将所有子控件都声明到该控件中|
+
+
+对于上面所出现的三种轮盘,[UIDemo](../20-玩法开发/13-模组SDK编程/60-Demo示例.md#UIDemoMod) 中都涵盖了。
+
+
+* 注1
+
+目前轮盘控件在SDK中支持的回调仅有两个:hover的回调(通过SetHoverCallback接口设置回调)以及SetTouchUpCallback接口设置回调),这些事件是在SelectionWheel控件的区域内发出(注意这个区域并不是可见的圆环区域,而是方形的区域,如下图所示)。
+
+hover事件的触发本质上是与鼠标悬浮相关,在PC模式中,当鼠标从控件方形区域外移动到方形区域内时,会触发一次hover事件,从方形区域内移到方形区域外也会触发一次hover事件,当选中轮盘并且轮盘的选中索引发生了改变(index值改变)也会触发一次hover事件。
+而在PE模式下,鼠标是模拟出来的,鼠标的悬浮是通过按着鼠标模拟点进行拖动或者点击某个位置来模拟的,因此hover事件触发逻辑其实和PC模式是一致的。
+
+鼠标按下后弹起的事件则无论是PC还是PE都是一致的,是在控件方形区域内检测到鼠标按下后弹起都会触发(无论index是否改变了)。
+
+
+
+
+
+
+
+* 注2
+
+推荐轮盘所在的Screen用PushScreen的方式创建,因为PushScreen加载的UI是会对该UI中存在的控件中的贴图资源进行强制加载(如果这个贴图从未显示过的话),考虑到轮盘的贴图资源比较多(6切片的轮盘如果用CreateUI的方式创建轮盘,并且这些轮盘贴图从未显示过,那么选择轮盘的时候就会产生闪烁现象,原因就是第一次显示的贴图资源会动态加载,而动态加载是需要一定时间的。如果想彻底解决这类加载问题,详见 贴图预加载 。
+
+
+
+
+
+* 注3
+
+
+如果希望用手柄对轮盘进行控制,需要在轮盘所在的Screen上声明属性 "gamepad_cursor_deflection_mode" 为 true,具体可见下方的类似json代码
+
+
+```json
+ "main" : {
+ "controls" : [],
+ "type" : "screen",
+ "gamepad_cursor_deflection_mode": true
+ },
+```
+
+
+
+### NeteaseComboBox
+
+网易版单选下拉框,可以在给定的选项中进行选择。
+
+```json
+"comboBoxPanel@combo_box.comboBoxPanel" : {
+ "$content_size":[ "100.0%+0.0px", 100 ],
+ "$item_size":[ "100.0%+0.0px", "10.0%x+0.0px" ],
+ "$title_label":"combo_box.titleLabel",
+ "$content_label":"combo_box.label",
+ "$title_down_image":"combo_box.dropdownImage",
+ "$title_up_image":"combo_box.dropupImage",
+ "$default_title_texture" : "textures/ui/button_borderless_light",
+ "$hover_title_texture" : "textures/ui/button_borderless_lighthover",
+ "$pressed_title_texture" : "textures/ui/button_borderless_lightpressed",
+ "$title_nineslice_size|default" : [ 0.0, 0.0, 0.0, 0.0 ],
+ "$default_item_texture" : "textures/ui/button_borderless_light",
+ "$hover_item_texture" : "textures/ui/button_borderless_lighthover",
+ "$pressed_item_texture" : "textures/ui/button_borderless_lightpressed",
+ "$item_nineslice_size|default" : [ 0.0, 0.0, 0.0, 0.0 ],
+ "$scroll_background_texture" : "textures/ui/ScrollRail",
+ "alpha" : 1.0,
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "clip_offset" : [ 0, 0 ],
+ "clips_children" : false,
+ "enabled" : true,
+ "layer" : 0,
+ "max_size" : [ 0, 0 ],
+ "min_size" : [ 0, 0 ],
+ "offset" : [ 0.0, 0.0 ],
+ "priority" : 0,
+ "propagate_alpha" : false,
+ "size" : [ 120, 20 ],
+ "type" : "panel",
+ "visible" : true
+ }
+```
+
+
+| 变量
| 解释 |
+| :---------------------------------: | ------------------------------------------------------------ |
+| $content_size | 下拉框整个弹出框的大小,默认值为[ "100.0%+0.0px", 100 ] |
+| $item_size | 下拉框单个下拉项相对于整个弹出框的大小,默认值为[ "100.0%+0.0px", "10.0%x+0.0px" ] |
+| $title_label | 下拉框标题文本控件引用,默认值为"combo_box.titleLabel" |
+| $content_label | 下拉框单个下拉项文本控件引用,默认值为"combo_box.label"。 |
+| $title_down_image | 下拉框未展开弹出框时标题右侧小图标控件引用,默认值为"combo_box.dropdownImage" |
+| $title_up_image | 下拉框展开弹出框时标题右侧小图标控件引用,默认值为"combo_box.dropupImage" |
+| $default_title_texture | 下拉框标题默认状态图片路径,默认值为"textures/ui/button_borderless_light" |
+| $hover_title_texture | 下拉框标题悬浮状态图片路径,默认值为"textures/ui/button_borderless_lighthover" |
+| $pressed_title_texture | 下拉框标题按下状态图片路径,默认值为"textures/ui/button_borderless_lightpressed" |
+| $default_item_texture | 下拉框单个下拉项默认状态图片路径,默认值为"textures/ui/button_borderless_light" |
+| $hover_item_texture | 下拉框单个下拉项悬浮状态图片路径,默认值为"textures/ui/button_borderless_lighthover" |
+| $pressed_item_texture | 下拉框单个下拉项按下状态图片路径,默认值为"textures/ui/button_borderless_lightpressed" |
+| $title_nineslice_size | 下拉框标题图片九宫切图,默认值为[ 0.0, 0.0, 0.0, 0.0 ] |
+| $item_nineslice_size | 下拉框单个下拉项图片九宫切图,默认值为[ 0.0, 0.0, 0.0, 0.0 ] |
+| $scroll_background_texture | 下拉框弹出框背景图片,默认值为"textures/ui/ScrollRail" |
+
+向该下拉框添加内容、注册选中回调等操作均需要调用UIAPI,详情请参考 NeteaseComboBoxUIControl
+
+下图为网易版单选下拉框在游戏中的控件表现
+
+
+
+UI编辑器暂时不支持编辑
+
+### MiniMap
+
+该控件可以在UI上画小地图,需要继承mini_map命名空间下的mini_map_wrapper控件。
+
+其中官方封装了地图界面基类 MiniMapBaseScreen 供开发者扩展。
+
+```json
+"mainPanel@mini_map.mini_map_wrapper" : {
+ "anchor_from" : "top_right",
+ "anchor_to" : "top_right",
+ "layer" : 1,
+ "offset" : [ -10.0, 10.0 ],
+ "$enable_live_update": false,
+ "$live_update_interval": 5,
+ "$use_default_face_icon": true,
+ "$face_icon_size": [4,4],
+ "$face_icon_bg_color": "white",
+ "$highest_y": 0
+ // 如果希望小地图能够被裁剪,请继承后修改controls如下:
+ "controls":[
+ {
+ "mini_map_bg@mini_map.mini_map_bg": {}
+ },
+ {
+ "netease_mini_map@mini_map.netease_mini_map": {
+ "allow_clipping":true,
+ "enable_scissor_test" : true
+ }
+ },
+ {
+ "icon@mini_map.icon": {}
+ },
+ {
+ "head_lbl@mini_map.head_label": {}
+ },
+ {
+ "text_lbl@mini_map.text_label": {}
+ }
+ ]
+}
+```
+
+相关字段说明:
+
+| 变量
| 解释 |
+| :---------------------------------: | ------------------------------------------------------------ |
+| $enable_live_update | 是否开启方块变化更新到小地图上(简称“热更”) |
+| $live_update_interval | “热更”的时间间隔,单位秒(s),不建议间隔太小,更新太频繁在低端机器可能有性能问题 |
+| $use_default_face_icon | 本地玩家是否使用默认的脸部作为标记icon |
+| $face_icon_size | 脸部icon的大小,默认为[4,4] |
+| $face_icon_bg_color | 标记icon底部背景颜色,默认为白色 |
+| $highest_y | 绘制的高度最大值,默认当前区块的最大值,当该值为-1时,表示最大高度值为玩家当前位置所在的高度 |
+| enable_scissor_test | 超出父控件区域后是否裁剪,默认为false, [enable_scissor_test](https://wiki.bedrock.dev/json-ui/json-ui-documentation.html)|
+
+### **颜色渐变控件(gradientRenderer)**
+
+该控件可以用于在ui上绘制渐变颜色
+
+```json
+"gradient": {
+ "color1": [1, 0, 1, 1],
+ "color2": [0, 0, 1, 1],
+ "gradient_direction": "vertical",
+ "renderer": "gradient_renderer",
+ "type": "custom"
+}
+```
+
+| 变量 | 解释 |
+| ------------------ | -------------------------------------- |
+| color1 | 渐变起始颜色的RGBA |
+| color2 | 渐变结束颜色的RGBA |
+| gradient_direction | 渐变方向,可选"vertical"或"horizontal" |
+| renderer | 需要指定为gradient_renderer |
+| type | 需要指定为custom |
+
+
+
+下图为UI编辑器中颜色渐变控件的属性编辑面板
+
+
+
+| 变量 | 解释 |
+| ------------ | ------------------------------------------------------ |
+| 渐变起始颜色 | 对应color1字段,支持调整不透明度(Alpha通道) |
+| 渐变结束颜色 | 对应color2字段,支持调整不透明度(Alpha通道) |
+| 渐变方向 | 对应gradient_direction字段,可选“垂直排布”或“水平排布” |
+
+### 继承控件
+
+继承控件允许开发者选择并继承目标控件,继承成功后该控件拥有目标控件的所有属性,并可以重写其中任何一个属性的数据。
+
+#### 继承写法简述
+
+在界面json文件所有的编写技巧中,最为好用和灵活的功能当属继承写法。当界面中有一个需求,需要将若干个相同的控件按序排列,除了可以通过复制粘贴出若干个控件副本外,继承模板控件并只修改我们所需要修改的属性,其他的属性依然沿用模板控件的数据才是最便捷,也是最漂亮的写法。下面我们从一个简单的例子入手熟悉继承的写法,从例子中我们可以快速熟悉继承技巧。
+
+```json
+{
+ "main" : {
+ "absorbs_input" : true,
+ "always_accepts_input" : false,
+ "controls" : [
+ {
+ "label0@myInherit.label0" : {}
+ },
+ {
+ "inheritor0@myInherit.label0" : {
+ "offset" : [ 10.0, 0.0 ]
+ }
+ },
+ {
+ "inheritor1@myInherit.label0" : {
+ "offset" : [ 20.0, 0.0 ]
+ }
+ }
+ ],
+ "force_render_below" : false,
+ "is_showing_menu" : true,
+ "render_game_behind" : true,
+ "render_only_when_topmost" : true,
+ "should_steal_mouse" : false,
+ "type" : "screen"
+ },
+ "label0" : {
+ "anchor_from" : "center",
+ "anchor_to" : "center",
+ "color" : [ 1, 1, 1 ],
+ "font_scale_factor" : 1.0,
+ "font_size" : "normal",
+ "font_type" : "smooth",
+ "layer" : 0,
+ "offset" : [ 0, 0 ],
+ "shadow" : false,
+ "size" : [ 100, 100 ],
+ "text" : "Hello World!",
+ "text_alignment" : "center",
+ "type" : "label",
+ "visible" : true
+ },
+ "namespace" : "myInherit"
+}
+```
+
+该段json描述了在main画布中创建了一个文本控件label0,并使继承控件inherit0和inherit1均继承了label0控件,并重写了offset属性,在场景中就得到了三个文本控件,这三个文本控件除了在场景中的位置因为重写而不同外,其他的属性一模一样。但是要注意的是,可以被继承的控件必须写在json文件的最外层,和main处在同一层级,即一个命名空间下有且仅有一个该名称的控件,满足该条件的控件才可以被继承。
+
+#### UI编辑器中的继承
+
+新版的UI编辑器对继承提供了更可视化的方法,请参考[继承和自定义控件](./13-继承和自定义控件.md)。
+
+## Python编写说明
+
+### 必要的属性
+
+```python
+import mod.client.extraClientApi as clientApi
+ViewBinder = clientApi.GetViewBinderCls()
+ViewRequest = clientApi.GetViewViewRequestCls()
+ScreenNode = clientApi.GetScreenNodeCls()
+```
+| 变量 | 解释 |
+| :------------: | :----------------------------------- |
+| extraClientApi | 我们开发的Client端Api接口文件 |
+| ViewBinder | 用于绑定回调函数的类型和响应的方法 |
+| ViewRequest | 用于返回绑定函数的返回值 |
+| ScreenNode | UI的基类,用于继承基类的方法和UI管理 |
+
+### UI界面初始化
+
+```python
+class TestScreen(ScreenNode):
+ def __init__(self, namespace, name, param):
+ ScreenNode.__init__(self, namespace, name, param)
+```
+
+ScreenNode是我们的UI节点基类,必须继承。
+
+```python
+# Bind Type
+class ViewBinder(object):
+ ButtonFilter = 0x10000000
+ BF_ButtonClickUp = 0 | ButtonFilter
+ BF_ButtonClickDown = 1 | ButtonFilter
+ BF_ButtonClick = 2 | ButtonFilter
+ BF_ButtonClickCancel= 3
+ BF_InteractButtonClick = 4
+ BindFilter = 0x01000000
+ BF_BindBool = 5 | BindFilter
+ BF_BindInt = 6 | BindFilter
+ BF_BindFloat = 7 | BindFilter
+ BF_BindString = 8 | BindFilter
+ BF_BindGridSize = 9 | BindFilter
+ BF_BindColor = 10 | BindFilter
+ EditFilter = 0x00100000
+ BF_EditChanged = 11 | EditFilter
+ BF_EditFinished = 12 | EditFilter
+ ToggleFilter = 0x00010000
+ BF_ToggleChanged = 13 | ToggleFilter
+# Return Type
+class ViewRequest(object):
+ Nothing = 0
+ Refresh = 1 << 0
+ PointerHeldEventsRequest = 1 << 1
+ PointerHeldEventsCancel = 1 << 2
+ Exit = 1 << 3
+
+```
+
+### UI绑定和返回
+
+UI的绑定分为binding单个绑定和binding_collection集合绑定,适合集合容器。
+
+| 绑定类型 | 绑定方式 | 解释 |
+| :--------------------- | :---------------------------: | :------------------------------------- |
+| BF_ButtonClickUp | binding | 绑定按钮的Up事件 |
+| BF_ButtonClickDown | binding | 绑定按钮的Down事件 |
+| BF_ButtonClick | binding | 同时绑定Up和Down事件 |
+| BF_ButtonClickCancel | binding | 绑定按钮的Cancel事件(按钮down其他up) |
+| BF_InteractButtonClick | binding | 绑定游戏原生的按钮点击事件 |
+| BF_BindBool | binding \| binding_collection | 绑定Bool变量 |
+| BF_BindInt | binding \| binding_collection | 绑定Int变量 |
+| BF_BindFloat | binding \| binding_collection | 绑定Float变量 |
+| BF_BindString | binding \| binding_collection | 绑定String变量 |
+| BF_BindGridSize | binding | 绑定GridSize变量 |
+| BF_BindColor | binding \| binding_collection | 绑定颜色变量 |
+| BF_EditChanged | binding | 绑定输入框输入改变事件 |
+| BF_EditFinished | binding | 绑定输入框输入完成事件 |
+| BF_ToggleChanged | binding | 开关状态改变事件 |
+
+**binding(bind_flag, binding_name = None)**
+
+bind_flag为上文中绑定类型,binding_name为绑定名称。
+
+binding_name为脚本绑定变量,binding_name_override为引擎变量,json格式如下
+
+```json
+ "bindings" : [
+ {
+ "binding_condition" : "always",
+ "binding_name" : "#scoreboard_grid.item_count",
+ "binding_name_override" : "#StackGridItemsCount"
+ }
+ ]
+```
+对应的Python代码如下
+```python
+ @ViewBinder.binding(ViewBinder.BF_BindInt, "#scoreboard_grid.item_count")
+ def OnStarkGridResize(self):
+ return len(self.scoreBoardList)
+```
+
+**binding_collection(bind_flag, collection_name, binding_name = None)**
+
+bind_flag为上文中的绑定类型,collection_name为集合名称,binding_name为绑定的变量名称。
+
+集合的json如下:
+
+```json
+"collection_name" : "scoreboard_stackgrid"
+```
+
+在集合的子控件中,binding_collection_name为集合名,binding_condition为绑定条件,binding_name为绑定名称,binding_type为collection绑定,property_bag设置他的初始值,text为它的绑定值。
+
+```json
+ "label_score_board" : {
+ "bindings" : [
+ {
+ "binding_collection_name" : "scoreboard_stackgrid",
+ "binding_condition" : "always",
+ "binding_name" : "#label_score_board.text",
+ "binding_type" : "collection"
+ }
+ ],
+ "offset" : [ "0%+0 px", "0%+0px" ],
+ "property_bag" : {
+ "#label_score_board.text" : "666666666666"
+ },
+ "text" : "#label_score_board.text",
+ "text_alignment" : "left",
+ "type" : "label",
+ "visible" : true
+ },
+```
+
+对应的Python代码如下,其中index表示在集合中的哪一元素。
+
+```python
+ @ViewBinder.binding_collection(ViewBinder.BF_BindString, "scoreboard_stackgrid", "#label_score_board.text")
+ def OnRefreshScoreBoardLabel(self, index):
+ return self.scoreBoardList[index] if len(self.scoreBoardList) > index else ""
+```
+
+## 接口调用说明
+
+### 参数命名说明
+
+@Mod.Binding(name = myModName, version = myModVersion)
+
+| 参数 | 类型 | 解释 |
+| :----------: | :--: | :------ |
+| myModName | str | Mod名称 |
+| myModVersion | str | Mod版本 |
+
+假设设置Mod名称为"myModName",示例:
+```python
+ @Mod.Binding(name = "myModName", version = "0.1")
+ class MyModClass(object):
+ def __init__(self):
+ pass
+```
+
+### 界面创建流程及生命周期
+
+界面在 UiInitFinished 事件发送之后就可以开始创建
+
+创建UI的第一步是UI的注册,通过调用 RegisterUI 接口,将想开启UI的相关数据进行注册。同一UI只需要注册一次即可
+
+注册完成之后就可以在需要的时候实例化UI,可使用的接口有 CreateUI 和 PushScreen 两种。使用 CreateUI 生成的界面都生成在操作UI下,不同的生成参数UI层级不同,而使用 PushScreen 生成的界面以堆栈管理的方式生成,该界面生成时上一个 PushScreen 生成的界面就会被隐藏。值得注意的是,MC原生界面(比如暂停界面,背包界面等)也是类似 PushScreen 的方式加载进来,并以堆栈管理。
+
+在UI创建完成之后,可以调用 GetUI 接口拿到UI对应的ScreenNode实例。
+如果想获取MC原生界面的实例,则需要监听原生界面Push进来的事件 PushScreenEvent ,然后在事件回调中调用接口 GetTopPushedUI 。
+
+每个ScreenNode都有生命周期函数,生命周期函数会被自动在以下情况下调用,重写函数可以完成一些逻辑。
+
+| 函数 | 作用 |
+| :----------------------------------------------------------: | :----------------------- |
+| Create | UI创建成功时调用 |
+| OnActive | UI重新回到栈顶时调用 |
+| OnDeactive | 栈顶UI有其他UI入栈时调用 |
+| Destroy | UI销毁时调用 |
+
+最后,当UI需要销毁时,可以调用ScreenNode实例的 SetRemove 接口,此外使用 PushScreen 接口创建的界面还可以使用 PopScreen 接口进行销毁。
+
+### 手柄交互
+
+(1)使用 PushScreen生成出的界面,调出手柄光标,有两步一是需要将底层Screen继承自common.base_screen,二是将screen的"gamepad_cursor" 属性设置为 true,如下格式
+
+```json
+{
+ "main@common.base_screen" : {
+ ....
+ "gamepad_cursor" : true
+ },
+ "namespace" : "Test"
+}
+```
+
+(2)使用 CreateUI生成出的界面,只支持手柄与创建UI时isHud参数设置为0的Screen中的按钮进行交互。
+
+(3)使用 PushScreen生成出具有轮盘控件的UI时,需要将底层screen的"gamepad_cursor_deflection_mode" 属性设置true,否则将无法选中轮盘格子
+
+(4)[GamepadModDemo](../20-玩法开发/13-模组SDK编程/60-Demo示例.md#GamepadModDemo)展示了两种UI创建如何与手柄交互,以及一个基础的扳机使用方法。
+
+## UIDemoMod介绍
+
+为了让开发者更好的了解各个UI控件的使用方法以及控件在mod界面中的应用,我们开发了一个简单的[UIDemoMod](../20-玩法开发/13-模组SDK编程/60-Demo示例.md#UIDemoMod),开发者可以在官网下载到它。该Demo包含了文本、文本输入框、滚动列表、网格、进度条、按钮、图片、开关、纸娃娃、道具渲染控件的操作与逻辑演示。下图为UIDemoMod菜单界面。
+
+
+
+例如我们想了解一下文本控件是如何使用的,点击“文本控件演示”按钮进入演示界面,如下图。
+
+
+
+由于功能相关以及方便演示,我们将文本和文本输入框控件做在一个界面中共同演示。控件的演示界面中有待演示的UI控件、操作方法和返回菜单界面按钮。如操作方法描述的,我们在文本输入框中输入文本,上方的文本控件会根据文本输入框输入的内容发生对应的变化,逻辑可以在UIDemoMod的脚本代码中查到,如下图。
+
+
+
+还想了解其他控件的用法,就下一个UIDemo看看吧!
+
+
+## 富文本控件介绍
+
+富文本控件提供了一个支持文本、图片、按钮、超链接、序列帧的复合文本控件,富文本控件接受按一定规则组成的字符串,除去常规文本外,定制化文本及非文本控件用html的标签写法隔开(如``),中间填写json格式数据。开发者可以在UI中引用该控件,并将符合解析规则的字符串传入解析接口,富文本控件会根据传入的字符串顺序排列生成富文本。以下详细介绍用法。
+
+### 富文本支持定制化文本及非文本控件及写法
+
+#### 换行控件
+
+2.6新增换行控件\
,可在非标签的内容、定制化文本控件\