第三章:五维设计框架——让《酒魂》的设计有章可循 「凡事预则立不预则废。」 ——《礼记·中庸》在正式开始之前有一个问题必须先想清楚你到底在做一个什么东西这个问题看似显而易见但大多数半途而废的游戏恰恰是因为没想清楚就动了手。第2章提到的「范围蔓延」本质上就是设计层面缺乏明确方向导致开发中不断加功能、改逻辑最终陷入混乱。而「MVP思维」的前提也正是这个核心设计——连自己在做什么都没定最小可行产品就成了无的放矢做了三个月才发现不好玩或系统之间打架为时已晚。本章将介绍《酒魂》所采用的五维设计框架——不是晦涩的学术理论而是一套实用的设计检查清单。读完本章你会完成一份《酒魂》的五维设计文档这份文档就是后续所有章节的开发依据第7章做战斗时查“醉意阈值”第15章做酿造时查“品质分几级”。它不是练习而是施工图纸。后续开发中遇到任何困惑你都可以回到这五个维度重新审视。3.1 游戏的五个构成维度一款游戏可以从五个相互独立又彼此咬合的维度来理解和设计数据、规则、设定、剧情、体验。这五个维度不是开发顺序而是任何阶段都必须同时兼顾的五个视角——无论是前期设计、中期开发还是后期优化都要确保它们协同一致。一个好的游戏是五维协调的结果一个崩坏的游戏往往是某一维度与其他四个脱节。就像第2章提到的「完美主义陷阱」过度追求设定精美或剧情华丽却忽略了规则的可玩性和数据的合理性最终做出来的游戏「好看不好玩」。3.1.1 数据——游戏世界里所有「量」的定义数据包括属性、数值、资源、概率、范围、增长曲线……一切可以量化的东西。《酒魂》的数据示例玩家生命值范围 1-200醉意值 0.0-1.0酒品品质分级 F/D/C/B/A/S词缀权重表决定酒品特效的触发概率设计数据时问自己这个数值的范围合理吗它的增长曲线让玩家感受到成长还是感受到无聊为什么数据维度很重要因为数据是游戏里最容易被忽视、但出问题最麻烦的东西。如果你在写代码的时候才临时决定“醉意值先写个0.5吧”后面会发现醉意值衰减太快玩家永远放不出大招醉意值衰减太慢玩家全程满醉意没有决策空间不同酒品的醉意增加值没有统一标准平衡性完全靠猜好的数据设计应该在写第一行代码之前就确定下来。在《酒魂》项目中创建数据设计文档在《酒魂》项目根目录下创建一个docs/文件夹。在里面新建一个文件叫01_data_design.mdMarkdown格式用记事本或VS Code都可以打开。在这个文件中写下以下内容括号里的文字替换成你的设计# 《酒魂》数据设计文档 ## 玩家属性 - 生命值范围 最小值 ~ 最大值 - 攻击力范围 最小值 ~ 最大值 - 醉意值范围 0.0 ~ 1.0 ## 酒品品质 分级F / D / C / B / A / S共6级 ## 货币 - 铜钱无上限普通货币 - 功德值范围 0 ~ 999稀有货币 ## NPC好感度 范围0 ~ 100每20级解锁新内容如果你暂时不确定具体数值可以先写“待定”。后续章节会回来填充。3.1.2 规则——游戏世界里所有「动词」的定义规则包括什么能做什么不能做做了会怎样……一切关于“操作”和“反馈”的定义。《酒魂》的规则示例投壶命中目标造成伤害第7章醉意超过0.8才能释放酒魂技第10章陈化30天品质每天提升0.5%第17章设计规则时问自己这条规则让游戏更有趣还是更繁琐它是否给玩家留出了足够的决策空间为什么规则维度很重要因为规则决定了玩家“玩什么”。如果你的规则只是“点一下屏幕数字1”玩家3分钟就腻了。如果你的规则是“点一下屏幕数字1但数字越大下次点屏幕的风险越高”玩家就会开始纠结——要不要继续点纠结就是乐趣的来源。在《酒魂》项目中创建规则设计文档在docs/文件夹下新建02_rules_design.md写下以下内容# 《酒魂》规则设计文档 ## 核心玩法投壶战斗 - 操作按住鼠标蓄力松开投掷 - 效果箭矢沿抛物线飞行命中敌人造成伤害 - 决策点蓄力时间越长射程越远但瞄准越难 ## 核心玩法醉意系统 - 操作按E键喝酒 - 效果醉意值0.2生命值20 - 决策点现在喝提升战力但有风险还是留到关键时刻喝 ## 核心玩法酒魂技 - 触发条件醉意值 ≥ 0.8按R键 - 效果高伤害大招屏幕震动诗词浮现 - 决策点放完大招后醉意值会下降后续战斗怎么办 ## 核心玩法酿造 - 操作在酒坊按F键打开酿造界面 → 选择配方 → 添加材料 → 点击酿造 - 效果产出酒品品质取决于材料和工艺匹配度 - 决策点用稀有材料赌S级还是用普通材料求稳3.1.3 设定——游戏世界的时代背景、地理环境、世界观和美学风格设定包括发生在什么时代什么地点什么画风什么音乐……一切关于“世界是什么样”的定义。《酒魂》的设定示例唐代江南酒香弥漫的小镇水墨与工笔并存的视觉风格古诗词贯穿始终设计设定时问自己这个设定是否给规则和剧情提供了一个自洽的容器玩家相信这个世界吗为什么设定维度很重要因为设定决定了“玩家信不信”。如果你的游戏设定是唐代但NPC掏出手机发微信玩家立刻出戏。出戏之后再精妙的规则、再感人的剧情都很难让玩家沉浸。设定是所有其他维度的“容器”——它决定了什么东西在这个世界里是合理的。在《酒魂》项目中创建设定文档在docs/文件夹下新建03_setting_design.md写下以下内容# 《酒魂》设定设计文档 ## 时代与地点 - 时代唐代618-907年 - 地点江南某小镇靠近运河 ## 视觉风格 - 主风格水墨浅绛彩参考《绘真·妙笔千山》 - 建筑唐代风格酒肆、民居 - 角色唐代服饰 ## 可出现的元素 - 历史人物李白、杜甫、王维、贺知章等唐代诗人 - 物品铜钱、酒坛、竹简、毛笔 - 场景酒坊、河边、诗会 ## 绝对禁止出现的元素 - 任何现代科技手机、汽车、电灯 - 唐代以后的历史人物苏轼、李清照等 - 非中国元素和服、西式建筑3.1.4 剧情——发生在游戏世界里的事件序列剧情包括主线、支线、角色弧光、情感节拍……一切关于“发生了什么故事”的定义。《酒魂》的剧情示例主角继承破败的酒坊邂逅历史上真实存在的酒仙诗人通过对饮解锁他们的记忆碎片设计剧情时问自己玩家有没有理由在乎这些角色剧情的节奏是否和游戏进度相互支撑为什么剧情维度很重要因为剧情给了玩家“为什么要做这些事”的答案。如果只有规则和数据游戏就像一个精密的机器能运转但没有温度。剧情让玩家在乎这个机器里发生的事情。但要注意剧情不应该独立于系统之外。如果玩家可以不玩酿造就解锁剧情那剧情就成了“额外的负担”而不是“玩法的奖励”。在《酒魂》项目中创建剧情设计文档在docs/文件夹下新建04_story_design.md写下以下内容# 《酒魂》剧情设计文档 ## 主线30字版 你继承了一座破酒坊通过酿酒结识唐代诗人找回失传的《酒魂谱》复兴酒坊。 ## 剧情与玩法的绑定 | 触发条件玩法 | 触发的剧情 | 解锁内容 | |:---|:---|:---| | 首次酿造成功 | 镇上的人开始知道你的酒坊 | 售卖功能解锁 | | 酒坊等级达到2级 | 李白路过被酒香吸引 | 李白NPC出现 | | 李白好感度达到60 | 李白讲述《将进酒》的故事 | 解锁“诗剑酒魂技” | | 酿造出A级以上酒品 | 消息传到杜甫耳中 | 杜甫NPC出现 | | 收集3个记忆碎片 | 拼凑出《酒魂谱》的线索 | 开放新地图“藏经阁” | ## MVP版本的剧情范围 只实现开场 → 首次酿造 → 邂逅李白 → 李白好感度60 → 解锁第一个酒魂技3.1.5 ✨ 体验——玩家实际感受到的情绪弧线体验包括紧张、成就感、好奇、代入感、遗憾……一切关于“玩家感觉到什么”的定义。《酒魂》的体验示例第一次酿出S级药酒时的惊喜在醉意大爆发时释放诗号技的痛快陈酒开坛时的仪式感设计体验时问自己我希望玩家在这个时刻感受到什么我的设计是否在制造那种感受为什么体验维度很重要因为体验是游戏的最终交付物。玩家花钱买游戏买的不是代码、不是美术、不是音效——买的是感觉。数据、规则、设定、剧情最终都是为了制造某种体验。在《酒魂》项目中创建体验设计文档在docs/文件夹下新建05_experience_design.md写下以下内容# 《酒魂》体验设计文档 ## 关键体验节点 | 游戏时刻 | 目标体验 | 实现手段技术 | |:---|:---|:---| | 第一次酿出酒 | 成就感 | 成功音效 品质弹窗动画 酒坛发光特效 | | 醉意达到0.8 | 紧张期待 | 屏幕边缘泛红 心跳音效 UI闪烁 | | 释放酒魂技 | 痛快 | 屏幕震动 全屏粒子特效 诗词浮现 高伤害数字 | | 陈酒开坛 | 仪式感 | 缓慢揭盖动画 蒸汽粒子 古筝音效 | | 酿造失败 | “再试一次” | 产出“意外变体”不是纯损失 神秘音效 | ## MVP版本优先实现的体验 - 第一次酿出酒的成就感最容易实现用音效弹窗 - 释放酒魂技的痛快最核心的爽点 - 酿造失败的“意外变体”让失败不沮丧3.2 五维之间的咬合关系五个维度不是平行的它们之间有方向性的影响关系。理解这些关系能让你在设计时少走弯路。3.2.1 设定是容器其他四维在里面生长设定决定了什么东西在这个游戏世界里是合理的是所有设计的基础。《酒魂》的设定是唐代中国这意味着数据货币是铜钱不是金币属性名叫「功德」而非「荣誉值」规则酿酒用的是古法工艺不是现代蒸馏对话用古典诗词剧情出现的历史人物必须和唐代相关不能让李白和苏轼同场体验视觉风格服务于「水墨江南·诗酒人生」的整体氛围检查《酒魂》的设定一致性打开你刚才创建的03_setting_design.md在末尾添加一个“一致性检查清单”## 一致性检查清单 在设计任何新功能之前先检查 - [ ] 数据命名是否符合唐代背景用“铜钱”不用“金币”用“功德”不用“荣誉” - [ ] 规则是否贴合唐代工艺酿酒用古法不用现代蒸馏 - [ ] 剧情人物是否生活在唐代李白可以苏轼不行 - [ ] 视觉音效是否符合水墨江南风格后续每新增一个功能都先过一遍这个清单。3.2.2 规则决定体验数据调节体验这是五维框架里最重要的一对关系。以《酒魂》的醉意系统为例规则设计产生的体验数据调节醉意值越高攻击力越强但控制变差高风险高回报的心跳感醉意≥0.8攻击力×1.5醉意≥0.9控制延迟0.3秒醉意超过阈值才能释放酒魂技给玩家“积累醉意”的目标阈值0.8冷却10秒数据的作用是在规则确定之后把体验调节到「刚好好玩」的程度。在《酒魂》项目中记录数据调节参数打开01_data_design.md在末尾添加“醉意系统参数”## 醉意系统参数MVP版本 | 参数 | 值 | 设计理由 | |:---|:---|:---| | 初始醉意值 | 0.0 | 战斗开始时清醒 | | 每口酒增加醉意 | 0.2 | 喝4口达到0.8节奏刚好 | | 醉意自然消退速度 | 0.02/秒 | 从0.8降到0需要40秒够打完一场战斗 | | 酒魂技触发阈值 | 0.8 | 需要喝4口才能放有明确的积累过程 | | 酒魂技冷却时间 | 10秒 | 不能连续放让玩家计算时机 | | 醉意≥0.8攻击加成 | 1.5倍 | 足够诱人值得冒险 | | 醉意≥0.8移速惩罚 | 0.7倍 | 让玩家真正感到“控制变差” |这些参数会在第10章醉意系统用到。3.2.3 剧情借设定生根借规则推进《酒魂》的剧情不是独立于系统之外的「看板」而是通过游戏规则自然流露的。《酒魂》的剧情推进方式玩家酿出特定酒品酿造规则→ 触发对应古人的好感度数据→ 解锁对饮事件剧情玩家在投壶小游戏中获胜战斗规则→ 获得古人赠送的酿酒配方数据规则→ 解锁新的剧情对话剧情在《酒魂》项目中记录剧情触发条件打开04_story_design.md补充“剧情触发条件”表格## 剧情触发条件代码层面的判断 | 剧情事件 | 触发条件代码判断 | 后续影响 | |:---|:---|:---| | 邂逅李白 | brew_count 1酿过一次酒且 winery_level 2 | 李白NPC出现在酒坊门口 | | 李白好感度60 | li_bai_favorability 60 | 解锁“诗剑酒魂技”技能书 | | 第一次释放酒魂技 | drunk_level 0.8 且 skill_cast_count 0 | 触发李白对话“好酒量” |这些条件会在第18-20章剧情与任务系统用到。3.3 设计 vs 执行从创意到落地的哲学3.3.1 创意在纸上总是完美的在你想象《酒魂》的时候一切都那么美好。但一旦开始实现你就会发现创意的完美需要大量的执行来支撑。具体来说「精妙的酿酒系统」需要数十张数据表、复杂的概率算法和大量的UI开发「鲜活的历史人物」需要大量的对话文本、动画、语音「充满诗意的战斗」需要流畅的碰撞检测、敌人AI、技能系统和几百次调参3.3.2 「好的设计」和「能做出来的设计」对于独立开发者最重要的设计原则不是「最好的设计」而是「在当前资源约束下能做出来的最好设计」。以下是《酒魂》的务实决策理想设计务实替代方案节约的工作量全语音配音的历史人物对话文字对话 环境音效数十小时的录音和后期手绘逐帧动画的角色少量关键帧 粒子效果数百张手绘图几十种各有特色的敌人5-8种行为模式用数值变体扩展大量的AI调试时间开放世界地图精心设计的线性或半开放地图数倍的地图绘制时间在《酒魂》项目中记录MVP范围打开02_rules_design.md在末尾添加“MVP版本范围”## MVP版本范围第一版必须完成 ### 战斗系统 - [x] 投壶核心玩法蓄力抛物线命中 - [x] 3种敌人类型近战、远程、巡逻 - [x] 醉意系统基础版0~1数值影响攻击力和移速 - [x] 1种酒魂技醉意≥0.8时释放 ### 酿造系统 - [x] 3种基础配方 - [x] 品质计算F~S级 - [x] 随机词缀简单版5个词缀随机抽取 ### 剧情 - [x] 开场继承酒坊 - [x] 邂逅李白 - [x] 李白好感度达到60的剧情 ### 暂不实现放到后续版本 - [ ] 全语音对话 - [ ] 复杂君臣佐使配伍系统 - [ ] 程序化地图生成 - [ ] 陈化系统 - [ ] 多语言支持3.4 从设计到代码一个完整的翻译案例这是本章最重要的一节。它演示了“设计文档里的文字”如何变成“Godot里的代码”。案例醉意值影响攻击力步骤1设计语言你写在文档里的“玩家喝酒越多醉意值越高攻击力越强。但醉意太高时移动会变得不稳定打滑。”步骤2翻译成规则你补充在文档里的醉意值范围 0.0 ~ 1.0按E键喝酒醉意值0.2上限1.0醉意值每秒自然消退0.02醉意值 ≥ 0.5 时攻击力 × 1.2醉意值 ≥ 0.8 时攻击力 × 1.5且移速 × 0.7移动时增加“打滑”惯性步骤3翻译成代码你在Godot里写的# 挂在玩家身上的脚本 extends CharacterBody2D # 数据设计对应 01_data_design.md var drunk_level: float 0.0 # 规则设计对应 02_rules_design.md func drink(): drunk_level min(1.0, drunk_level 0.2) func get_attack_multiplier() - float: if drunk_level 0.8: return 1.5 elif drunk_level 0.5: return 1.2 return 1.0 func get_speed_multiplier() - float: return 0.7 if drunk_level 0.8 else 1.0 func _process(delta): # 醉意自然消退 drunk_level max(0.0, drunk_level - 0.02 * delta)在《酒魂》项目中创建这个脚本打开《酒魂》Godot项目在玩家角色场景Player.tscn上添加一个新的脚本叫player_drunk.gd把上面的代码复制进去按F5运行按E键测试喝酒功能暂时还没有UI显示醉意值第12章会做这个脚本是你《酒魂》项目的第一段醉意系统代码。虽然没有UI但它已经在后台运行了——你可以用print(drunk_level)在调试面板看到数值变化。3.5 三条设计法则附《酒魂》检查清单法则一有意义的选择检查方法你设计的每一个选择闭上眼睛选A。你会后悔没选B吗不会那这个选择删掉。《酒魂》的选择设计场景选项A选项B玩家会纠结吗战斗前喝酒攻击50%移速-30%不喝正常属性✅ 会酿造时用稀有材料可能出S级用普通材料保底C级✅ 会与李白对话说实话好感10说俏皮话好感5获得一壶酒✅ 会为《酒魂》添加一个“有意义的选择”在02_rules_design.md末尾写下你为《酒魂》设计的一个新选择。要求两个选项各有优劣玩家会纠结。示例战斗中是先打败小兵积累醉意还是直接打Boss醉意不足伤害不够法则二可读性优先检查方法把你设计的系统用一句话说给朋友听。他点点头你就过了。他皱眉头你回去改。《酒魂》各系统的一句话版酿造选配方→加材料→按按钮出酒醉意喝越多越厉害但越不稳好感度送酒给古人他喜欢你就会教你新东西动手练习3.12用一句话描述《酒魂》的醉意系统写下来。如果超过20个字简化它。法则三失败也要有趣检查方法玩家失败后是沮丧地说“烦死了”还是兴奋地说“有意思再来一次”《酒魂》的失败设计失败场景传统做法《酒魂》做法酿造失败材料消失什么都没得到产出“意外变体”效果奇特可能是惊喜战斗死亡读档重来进度丢失敌人记住你的打法下次有变化对话选错对话结束无法继续触发特殊台词“下次带XX再来找我”为《酒魂》设计一个“有趣的失败”在05_experience_design.md末尾写下你对“酿造失败”的具体设计。要求失败后玩家不是空手而归而是得到一个“意外变体”。示例想酿“竹叶青”失败后得到“苦竹酒”——效果是回血少但增加暴击率。3.6 本章小结《酒魂》的设计蓝图本章你完成了以下文件都在docs/文件夹下文件内容后续哪一章用到01_data_design.md所有数值的范围和参数第11章数据驱动02_rules_design.md核心规则和MVP范围第7-10章战斗03_setting_design.md世界观和一致性清单贯穿全书04_story_design.md剧情主线和触发条件第18-20章剧情05_experience_design.md体验节点和失败设计第12-14章UI、第24章优化player_drunk.gd醉意系统的第一段代码第10章醉意系统这些文件就是《酒魂》的施工图纸。后续每一章开始前你都可以回到这些文档确认“这个功能的设计依据是什么”。最终检查打开你的《酒魂》Godot项目确认docs/文件夹存在里面有5个.md文件player_drunk.gd脚本已添加到玩家角色上按F5运行按E键能在调试面板看到drunk_level的变化下一章第4章 创建《酒魂》项目——动手之前先把工程搭好延伸阅读《游戏设计艺术》Jesse Schell——五维框架的灵感来源重点阅读第1-5章《游戏编程模式》Robert Nystrom——理解“设计模式是解决什么问题”的