「合抱之木,生于毫末;九层之台,起于累土。」**------《道德经》
欢迎来到《酒魂》的开发之旅。在你打开 Godot 之前,我想先和你聊几件事------不是技术,而是心态。 很多人在学习游戏开发的过程中,不是被技术难倒的,而是被自己头脑中错误的预设打倒的:「我不会数学」、「我没学过编程」、「一个人做不了游戏」。本章的目标,是把这些预设一条一条地拆开,还原游戏开发的真实面目,然后帮你找到属于自己的起点。
0.1 游戏开发到底难不难?------拆解恐惧的来源
如果你问一个做了五年游戏的老手「游戏开发难不难」,他可能会耸耸肩说:「就那样。」如果你问一个刚入行三个月的新手,他可能一脸茫然:「太难了,不知道从哪下手。」
为什么同样的领域,感受相差这么大?因为他们面对的根本不是同一个问题。老手已经把「大问题」分解成了无数个可以独立解决的「小问题」;新手面对的是一个没有被拆解的整体,自然感觉无从下手。
0.1.1 「太难了」通常意味着什么
当你感到「游戏开发太难了」,这种感觉背后通常是以下几种情况之一:
- 信息量过载:一次性接触了太多概念(节点、信号、资源、脚本...),大脑还没有把它们分类归档。
- 缺少反馈:写了一堆代码,屏幕上什么都没发生,不知道对不对。
- 目标不清晰:想做一个「游戏」,但「游戏」这两个字太模糊了,不知道第一步该干什么。
- 拿别人的成品和自己的起点比较:看到精美的 3A游戏,再看看自己的代码,落差极大。
💡关键认知 游戏开发的「难」,绝大多数是认知结构问题,不是智力问题。你不是不够聪明,你只是还没有找到正确的拆解方式。本书的核心任务之一,就是帮你建立这套拆解结构。
0.1.2 独立游戏的真实工作量
网上流传着很多关于独立游戏开发的「神话」------一个人做了五年,做出了《星露谷物语》;一个团队三个月做出了爆款。这些故事是真实的,但它们不是典型情况,而是极端案例。
以《酒魂》这样规模的单机游戏为例,一个有一定基础的独立开发者(不是完全零基础),完成一个「够玩」的版本大约需要:
| 阶段 | 参考时间(业余 / 全职) |
|---|---|
| 学习 Godot 基础到能独立写功能 | 4-8 周 / 2-3 周 |
| 完成核心玩法原型(酿造 + 基础战斗) | 2-3 个月 / 1-1.5 个月 |
| 扩展内容(任务、AI、存档) | 3-4 个月 / 2 个月 |
| 打磨、测试与发布准备 | 1-2 个月 / 3-4 周 |
| 总计(写实估算) | 约 10-18 个月(业余) |
这个数字是为了让你有心理准备,而不是为了吓退你。游戏开发是一场马拉松,节奏比速度更重要。很多人在前三个月做出了很好的原型,然后因为「感觉做不完」而放弃------其实他们距离终点已经走过了最难的那段路。
0.1.3 三个最常见的认知误区
◆ 误区一:「我要先把数学学好再做游戏」
真实情况:《酒魂》这类 2D 游戏的绝大多数功能,用到的数学只有加减乘除和偶尔的三角函数。你在初中学过的数学已经够用了。本书所有涉及数学的部分,都会用直白的语言解释「为什么这么算」,而不只是给你一个公式。
◆ 误区二:「没有美术基础就做不了游戏」
真实情况:在学习阶段,完全可以使用免费的占位图片(placeholder)、开源素材和程序化生成的图形。本书配套资源包含所有《酒魂》用到的美术资产,你不需要自己画一笔。等你把系统做通了,再考虑美术的事。
◆ 误区三:「一个人做游戏太孤独、太难坚持」
真实情况:孤独是真的,但有解法------社区、打卡群、Game Jam 都是很好的外部驱动力。本书第 1.5 节会专门介绍如何利用社区让自己坚持下去。
🎯本节小结 难不难,取决于你怎么拆解。本书的结构就是一套经过验证的拆解方式:从最小的可运行程序开始,一层一层向上搭建,每一步都有看得见的成果。
0.2 你需要什么基础?------诚实的自测清单
在开始之前,我们来做一次诚实的评估。这不是入学考试,没有对错,只是帮你了解自己的起点,从而选择最合适的阅读路径。
0.2.1 必要条件(没有这些会很艰难)
| 条件 | 说明 |
|---|---|
| 能流畅操作电脑 | 会创建文件夹、安装软件、使用浏览器搜索。 |
| 能阅读并理解中文技术文档 | 本书内容清晰,但需要你愿意多读几遍。 |
| 对游戏有真实的热情 | 不需要是硬核玩家,但你要真的想做出一款自己满意的游戏。 |
0.2.2 加分项(有更好,没有也完全可以)
| 加分项 | 如果有,你可以... |
|---|---|
| 有任意语言的编程基础 | 跳过 0.5 节急速入门,直接从对照速查表开始 |
| 玩过 RPG / 经营类游戏 | 对《酒魂》的系统设计有更深的直觉理解 |
| 有基础美术或音乐能力 | 在打磨阶段可以做出更有个人风格的内容 |
| 接触过 Unity 或 UE | Godot 的概念有所不同,但学习曲线会更平缓 |
0.2.3 你不需要的东西
✅ 放心清单 以下这些你完全不需要: ✗ 数学专业背景(初中数学足够) ✗ 计算机科学学位 ✗ 绘画或设计能力(有配套美术资产) ✗
英语阅读能力(本书全中文,Godot 有中文文档) ✗ 昂贵的硬件(Godot 对配置要求极低,4GB 内存的电脑完全够用)
0.3 学习路径规划------你的专属学习地图
根据你的基础不同,本书提供三条建议的阅读路径。找到自己所在的那条,按图索骥即可。
- 路径 A 完全零基础 建议顺序:第 0 章(全读)→ 第 1-2 章(设计理念) → 第 3-4 章(Godot 工具)→ 第 5章(数据驱动) → 之后按本书章节顺序逐步推进 重点:不要跳过第 0.5 节,每章的代码示例 务必跟着在 Godot 里实际运行一遍。
- 路径 B 有编程基础 不了解 Godot 建议顺序:0.4(环境安装)→ 第 1-2 章(快速浏览) → 第 3-4章(重点学习节点/信号机制) → 第 5 章(数据驱动,开始搭《酒魂》底层) → 之后按章节顺序正常推进 重点:GDScript
的信号机制与你熟悉的事件系统思路不同, 第 4.2 节要认真看。 - 路径 C有 Unity/UE 等引擎经验 建议顺序:0.4(环境安装)→ 第 3-4 章对照阅读 → 第 5 章(《酒魂》数据框架,感受 Godot 节点哲学) → 之后按章节顺序正常推进 重点:Godot 的「一切皆节点」哲学与 Unity的GameObject/ Component 架构有本质区别,避免直接套用 Unity 思维。 第 4.1 节的类比说明专门为你准备。
⚠️通用建议 无论哪条路径,每一章的代码示例都请务必在 Godot里亲手跑一遍。读书和动手是两种截然不同的学习效果。你会发现,把代码真正运行起来之后,再回头看理论章节,清晰度会翻倍。
0.4 工具箱安装全流程
工欲善其事,必先利其器。本节带你把开发环境从零搭建完毕。如果你在安装过程中遇到问题,可以先查阅本节末尾的「常见错误速查」。
0.4.1 Godot 4.6 下载与安装
Godot 是本书的核心工具。它完全免费、开源,安装包不到 100MB,并且不需要管理员权限。
- 访问官网:https://godotengine.org/download
- 选择你的操作系统(Windows / macOS /Linux),下载「Standard」版本(不要选 .NET 版本,除非你打算用 C#)
- Windows 用户:下载的是一个 .zip 压缩包,解压后直接双击 Godot_v4.6_win64.exe即可运行,无需安装。建议把它放在一个固定的目录(如 D:\Godot\)。
- macOS 用户:下载 .dmg 文件,拖入 Applications文件夹。首次打开需要在「系统偏好设置 → 安全性」中点击「仍要打开」。
- Linux 用户:下载 .x86_64 文件,chmod +x 后即可运行。
🐛 常见问题 Windows 上双击无反应?右键选「以管理员身份运行」试试。如果提示缺少 DLL,通常是缺少 VC++运行库,在微软官网搜索「Visual C++ Redistributable」下载安装即可。
0.4.2 Git 与 Gitee 配置(版本控制,强烈建议)
版本控制是新手最容易忽视、又最后悔没用的工具。它的核心价值是:任何时候都可以「反悔」,回到过去的任意状态。
- 下载安装 Git:https://git-scm.com/download
- 注册 Gitee 账号(国内访问速度快):https://gitee.com
- 在终端(Windows 用 Git Bash)执行初始配置:
终端命令
# 设置你的身份(只需执行一次)
git config --global user.name "你的名字"
git config --global user.email "your@email.com"
# 在你的项目文件夹里初始化仓库
git init
git add .
git commit -m "初始化《酒魂》项目"
💡 养成好习惯 每次完成一个功能,就 commit 一次。提交信息写清楚做了什么,例如「完成背包拖拽功能」。三个月后你会感谢现在的自己。
0.4.3 验证安装------你的第一次「Hello, 酒魂」
所有工具装好之后,用以下方式验证一切正常:
-
打开 Godot,新建项目,起名「酒魂_测试」
-
在默认的 2D 场景里,添加一个 Label 节点(点击「+」按钮,搜索 Label)
-
在检查器右侧,找到 Text 属性,填入「你好,酒魂!」
-
按 F5 运行,如果窗口里出现那行文字,安装成功 ✅
res://HelloJiuhun.gd如果你想用代码实现同样效果,给 Label 挂载这个脚本:
extends Label
func _ready():
text = "你好,酒魂!"
print("Godot 运行正常,开始我们的旅程吧!")
0.4.4 安装问题速查表
| 症状 | 解决方法 |
|---|---|
| Godot 打开是英文界面 | 编辑器 → Editor Settings → Interface → Editor Language → 简体中文 |
| 运行项目时窗口闪一下就消失 | 查看底部「输出」面板的红色报错信息,通常是脚本语法错误 |
| Git commit 报错 'user not set' | 执行 0.4.2 中的 git config 命令设置用户名和邮箱 |
| macOS 上 Godot 无法打开 | 系统偏好设置 → 安全性与隐私 → 通用 → 点击「仍要打开」 |
0.5 15分钟 GDScript 急速入门(零基础专属)
📖 阅读说明 如果你已经有任何编程语言的基础,可以跳过本节,直接阅读第 5.6 节「GDScript vs Python对照速查」。本节专为完全没有编程经验的读者设计。
编程听起来很神秘,但它的本质非常简单:你用文字告诉电脑要做什么,电脑按照你说的去做。
GDScript 是 Godot专用的编程语言,它的语法接近自然语言,对新手非常友好。让我们用 15分钟把最核心的概念过一遍。
0.5.1 变量:给数据起一个名字
变量就是一个「盒子」,你往里面放数据,然后用名字来找到它。
变量基础示例
python
# 用 var 关键字创建变量
var player_name = "李白" # 文字(字符串)
var health = 100 # 整数
var drunk_level = 0.0 # 小数
var is_alive = true # 布尔值(真/假)
# 修改变量的值,就像往盒子里换东西
health = 80 # 受了伤,血量从100变成80
drunk_level = 0.3 # 喝了点酒,微醺状态
命名规则:用小写字母和下划线,名字要有意义。health 比 h 好,drunk_level 比 dl 好------三个月后你还能看懂自己写的代码。
0.5.2 函数:把一段指令打包成可复用的工具
如果变量是「放东西的盒子」,函数就是「做事的工具」。你定义好一个工具,之后可以反复调用它。
函数基础示例
python
# 用 func 关键字定义函数
func heal(amount):
health = health + amount
print("恢复了 " + str(amount) + " 点生命值")
# 调用函数------让玩家恢复 30 点生命
heal(30)
# 函数可以返回计算结果
func get_health_percent():
return health / 100.0 # 返回血量百分比
var hp_pct = get_health_percent() # hp_pct 现在等于 0.8
💡 关于缩进 GDScript 用缩进(Tab 键或 4
个空格)来表示代码属于哪个函数或条件块。这是新手最常犯错的地方。每行代码前面的空格数量必须一致,Godot
会帮你自动缩进,尽量不要手动修改。
0.5.3 条件判断:让代码做选择
程序需要根据不同情况做不同的事,这就是条件判断的用途。
条件判断示例
python
# if / elif / else 结构
if health <= 0:
print("你已倒下......")
is_alive = false
elif health <= 30:
print("危险!生命值告急!")
else:
print("状态良好,继续前行。")
# 多个条件用 and / or 连接
if drunk_level >= 0.8 and health > 50:
print("大醉!释放酒魂技!")
0.5.4 循环:重复做一件事
当你需要重复执行某段代码时,用循环代替复制粘贴。
循环示例
python
# for 循环:遍历一个列表
var ingredients = ["枸杞", "人参", "当归"]
for item in ingredients:
print("加入材料:" + item)
# while 循环:条件满足时一直执行
var brew_progress = 0
while brew_progress < 100:
brew_progress += 10
print("酿造进度:" + str(brew_progress) + "%")
# range() 生成数字序列(常用)
for i in range(5): # i 依次等于 0, 1, 2, 3, 4
print("第 " + str(i+1) + " 壶酒")
0.5.5 类与节点:在 Godot 中组织代码
在 Godot 里,每个脚本通常附属在一个节点(Node)上。extends 关键字告诉 Godot 这个脚本是哪种节点类型。
完整 Godot 脚本结构
python
# 这是一个完整的 Godot 脚本示例
extends Node2D # 说明这个脚本挂在 Node2D 节点上
# 变量定义在函数外面,整个节点都能访问
var player_name = "李白"
var health = 100
# _ready() 是特殊函数:节点加载完毕时自动调用一次
func _ready():
print("节点已准备好!玩家:" + player_name)
# _process(delta) 是特殊函数:每一帧都会调用
# delta 是上一帧到这一帧经过的时间(秒),用来保证
# 不同帧率的电脑上运动速度一致
func _process(delta):
pass # pass 表示「这里什么都不做」,占位用
0.5.6 信号:让节点之间「说话」
信号是 Godot 最重要的概念之一,也是最体现 Godot 特色的地方。它让节点之间可以互相通知,而不需要直接「认识」对方。
信号的定义与连接
python
# 节点 A:定义并发出信号
extends Node
signal brew_complete(wine_name, quality) # 定义一个信号
func finish_brewing():
var wine = "杜康美酒"
var quality = 85
emit_signal("brew_complete", wine, quality) # 发出信号
# 节点 B:接收信号并响应
extends Node
func _ready():
# 连接信号:当 BrewingVat 酿造完成,调用 _on_brew_complete
$BrewingVat.brew_complete.connect(_on_brew_complete)
func _on_brew_complete(wine_name, quality):
print(wine_name + " 酿造完成!品质:" + str(quality))
🎯 信号的妙处 用信号,BrewingVat(酿酒缸)不需要知道谁在监听它。任意数量的节点都可以连接同一个信号------UI
更新、成就检测、音效播放,同时触发,互不干扰。这就是观察者模式的精髓,我们会在后面的章节反复用到它。
0.5.7 小自测------5 题验证一下
以下 5个问题,思考一下然后翻到下方查看答案。不要跳过这个步骤,主动检索记忆是最有效的学习方式之一。
- Q1. 如何定义一个名为 current_wine 的变量,初始值为字符串「杜康美酒」?
- Q2. _ready() 和 _process() 各在什么时候被调用?
- Q3. 如果你想在玩家死亡时通知所有其他系统(UI、音效、存档...),用什么机制最合适?
- Q4. 以下代码的输出是什么? var x = 10 if x > 5: print("大") else: print("小")
- Q5. 如何用 for 循环打印「酿造第 1 壶」到「酿造第 5 壶」?
小自测参考答案
python
# 参考答案
# Q1: var current_wine = "杜康美酒"
# Q2: _ready() 在节点首次加载时调用一次;
# _process(delta) 每帧调用一次(通常 60次/秒)
# Q3: 信号(signal)------定义信号,在死亡时 emit,
# 各系统分别 connect 处理自己的逻辑
# Q4: 输出「大」(因为 10 > 5 为真)
# Q5:
for i in range(1, 6):
print("酿造第 " + str(i) + " 壶")
本章小结
你已经完成了出发前最重要的准备工作。让我们整理一下你在本章收获了什么:
- 认知校准:游戏开发的「难」是结构问题,不是能力问题。本书的每一章都是一个经过设计的拆解步骤。
- 自我定位:通过自测清单,你知道了自己的起点,并找到了对应的学习路径(A/B/C)。
- 工具就绪:Godot 4.6、VS Code、Git已经安装完毕,你做出了第一个能运行的 Godot 场景。
- 语言基础:掌握了 GDScript的五个核心概念------变量、函数、条件判断、循环、信号。
🚀 下一步 现在,翻到第 1 章,我们来谈谈游戏设计的哲学------ 在动手之前,先明白自己要做什么,能省去后期大量的「推倒重来」。
延伸阅读与资源
以下资源不是必须的,但如果你在本章某处卡住了,或者想深入了解某个主题,它们会很有帮助:
- Godot 官方文档(中文):https://docs.godotengine.org/zh_CN/ 最权威,遇到不懂的 API 第一时间查这里
- 《游戏编程模式》(Robert Nystrom 著,中文版免费在线阅读)本书设计模式部分的理论基础,强烈推荐
- Git 官方入门教程(中文):https://git-scm.com/book/zh 如果你想更系统地学习版本控制
- Godot 中文社区(贴吧 / B站搜索「Godot 教程」)遇到本书没有覆盖的问题时,这里通常能找到答案
------准备好了吗?我们继续。