初面网初面网

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节点。如何创建新节点见上面节点一节。

如果场景未保存,会有星星表示。如下图显示

未保存场景

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

选择路径保存场景

选择路径保存场景

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

修改主场景

修改主场景1

运行

场景运行

最左面的会直接运行项目,右侧的则是单独运行此场景或选择场景执行。

初始选择的发布平台质量也可以在此修改,位置如下图所示:

发布平台

不建议在创建工程后更改

渲染层级关系

同一层级优先度下,在树状结构下面的会覆盖在上面的

更大数值的序号会更贴近于视窗(也即离玩家眼睛更近)

下层盖上层,大数盖小数

下层盖上层

大数盖小数

子节点可编辑

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

子节点可编辑

摄像机(2D)

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

创建摄像机

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

摄像机zoom

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

摄像机缓动

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

摄像机Drag

多边形区域

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

如下图所示创建节点

多边形区域

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

创建区域

如果想调整或修改形状,或者加点,则使用修改点工具进行修改即可

这里的形状是可以复制给polygon2d节点使用的。

创建区域

复制数据

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

修改

保存独立场景

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

保存独立场景

目录结构

文件格式.tscn 场景、.gd 逻辑、.tres 文本数据配置(可读、可 Git 对比)、.res 二进制大文件、.json/.sav 运行时存档。

.tres 的场景:游戏数值、预制资源、编辑器设置,切忌存运行时临时状态(血量用 var/Dictionary)。按业务模块拆、不按数量:每个实体一个文件,大列表做 ItemDatabase.tresArray[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.tresBGM/SFX/UI 三轨出厂音量、总线引用音频管理器
ui.tres全局字体、主题色、字号、UI 缩放、SafeAreaUI 层各处
localization.tres默认语言、支持的语言列表本地化系统

三条边界原则:

  1. 只读 + 出厂默认:运行时可变偏好(音量、语言、按键、分辨率)别放这——读 user://settings.json 覆盖,config/ 只存出厂值。
  2. modules/ 的分工:模块自己的数值放模块内(如 modules/inventory/ 下),config/ 只放两个以上系统都会读的全局数据。
  3. 配一个 Settings 单例(放 core/singletons/):启动时加载并缓存 config/*.tres,代码里用 Settings.game.title 访问,消灭 magic number。InputMap、autoload 列表这类编辑器配置别塞进来,那是 project.godot 的事。

更新于 2026/8/5