@@ -6,7 +6,7 @@ lastVerified: 2026-07-15
66---
77
88::: info 验证环境
9- 本页已在游戏 Build 740622、.NET Standard 2.1、Mod API 2 下验证 。
9+ 本页示例已使用 Build 740622 对应的本机 Managed DLL 完成编译检查;尚未在游戏内完成运行验证 。
1010:::
1111
1212# 配方系统
@@ -19,7 +19,7 @@ lastVerified: 2026-07-15
1919
2020配方不是挂到某个特定建筑上,而是声明一个 ` fabricators ` 列表。任何 ` ComplexFabricator ` 组件在初始化时会扫描所有配方,把自己的 ` PrefabTag ` 和配方的 ` fabricators ` 列表比对,匹配上了就显示。
2121
22- 理解这一点很重要:** 配方和建筑是完全解耦的 ** 。你可以做一个新配方,让它被所有原版烹饪台识别,只要把 ` "CookingStation" ` 加进 ` fabricators ` 。
22+ 理解这一点很重要:配方不会直接引用建筑类型,而是通过 ` fabricators ` Tag 与建筑的 ` PrefabTag ` 间接绑定 。你可以做一个新配方,让它被所有原版烹饪台识别,只要把 ` "CookingStation" ` 加进 ` fabricators ` 。
2323
2424## 最简配方
2525
@@ -85,9 +85,22 @@ new ComplexRecipe.RecipeElement(
8585
8686如果不想 patch ` ConfigureRecipes ` ,也可以在 ` Db.Initialize ` 后注册。只要在 ` ComplexRecipeManager.PostProcess() ` 之前构造了 ` ComplexRecipe ` ,配方就会被识别。
8787
88+ ## 实际开发顺序
89+
90+ 做自己的配方时,可以按下面的顺序排查:
91+
92+ 1 . 先用原版输入和输出验证配方注册时机。
93+ 2 . 确认 ` fabricators ` Tag 与目标建筑的 ` PrefabTag ` 一致。
94+ 3 . 再替换成自己的物品或食物 ID。
95+ 4 . 最后调整数量、时间、温度和排序。
96+
97+ 配方出现在工艺台,说明注册和 Tag 基本正确;原料消耗后没有产物,继续查结果 Tag 对应的实体是否已注册,以及输出储存是否能接受它。
98+
99+ 当前可编译的最小项目是 ` examples/Recipe/ ` 。它只演示配方注册,不负责创建新的食物实体,所以不要把它误当成“新增食物”的完整项目。
100+
88101## 自定义制造建筑
89102
90- 如果你做了自己的制造建筑并想支持配方,建筑上需要挂 ` ComplexFabricator ` 组件:
103+ 如果你做了自己的制造建筑并想支持配方,建筑上需要挂 ` ComplexFabricator ` 组件。下面只演示配方扫描所需的核心配置,不是一个完整可运行的制造建筑;实际项目还需要根据建筑类型配置对应的工作、存储和动画组件 :
91104
92105``` csharp
93106public override void ConfigureBuildingTemplate (GameObject go , Tag prefabTag )
@@ -99,7 +112,7 @@ public override void ConfigureBuildingTemplate(GameObject go, Tag prefabTag)
99112}
100113```
101114
102- 配方的 ` fabricators ` 里写上这个建筑的 ` PrefabTag ` 即可。 ` ComplexFabricator.GetRecipes() ` 会自动扫描所有匹配的配方 。
115+ 配方的 ` fabricators ` 里写上这个建筑的 ` PrefabTag ` 后, ` ComplexFabricator.GetRecipes() ` 才会扫描到匹配的配方 。
103116
104117## 排序和分类
105118
@@ -110,7 +123,7 @@ recipe.sortOrder = 10; // 数字越小越靠前
110123recipe .recipeCategoryID = " ..." ; // 构造函数自动生成,也可以手动改
111124```
112125
113- ` ComplexRecipeManager.MakeRecipeID() ` 生成的 recipe ID 格式是 ` "FabricatorID_InputHash_OutputHash" ` ,用来保证同一建筑同一输入输出的配方 ID 不变 。
126+ ` ComplexRecipeManager.MakeRecipeID() ` 会根据制造建筑 ID、每个输入 Tag 和每个输出 Tag 拼接 recipe ID。不要依赖具体字符串格式;在当前 DLL 中,同一组参数会得到相同的 ID。
114127
115128## DLC 限制
116129
0 commit comments