Files
spellforge/docs/handbook/07_game_designer.md

7.9 KiB
Raw Permalink Blame History

07 游戏设计器(一站式可视化配置工具)

核心理念:策划 / 美术 / 开发无需写一行代码,在编辑器的「🎮 游戏设计器」面板里调数值、改玩法、加内容。所有改动保存为 res://data/*.json,游戏运行时自动加载。


1. 打开工具

  1. 启用插件(默认已启用):项目 → 项目设置 → 插件 → 勾选 "Game Designer"
  2. 编辑器底部面板点击 🎮 游戏设计器」 标签(与"输出""调试器"并列)
  3. 出现 7 个分页:法术 / 👾敌人 / 🌊波次 / 🪄Core / 🔮共鸣 / 🔥状态 / ⚖平衡

🏛 纯数据驱动架构:游戏所有内容数据只存在于 res://data/*.json,代码不含任何硬编码内容副本或回退。这意味着——改 JSON 就是改游戏,数据是唯一权威源。若某个 data 文件缺失,游戏会在输出面板 push_error 明确报错(而非静默用旧值)。

首次启用或改插件后,可能需重启 Godot 编辑器让面板出现。


2. 通用工作流

在面板里改数值/加内容  →  点「💾 保存」  →  按 F5 运行游戏  →  改动生效

⚠️ 所有改动需重启游戏(F5)生效——数据在游戏启动时由各 Manager 一次性加载。


3. 七个分页详解

所有分页均为字段化表单(输入框/下拉/复选框/行编辑器),选项显示为「中文 English」双语,无需手写 JSON

法术(spells.json

新增/编辑/删除法术,最丰富的玩法配置。字段化表单,详见 06 法术编辑器

  • 列表 → 选中编辑;新增 / ⧉复制 / 🗑删除
  • 固定字段:ID / 类型(动作/修饰/触发/逻辑) / 显示名 / 描述
  • 元素标签:火/冰/雷/水/毒 复选框(可多选)+ 自定义标签框(非元素 tag)
  • 通用 meta:蓝耗 mana_cost / 商店价 shop_cost / 解锁价 unlock_cost
  • 动态字段:随类型(及 ACTION 动作种类 弹道/毒池/召唤、LOGIC logic_op)自动切换;伤害类型/施加状态等为下拉;schema 之外的键落入「其它(JSON)」框保留不丢
  • 💧 蓝耗meta.mana_cost 决定施放消耗的魔力(0=免蓝);权威数值见 numerical_design §2

👾 敌人(enemies.json

6 种敌人原型的数值表格,直接拖动数字框调整:

含义
速度 移动速度(px/s
护甲 每次命中减免的固定伤害
尺寸 渲染直径(px),Boss 设大更醒目
颜色 点色块选颜色(敌人渲染色)

原型:杂兵 / 快速 / 护甲 / 精英 / 首领(MiniBoss) / 终焉(Boss)

🌊 波次(waves.json

关卡难度曲线编辑器——逐波配置:

含义
怪数 本波杂兵数量
血量 杂兵基础血量
类型 杂兵原型(杂兵/快速/护甲…)下拉
精英 带寻路的精英数(W15+
金币 / XP 波次结算奖励
Boss 无 None / 首领 MiniBoss / 终焉 Boss
  • 末尾加一波」扩展关卡长度
  • 改完点「💾保存 waves.json」

🪄 Corecores.json

法杖类型配置(影响法术排列玩法):

字段 含义
槽位数 可装法术数
拓扑 线性 LINEAR / 矩阵 MATRIX / 电路 CIRCUIT
CPU 上限 单次施法最大执行步数
施法间隔 自动施法冷却(s)
蓝上限(Mana Max) 法杖蓝池上限(基础 100
回蓝/秒(Mana Regen) 每秒回复的魔力(基础 5
特性 无 None / 记忆 PERSISTENT_MEMORY / 双流 / 末位施法 / 洗牌 / 无限法术
矩阵行·列 MATRIX 专用网格尺寸
电路边 CIRCUIT 专用,from → to 行编辑器(可 加/🗑删边)

🔮 共鸣(resonance.json

元素组合自动合成配方(隐藏玩法):

  • 元素 A + 元素 B(元素下拉,相邻放置)→ 合成产物法术
  • 匹配方式:相邻 adjacent / 卡组内任意 anywhere_in_deck
  • 消耗输入:合成后是否移除原两张法术
  • 例:tag:water + tag:lightningaction_plasma_storm

🔥 状态(status_effects.json

DoT/控制/叠层效果:

字段 含义
状态 ID 整数(1=燃烧 2=冻结 3=中毒…),与法术 meta 的 apply_status_id 对应
持续时间 / 跳字间隔 DoT 周期
叠层模式 刷新 REFRESH / 叠层 INTENSITY / 独立 INDEPENDENT
最大层数 0=无限
每跳伤害 DoT 每次伤害
VFX ID 触发的特效

⚖ 平衡(balance.json

全局数值微调:

  • 难度乘子表格:4 行(敌人血量×/玩家受伤×/波次怪数×/Boss血量×) × 3 档(初学者/标准/挑战)
  • Boss 基础血量MiniBoss(W8) / Final Boss(W20)
  • 碎片奖励阈值:波次 → 碎片 行编辑器(可 加/🗑删行),元进度奖励表

调一格数字即可改变整体难度曲线。


4. 数据流原理

🎮 游戏设计器面板  ──保存──▶  res://data/*.json  ──游戏 F5 启动加载──▶  各 Manager
  (编辑器内)              (纯文本,可 git 版本管理)
                                                  spells.json  → SpellRegistry
                                                  enemies.json → EnemyManager
                                                  waves.json   → WaveManager
                                                  cores.json   → WandPreset
                                                  balance.json → SettingsManager + WaveManager
  • JSON 是唯一权威数据源——代码不含硬编码内容副本(纯数据驱动)
  • 文件缺失/格式错误 → push_error 明确报错(不静默,便于发现问题)
  • 数据是纯文本,多人协作改数值不会冲突代码,可走 git review

数据文件清单

文件 内容 加载方
spells.json 全部法术定义 SpellRegistry
enemies.json 6 敌人原型数值 EnemyManager
waves.json 20 波关卡曲线 WaveManager
cores.json 法杖 Core 定义 WandPreset
resonance.json 共鸣配方 SpellEvaluator
status_effects.json 状态效果定义 StatusRegistry
balance.json 难度乘子 + Boss 血量 SettingsManager

5. 实操示例

例 1:让游戏更简单(策划)

平衡分页 → 「敌人血量×」初学者列改 0.5 → 保存 → F5。初学者难度敌人血量减半。

例 2:W10 提前出 Boss(策划)

波次分页 → 第 10 行 Boss 列选 MiniBoss(4) → 保存 → F5。

例 3:新增一个"冰锥"法术(策划)

法术分页 → 新增 → ID 填 action_ice_spike,类型选「动作 ACTION」→ 动态字段里改 base_damage 为 8、施加状态选「冻结 Freeze」→ ✓应用 → 💾保存 → F5。新法术自动进商店。

例 4:精英敌人改成紫色更大(美术)

敌人分页 → 精英行 → 尺寸改 30,颜色点开选紫色 → 保存 → F5。


6. 扩展工具(给开发)

新增编辑器分页只需 3 步(参考 addons/game_designer/):

  1. 写一个 @tool extends VBoxContainer 的标签脚本(读写对应 data/xxx.json,复用 designer_ui.gdspin/line/opt/btn 辅助)
  2. designer_panel.gd_init()_add_tab(...) 注册
  3. 对应 Manager 加 _load_json_xxx(),在 _ready() 调用

开发规范见 CLAUDE.md 「编辑器插件 / 游戏设计器开发规范」:字段化(禁止手写 JSON,可变长整数元组用 tuple_list_editor.gd)、输入框 SIZE_EXPAND_FILL 撑满、标签「中文 English」双语、显示与存储解耦、改动后 validate_script + 回读往返验证。

Godot 编辑器扩展 = Unity 平替EditorPlugin(面板/工具栏/底部面板) ↔ EditorWindow@tool ↔ ExecuteInEditModeEditorInspectorPlugin ↔ CustomEditor;自定义 Resource ↔ ScriptableObject。