第零章:新手的第一课:正确认知游戏开发

「合抱之木,生于毫末;九层之台,起于累土。」**------《道德经》

欢迎来到《酒魂》的开发之旅。在你打开 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,并且不需要管理员权限。

  1. 访问官网:https://godotengine.org/download
  2. 选择你的操作系统(Windows / macOS /Linux),下载「Standard」版本(不要选 .NET 版本,除非你打算用 C#)
  3. Windows 用户:下载的是一个 .zip 压缩包,解压后直接双击 Godot_v4.6_win64.exe即可运行,无需安装。建议把它放在一个固定的目录(如 D:\Godot\)。
  4. macOS 用户:下载 .dmg 文件,拖入 Applications文件夹。首次打开需要在「系统偏好设置 → 安全性」中点击「仍要打开」。
  5. Linux 用户:下载 .x86_64 文件,chmod +x 后即可运行。

🐛 常见问题 Windows 上双击无反应?右键选「以管理员身份运行」试试。如果提示缺少 DLL,通常是缺少 VC++运行库,在微软官网搜索「Visual C++ Redistributable」下载安装即可。

0.4.2 Git 与 Gitee 配置(版本控制,强烈建议)

版本控制是新手最容易忽视、又最后悔没用的工具。它的核心价值是:任何时候都可以「反悔」,回到过去的任意状态。

  1. 下载安装 Git:https://git-scm.com/download
  2. 注册 Gitee 账号(国内访问速度快):https://gitee.com
  3. 在终端(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, 酒魂」

所有工具装好之后,用以下方式验证一切正常:

  1. 打开 Godot,新建项目,起名「酒魂_测试」

  2. 在默认的 2D 场景里,添加一个 Label 节点(点击「+」按钮,搜索 Label)

  3. 在检查器右侧,找到 Text 属性,填入「你好,酒魂!」

  4. 按 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 教程」)遇到本书没有覆盖的问题时,这里通常能找到答案
    ------准备好了吗?我们继续。
相关推荐
KeepSeek1 小时前
大数据运维(1)
大数据·运维
汀沿河2 小时前
2 模型预训练、微调、强化学习的格式
人工智能·算法·机器学习
颜酱2 小时前
最小生成树(MST)核心原理 + Kruskal & Prim 算法
javascript·后端·算法
黄焖鸡能干四碗2 小时前
业务数据中台技术方案(PPT)
大数据·数据库·人工智能·安全·需求分析
潘达斯奈基~2 小时前
Spark踩坑:如何优化pandas_udf中的多维数组传输效率
大数据·spark·pandas
啊哦呃咦唔鱼2 小时前
LeetCode hot100-3 无重复字符的最长子串
算法·leetcode·职场和发展
apollowing2 小时前
PostgreSQL的备份方式
数据库·postgresql
phltxy2 小时前
算法刷题|模拟思想高频题全解(Java版)
java·开发语言·算法
宵时待雨3 小时前
C++笔记归纳10:继承
开发语言·数据结构·c++·笔记·算法