ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Godot 4入门:从零搭建第一个2D游戏场景

Godot 4入门:从零搭建第一个2D游戏场景 很多朋友在群里问我同一个问题想学做游戏到底从哪个引擎入手最合适。我的答案一直很直接——如果你只是想快速搭出第一个 2D 游戏场景不打算被授权费、安装流程和一堆专业术语劝退Godot 4 是非常值得投入时间的那一个。Godot 4 是目前开源游戏引擎里完成度最高的一代从下载安装、界面汉化到跑起来一个 2D 游戏场景整套流程在一个小时内就能走完而且完全免费没有隐藏分成没有“个人版”和“专业版”的功能阉割这在游戏引擎里算是非常少见的一股清流。这一篇是 Godot 入门系列的第一篇我会把版本选择、软件安装、界面汉化、创建项目、搭建场景、绑定脚本、运行调试这七个环节全部过一遍。文中的操作以 Windows 平台为例版本号以 Godot 4.2.x 或 4.3 stable 为基准macOS 和 Linux 的逻辑基本一致只是个别快捷键和文件格式略有差异。不管你是完全没接触过游戏引擎的新手还是准备从 Unity 转过来的老玩家都可以按这篇文章的步骤直接复现。而且我会把每个步骤背后“为什么要这么做”讲清楚不是单纯给你一张操作清单。1. 版本选择这一步决定了你后面是少踩坑还是多踩坑很多人第一次打开 Godot 官网就被下载页搞懵了页面上有几类不同的下载入口一眼看去似乎没有唯一的“官方正式版”。我见过有人随手下了一个旧版本跟着新教程写代码时各种报错最后还在群里问是不是自己的电脑出了问题。其实版本选择的逻辑非常简单关键就两件事选标准版还是 .NET 版选 4.x 还是 3.x。1.1 标准版与 .NET 版的取舍先给结论如果你是第一次接触这个引擎或者只打算用 GDScript 写游戏选中“标准版”就够了。标准版自带的脚本语言是 GDScript语法接近 Python比如定义一个变量就是var x 10打印一句话就是print(hello)几乎不需要额外的语言学习成本。引擎本身的内核是用 C 写的标准版已经包含了编辑器、导出功能和完整的官方文档没有任何功能上的缩水。那 .NET 版是拿来干嘛的呢它是给 C# 开发者准备的。如果你已经有比较扎实的 C# 基础而且未来计划和 Unity 的技术栈衔接可以考虑这个版本。但 .NET 版比标准版体积大需要额外安装 .NET SDK首次加载工程时也明显会慢一些。更关键的一点是它在插件生态上会和标准版有差异部分第三方插件在 .NET 版上可能需要额外处理程序集引用对新手来说属于凭空多出来的麻烦。我个人的建议很明确初学阶段先别碰 .NET 版。原因在于游戏开发初期的核心矛盾是快速理解场景、节点、信号、生命周期这些概念而不是提前引入语言工具链的编译与依赖问题。GDScript 的上手速度比 C# 快一个量级当你还没搞懂节点树的时候C# 只会成为额外的干扰项。等你能熟练跑通场景、脚本和信号这些基础机制再回头对比两种语言也不迟。提示Godot 4.x 的标准版和 .NET 版并不是“同一个引擎多加一种语言”这么简单。两者的导出模板、插件兼容范围都存在细微区别选型时不要只看表面的功能对照表。1.2 4.x 和 3.x 根本不是同一个引擎别再被老教程带偏另一个经常让新手纠结的问题是“网上很多教程是 Godot 3.x 写的我要不要跟着老教程用旧版本”我的答案是除非你手头的项目已经在旧版本里跑起来了否则一律直接用 4.x。这里用“升级”来形容 4.x 和 3.x 的差异并不准确因为底层架构几乎重写了一遍。4.x 引入了全新的渲染体系支持 Forward、Mobile、Compatibility 三种渲染方式光照系统全部重构物理引擎换成了新的内部实现连 GDScript 语法都做了大幅调整。你如果照着 3.x 的老教程敲 4.x 的代码大概率会在语法层面遇到一堆不兼容报错不仅浪费时间还会严重打击信心。版本差异这件事可以用一个表格快速看清楚对比维度Godot 3.xGodot 4.x渲染体系单一旧渲染管线Forward / Mobile / Compatibility 三选一脚本语言旧版 GDScript新版 GDScript增强静态类型提示关键字调整物理引擎旧版 Godot Physics新 Physics 实现可选 Jolt 物理引擎2D 导航Navigation2D 等旧节点NavigationAgent2D 统一接口光照系统2D / 3D 分离统一光照架构2D 也支持更复杂的光影顺带提一句4.x 的编辑器界面和 3.x 也不一样。4.x 的布局更扁平场景面板、节点面板的默认位置有调整工具栏把“移动、旋转、缩放”合并成了统一模式。这些视觉差异很容易让你在换版本时产生“我是不是下载了错误版本”的错觉其实只是教程年代不同而已。选 4.x 还有一个非常重要的原因目前社区生态已经完全向它靠拢官方文档、第三方教程、插件仓库都以 4.x 为主。真用到旧版本的资源你会发现自己连问题都不太好搜。选 4.x你的学习连贯性会好很多。2. 下载和安装我踩过的两个隐蔽坑确定版本之后安装这一步看上去毫无技术含量但我在实际帮朋友处理安装问题时发现绝大多数卡住的人不是不会点鼠标而是踩了两个隐蔽的路障。这两个坑在教程里很少被提到但一旦遇到就会让你误以为是自己的电脑坏了。2.1 官方下载渠道与不同平台的安装方式Godot 的官网是 godotengine.org下载时认准这个官方域名。搜索引擎结果里带有“推广”标识的下载链接不一定是官网有时候会把你引向第三方打包站下载下来的文件可能被捆绑了其他软件所以第一步就要养成从官网下载的习惯。进入 Download 页面后Windows 用户会看到Godot_v4.x-stable_win64.exe.zip之类的 ZIP 压缩包体积大概 50MB。下载后不需要执行任何安装程序直接解压到你习惯存放开发工具的目录双击里面的 exe 就能启动编辑器。Godot 和传统意义上的商业引擎在安装体验上最大的不同是它没有注册表、没有启动器、没有后台服务本质上就是一个绿化软件。macOS 平台下载的是通用二进制或 app 压缩包解压后需要右键点击“打开”在系统安全提示中选择“打开”绕过因为不是 App Store 应用而出现的拦截提示。Linux 用户一般下载 x86_64 平台的 AppImage 文件下载后需要先给它执行权限在终端执行chmod x Godot_v4.2.2-stable_x11.64然后再双击运行。我第一次使用 Godot 时犯过一个低级错误直接把 ZIP 包解压到了桌面然后嫌压缩包占地方就给删了。后来游戏项目多起来想找编辑器版本号看是否满足某个插件要求时根本找不到版本信息想卸载也没有卸载程序只能手动删文件夹。这里我必须多说一句从第一天起就建立一个固定的工具目录比如D:\DevTools\Godot\4.2.2-stable\按版本号建子目录后续升级时下载新版本解压到同级目录旧版本整个文件夹删除即可。这个习惯一开始就养成可以省去后面很多管理混乱的烦恼。2.2 显卡驱动和默认渲染器2D 项目也可能被卡住第二个隐蔽坑出现在打开编辑器之后。Godot 4 默认的 Forward 渲染器对显卡硬件和驱动有要求即便是纯 2D 项目编辑器界面本身也会调用 GPU 做实时渲染。如果你用的是比较老的核显或者系统没有正确安装显卡驱动打开编辑器以后很可能遇到以下症状画面花屏、窗口黑屏、着色器编译偶尔报错、界面闪烁不停。遇到这种问题解决套路分两步。第一步是更新显卡驱动这是首选方案第二步是降低渲染模式将项目渲染器从 Forward 切换为 Mobile 或 Compatibility。这里重点解释一下 Compatibility 渲染器它使用 OpenGL 兼容模式在桌面平台上相当于老牌 GLES 兼容对旧硬件的包容度极高。我实测下来很多低配笔记本在跑 2D 项目时用 Compatibility 模式反而比 Forward 稳定得多。所以对于纯 2D 游戏项目我的建议非常直接新建项目时就直接选 Compatibility除非你的 2D 游戏要用到复杂的光影特效、动态 2D 光照、或未来计划在同一个项目里加入 3D 内容。这一点新手朋友可能不太理解但记住这个结论能帮你省掉很多后面找问题的精力。注意选择 Compatibility 渲染器时Forward 独有的高级特性如 SDFGI、体积雾会不可用但对于 2D 游戏来说这些特性几乎用不上所以不用担心功能缺失。3. 汉化编辑器界面中文化不只是一次切换Godot 4 对中文的支持比旧版本好很多但汉化并不是默认开启的。首次启动时编辑器显示的是英文界面菜单、右键选项、属性面板、节点名看上去都是英文的。对刚开始接触游戏引擎的朋友来说这个界面确实不太友好所以汉化应该排在最优先的位置。3.1 编辑器界面的中文切换步骤要把编辑器界面切换成简体中文按下面的步骤操作打开 Godot 编辑器首次启动会进入“项目管理器”页面。这个页面本身也是英文的但没关系先点击右上角“Settings”按钮在下拉菜单里选择“Editor Settings”。弹出的设置窗口左侧是分类树展开“Interface”节点。找到“Editor Language”选项点击右侧下拉框在语言列表里选择“Chinese (Simplified)”或“简体中文”。关闭设置窗口重启一次编辑器。重启后项目管理器、场景面板、节点面板、属性检查器全部会显示为中文。这一步操作十分简单但是我发现很多新手对汉化存在一个误解他们以为需要额外下载中文语言包或者要用第三方汉化工具。实际上 Godot 4 的官方版本本身就内置了多语言资源不需要下载任何额外的汉化补丁。市面上某些教程让你去下载“中文汉化包”的基本都是基于旧版本的经验在 4.x 中已经完全过时了。汉化完成之后我建议顺手做两个视觉层面上的小优化。第一个是主题设置在 Editor Settings → Interface → Theme 下可以选择预设主题我个人比较喜欢把编辑器调成深色主题这样在场景视图中做节点连线时视觉对比度会更清晰眼睛也不容易累。第二个是界面缩放在高分屏上Godot 默认编辑器界面的文字可能非常小。在 Editor Settings → Interface → Editor → Display Scale 里把缩放比调到 1.25 或 1.5观感会舒服很多。这种偏好设置就像编程 IDE 的字体设置一样早调早享受。3.2 中文字体显示异常的处理经验汉化完成后还有一个隐藏问题值得你知道编辑器汉化后的中文显示依赖系统字体在部分 Linux 发行版或精简版 Windows 系统上中文字符可能显示成方框□□。这不是 Godot 引擎本身的 bug而是系统缺少合适的中文字体文件。解决的思路很直接给系统安装一款开源中文字体比如思源黑体、文泉驿正黑Windows 10/11 自带微软雅黑一般不出现这个问题但精简版系统需要自己装。这个问题的影响范围不止编辑器它会延伸到你制作的游戏项目里。Godot 默认的自带字体只覆盖拉丁字符集不包含中文字符。如果你在 Label 组件里输入中文编辑器中可能看起来是正常的但打包导出后运行时游戏里的中文大概率会变成乱码或者干脆不显示。这个问题你的项目越早处理越省心核心思路是在 Label 的 Theme Override 中手动指定一个包含中文字形的字体文件比如游戏项目里自带一个开源中文字体注意授权。现在先把结论记下来凡是涉及游戏内中文显示第一件事就是检查节点上的 Font 是否指向一个完整的字体资源。4. 创建第一个 2D 项目从项目设置到场景树的规划汉化完成以后回到项目管理器点击“新建”按钮开始创建我们的第一个 2D 游戏项目。很多新手卡在这一步倒不是不会点按钮而是对“项目路径”“渲染器”“场景树”这些概念缺乏整体理解。我在这里把关键逻辑拆开讲清楚。4.1 新建项目时的命名与渲染器选择新建项目的弹窗里最显眼的是三个字段项目名称、项目路径、渲染器选项。项目名称和路径看起来没有技术含量但有一个小建议项目名尽量用英文或拼音不要直接使用中文。虽然 Godot 4 对中文路径的兼容性比旧版本好很多但当你之后要接入第三方插件、使用命令行工具导出、或者把项目放进 Git 做版本管理时中文路径偶尔会带来一些难以定位的编码问题。项目名称创建后在配置中修改比较麻烦干脆从一开始就使用英文命名所有项目文件都会清爽很多。然后是渲染器选项。创建项目时渲染器下拉框有三个选择Forward、Mobile、Compatibility。我在第 2 节已经说过对大多数 2D 游戏项目建议直接选 Compatibility。原因不再赘述这里补一句你可以在“项目设置”里随时修改渲染器但切换后部分已配置的着色器或光照相关资源可能需要重新调整。既然能一开始选对就别为后面找麻烦。至于 Mobile 渲染器它的目标平台是移动设备在桌面端做 2D 项目时基本用不上这里不做展开。4.2 根节点类型的选择逻辑为什么是 Node2D项目创建成功后编辑器会打开一个空白的场景标签页。此时最左边是“场景”面板中间是“2D 视图”和“3D 视图”切换按钮右边是“检查器”面板下方是“输出”和“错误”面板。第一次打开觉得信息量大是正常的你只需要先记住一个核心原则Godot 的一切游戏内容都由节点组成一个场景就是一棵节点树节点之间是父子关系。现在我们第一次要做的核心操作是创建根节点。在“场景”面板中点击“场景”菜单 →“新建场景”或者在场景面板空白处右键选择“添加子节点”。这时会弹出一个节点搜索框直接输入“Node2D”即可。为什么 2D 项目的根节点通常选 Node2D而不是 Node 或者 Sprite2D因为 Node2D 自带 2D 坐标变换能力即位置、旋转、缩放。子节点会跟随父节点一起移动、旋转、缩放这是搭建一切游戏对象的基础。Node 只是纯逻辑容器没有坐标概念Sprite2D 虽然能显示图片但它本身默认为渲染图片服务的直接拿它当根节点会限制节点的组织方式。正确的做法是用 Node2D 作为游戏对象玩家、敌人、物品的根节点再用 Sprite2D、CollisionShape2D、Area2D 等作为它的子节点层层嵌套。这种组织方式不是 Godot 特有的它是组件化游戏引擎应对复杂结构演变的通用范式。只要你掌握了一层的概念后面做任何复杂对象时思路都是一样的。创建完根节点记得按 CtrlS 保存场景。Godot 的场景文件是文本格式的.tscn你可以用记事本打开看看里面的结构这也是理解 Godot 数据层的好方法——游戏场景在磁盘上的本质是一堆有层级关系的文本节点描述而不是不可读的二进制文件。5. 搭一个最简单的 2D 场景从空节点到可视内容现在场景树上只有一个根节点 Node2D它本身是不可见的。如果现在运行游戏屏幕上只会是一片漆黑或空白。我们要在根节点下添加几个子节点让场景里有真正“看得见”的东西。5.1 从 ColorRect 到 Sprite2D直观理解可见节点第一种可见节点是“ColorRect”中文叫彩色矩形。在节点搜索框里输入 ColorRect添加后检查器面板中会出现 Colors 属性也就是填充色。把颜色调成你喜欢的任意 RGB 值再去 2D 视图中拉伸它的尺寸你会立刻看到画面上出现了一个实色块。这种反馈对新手来说非常友好它向你说明了 Godot 的一个核心机制你看到的画面实际上是一组资源组合后的渲染结果而不是某个“画布”上直接绘制出来的固定图片。当然一个纯色方块不够“游戏”。一个更贴近实际操作的方案是找一张游戏素材 PNG 图片可以自己做也可以用引擎自带测试图把它直接拖拽到编辑器右下角的“文件系统”面板中。Godot 会自动完成图片的导入步骤。然后在节点树中右键添加一个“Sprite2D”节点选中它检查器里找到 Texture 属性点击下拉框选择你刚导入的那张图片。图片会立刻显示在 2D 视图中画面上就出现了一个真正意义上的“角色”图形。在这两类可见节点之外场景还需要一个背景。继续添加一个 ColorRect并把它拖到角色节点下面即作为 Node2D 的子节点但层级位于最底部。然后根据你的游戏内容设置它铺满屏幕。Godot 4 的 2D 场景坐标原点在屏幕左上角X 轴向右Y 轴向下。这个方向和数学里常见的坐标系相反初学阶段非常容易搞混你先记着一个结论想让一个节点铺满整个屏幕最简单的方法是在检查器里选择“Layout”中的“Full Rect”预设。搭好这些可见元素后保存一次场景。此时场景树应该长这样Node2D根→ 背景 ColorRect、角色 Sprite2D。这就是完整的场景层级结构在后面所有 GamePlay 中它将作为逻辑的基底不断扩展。5.2 附加第一个 GDScript 脚本让场景动起来有了可见的场景接下来要让角色“活起来”。在 Godot 中脚本不是独立存在的逻辑单元而是绑定在节点上的行为组件。那么具体操作是右键点击角色节点Sprite2D选择“附加脚本”。在弹出的对话框中保持默认的 GDScript 语言和文件名点击“创建”。编辑器会自动打开代码编辑器并生成一个模板extends Sprite2D # Called when the node enters the scene tree for the first time. func _ready() - void: pass # Replace with function body. # Called every frame. delta is the elapsed time since the previous frame. func _process(delta: float) - void: pass首先要理解两个生命周期函数的意义_ready在节点进入场景树时执行一次适合做初始化赋值、连接信号等操作_process在每一帧被调用参数delta是上一帧到当前帧之间的间隔秒数适合做持续的更新逻辑比如移动、计时、动画切换。为了让角色能够通过键盘移动我们把_process函数改成extends Sprite2D var speed : 300.0 func _ready() - void: print(角色已就绪) func _process(delta: float) - void: if Input.is_action_pressed(ui_right): position.x speed * delta elif Input.is_action_pressed(ui_left): position.x - speed * delta if Input.is_action_pressed(ui_down): position.y speed * delta elif Input.is_action_pressed(ui_up): position.y - speed * delta这段代码的逻辑很容易看懂定义了一个速度常量 speed在_ready中打印一条日志在每一帧检查四个方向的输入动作根据按下的方向调整节点位置。这里的ui_right、ui_left、ui_up、ui_down是 Godot 内置的输入动作项目设置中已经默认绑定到了键盘方向键上所以不需要额外配置。这就是一个最简可玩的小游戏雏形——一个可以控制移动的方块或者角色。如果你对delta的乘法感到别扭我给你一个不那么严谨但是非常容易记住的解释游戏画面的帧与帧之间的间隔并不固定。如果你直接写position.x 300那么在 60 FPS 和 30 FPS 下角色移动速度会差一倍。乘以delta后300 变成了“每秒移动 300 像素”帧率波动时整体速度保持稳定。这是所有游戏引擎通用的运动计算方式早点习惯后面写任何移动逻辑都能少走弯路。6. 运行与调试验证第一个场景真正跑起来场景搭好了脚本写完了到了最激动人心的环节点击编辑器右上角的“播放”按钮三角形图标。第一次运行时Godot 会弹出一个提示询问你要把哪个场景作为主场景。这个“主场景”就是每次按 F5 时引擎启动的那个场景。选择我们刚刚保存的main.tscn点击“选择”即可。此后引擎会记住这个设置后续再按 F5 就直接运行了。6.1 运行时调试面板输出、错误与远程场景树运行之后游戏窗口会弹出来画面中应该能看到你搭建的背景和角色。按方向键角色会在场景中移动。如果你在_ready里写了print语句编辑器底部的“输出”面板会显示对应日志。如果脚本有错误错误信息会以红色字体出现在“错误”面板双击错误条目可以跳转到出错的代码行。输出和错误两个面板是接下来整个开发周期中你使用最频繁的调试工具不要觉得它们是事后才需要看的东西。运行过程中还有一个极其实用的功能在编辑器顶部的“调试”菜单里找到“远程”打开后可以在运行时实时查看场景中的节点树和每个节点的属性值。也就是说游戏运行起来以后你可以随时看到角色的坐标、速度、当前颜色甚至可以直接在远程场景树里修改属性而不需要停止游戏。很多新手对此完全不了解结果只能靠猜测来排查问题。实际上运行时实时查看和修改节点属性是 Godot 在易用性上领先很多商业引擎的亮点功能之一。以后角色位置不对、属性没生效第一反应应该是打开远程场景树而不是四处打印变量。6.2 常见运行报错与排查思路第一次运行场景大概率会遇到几个报错以下按踩坑频率排序报错或现象原因解决方式“No main scene is defined”没有设置主场景“项目”→“项目设置”→“运行”→“Main Scene”中指定Parse Error: Expected expression脚本语法错误常见为中文全角括号或分号把输入法切到英文模式检查标点黑屏或窗口闪烁GPU 驱动或渲染器兼容问题更新驱动或切换为 Compatibility 渲染器找不到文件res://...资源被删除但.import文件保留旧引用在“文件系统”面板右键资源选择“重新导入”这里特别想提醒一句报错不可怕关键是要养成“先看错误面板再问人”的习惯。Godot 的错误信息虽然有时候写得让人看不懂但绝大多数语法级报错都能通过双击跳转准确定位到具体行号。初学阶段八成以上的报错原因是标点符号用了中文全角这是我在帮助新手排查时遇到频率最高的问题没有之一。至于这一篇的最终验收标准运行起来你能控制角色在场景中移动背景颜色显示正常输出面板中能看到自己的日志信息。这套环境就算正式搭建完成了。后续我们会在这些基础节点之上加入真正的游戏循环逻辑、碰撞检测、敌人 AI、动画播放等内容所有扩展都建立在今天这棵场景树和脚本调用之上。最后再分享一个我的个人经验。很多人第一天装完 Godot兴奋地跑通了场景第二天醒来发现代码语法全忘光了连Input.is_action_pressed的拼写都要翻文档。这太正常了。建议你把_ready、_process、Input.is_action_pressed、delta这几个基础概念记在手机备忘里连续三天每天默写一遍。语法会忘不怕只要你理解了“节点拥有行为”和“每一帧更新”这两个核心心智模型Godot 真正拦人的地方就不在“不会写”而在“想不清”。能按这篇跑通第一个场景你的 Godot 之旅算是真正开始了。
返回列表