Godot2D学习
快速切换界面
- Ctrl + F1, 2D界面
- Ctrl + F2, 3D界面
- Ctrl + F3, Script界面
- Ctrl + F4, Game界面
- Ctrl + F5, AssetLib界面
节点 Node
在Godot中,一个节点是最小的组成元素。可以在下面挂载其他节点,也可以被其他节点挂载。
在初始中选择一个节点,或者单独创建一个节点。


创建节点以后,右键该节点,可看到能够操作的内容

检视窗口 Inspector
可以查看和修改节点的属性。必须要点击某个节点才能看到检视内容,而且点击不同节点,检视内容也会不同。


绿色节点代表UI节点
文件系统

res是整个项目的根目录。右键此处弹出资源操作框,可以创建文件夹,也可以创建资源文件。
场景节点 Scene
有2D场景节点 ( Node2D ) 和3D场景节点 ( Node3D ) 。
默认可以创建2D或3D节点。如何创建新节点见上面节点一节。
如果场景未保存,会有星星表示。如下图显示

最好是将场景单独保存在场景目录中,方便管理。


可以在项目配置中修改主场景


运行

最左面的会直接运行项目,右侧的则是单独运行此场景或选择场景执行。
初始选择的发布平台质量也可以在此修改,位置如下图所示:

不建议在创建工程后更改
渲染层级关系
同一层级优先度下,在树状结构下面的会覆盖在上面的
更大数值的序号会更贴近于视窗(也即离玩家眼睛更近)
下层盖上层,大数盖小数


子节点可编辑
如果有个节点,内含子节点,在实例化的节点中想修改其子节点,那么右键想修改的节点,勾选子节点可编辑即可。

摄像机(2D)
如果想让摄像机跟随角色移动,将摄像机创建为玩家的子节点是个好方法。

摄像机能够跟随玩家移动。调整Zoom可以拉近或拉远视角。数值越大,看到的越少,越聚焦;数值越小,看到的越多。

如果想让摄像机缓动,开启smooth功能

如果在一定范围内不希望有缓动效果,而是在靠近某个屏幕边缘时再缓动,则可以使用Drag功能。

多边形区域
有时我们需要一些特定的区域,而这些区域是多边形的,此时,我们需要使用到三个节点去完成这部分区域的绘制:area2D、collisionPolygon2D、polygon2D。
如下图所示创建节点

点击CollisionPolygon2D,选择添加点,在场景视口中创建图形。

如果想调整或修改形状,或者加点,则使用修改点工具进行修改即可
这里的形状是可以复制给polygon2d节点使用的。


复制好以后,可以修改颜色,或者赋予贴图

保存独立场景
右键某个节点,点击"将分支保存为场景",然后选择保存路径,即可将那个节点保存为独立节点。

目录结构
文件格式:.tscn 场景、.gd 逻辑、.tres 文本数据配置(可读、可 Git 对比)、.res 二进制大文件、.json/.sav 运行时存档。
用 .tres 的场景:游戏数值、预制资源、编辑器设置,切忌存运行时临时状态(血量用 var/Dictionary)。按业务模块拆、不按数量:每个实体一个文件,大列表做 ItemDatabase.tres 存 Array[Resource] 引用、每个道具单独小文件,减少 Git 冲突。
运行时生成并保存的存档用
.json/.sav,别用.tres(属性增减会导致旧存档报错)。
目录布局(按模块/系统分 + core/ 核心共享层):
your_game/
├── project.godot
├── config/ # 全局只读配置(.tres)
├── core/ # 核心层:base/ 抽象类、singletons/ 管理器、utils/ 工具
├── modules/ # 业务模块层:character/ inventory/ skill/ menu/
│ └── inventory/ # 例:背包 = ui/ + inventory.gd + item_data/
│ ├── items/ # 每个道具一个 .tres(上千个也没问题)
│ └── item_database.tres # 只存 Array[Resource] 引用
├── levels/ # 关卡场景(组装 modules,配置独立 .tres)
├── assets/ # 纯美术/音频(只被引用)
└── addons/ # 第三方插件
core/ 不引用 modules/;modules/ 一系统一文件夹(删系统即删文件夹);levels/ 场景只组装、配置独立 .tres 给策划调;跨系统通信走 event_bus.gd 信号总线(模块互不引用);路径用常量统一管理,UI 在 level_1.tscn 并列挂载而非嵌进 player.tscn。
config/ 里放什么
config/ 装的是跨系统共享、只读、出厂默认的全局数值——不归属任何单一模块,又不该硬编码进代码的东西。建议按用途拆小文件:
| 文件 | 内容 | 谁在读 |
|---|---|---|
game.tres | 标题、版本号、窗口默认尺寸、作者/公司名 | 启动画面、标题栏 |
balance.tres | 全局平衡:经验曲线、难度倍率、经济参数 | 多模块共读的数值 |
audio.tres | BGM/SFX/UI 三轨出厂音量、总线引用 | 音频管理器 |
ui.tres | 全局字体、主题色、字号、UI 缩放、SafeArea | UI 层各处 |
localization.tres | 默认语言、支持的语言列表 | 本地化系统 |
三条边界原则:
- 只读 + 出厂默认:运行时可变偏好(音量、语言、按键、分辨率)别放这——读
user://settings.json覆盖,config/只存出厂值。 - 与
modules/的分工:模块自己的数值放模块内(如modules/inventory/下),config/只放两个以上系统都会读的全局数据。 - 配一个
Settings单例(放core/singletons/):启动时加载并缓存config/*.tres,代码里用Settings.game.title访问,消灭 magic number。InputMap、autoload 列表这类编辑器配置别塞进来,那是project.godot的事。