这里是引用
「凡事预则立,不预则废。」 ——《礼记·中庸》
在正式开始之前,有一个问题必须先想清楚:你到底在做一个什么东西?这个问题看似显而易见,但大多数半途而废的游戏,恰恰是因为没想清楚就动了手。第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.md(Markdown格式,用记事本或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)——理解“设计模式是解决什么问题”的
评论0
暂时没有评论