命名规范
| 类型 | 命名规范 | 示例 |
|---|---|---|
| 文件与文件夹 | snake_case (蛇形) |
player_controller.gd, assets/ |
| 类名 / 脚本名 | PascalCase (大驼峰) |
PlayerController, YAMLParser |
| 场景节点名 | PascalCase (大驼峰) |
HitBox, Camera3D, Player |
| 函数 / 方法 | snake_case (蛇形) |
func load_level(): |
| 变量 / 信号 | snake_case (蛇形) |
var player_health, signal door_opened |
| 常量 / 枚举成员 | CONSTANT_CASE (全大写) |
const MAX_SPEED = 200 |
文件夹结构。
这套结构采用了"按功能模块分类"的逻辑,非常适合中大型项目的长期维护:
text
res:// (项目根目录)
├── addons/ # 第三方插件(从资产商店下载的插件放这里)
├── assets/ # 纯美术与音频资源(不参与逻辑,只负责存放素材)
│ ├── audio/
│ │ ├── music/ # 背景音乐
│ │ └── sfx/ # 音效
│ ├── fonts/ # 字体文件 (.ttf, .otf)
│ ├── images/ # 通用图片(如Logo、背景图)
│ ├── sprites/ # 精灵图/贴图
│ ├── textures/ # 3D纹理或程序化材质贴图
│ └── models/ # 3D模型文件 (.glb, .obj)
├── scenes/ # 所有的场景文件 (.tscn)
│ ├── actors/ # 游戏中的动态实体
│ │ ├── player/ # 玩家相关(如 player.tscn, player.gd)
│ │ ├── enemies/ # 敌人相关
│ │ └── npcs/ # NPC相关
│ ├── levels/ # 关卡与地图场景
│ │ ├── world_map.tscn
│ │ └── level_01.tscn
│ ├── ui/ # UI界面场景
│ │ ├── main_menu.tscn
│ │ ├── game_hud.tscn
│ │ └── pause_panel.tscn
│ └── systems/ # 全局系统场景(如 autoload 的单例场景)
├── scripts/ # 独立的 GDScript 脚本文件 (.gd)
│ ├── globals/ # 全局单例脚本(非场景类,如 global_data.gd)
│ ├── components/ # 可复用的组件化脚本(如 health_component.gd)
│ ├── utils/ # 纯工具类、算法类脚本
│ └── resources/ # 自定义 Resource 资源的配套脚本
├── resources/ # 游戏数据资源 (.tres, .res)
│ ├── items/ # 物品数据(如 sword.tres, potion.tres)
│ ├── characters/ # 角色属性配置数据
│ └── levels/ # 关卡专属的配置数据
└── docs/ # 项目开发文档(Godot导出时会自动忽略此文件夹)
├── design.md # 核心设计草案
└── todo.md # 开发待办清单
结构设计核心思路
-
assets/与scenes/彻底分离
assets/文件夹只负责存放最原始的素材(图片、声音、模型),而scenes/负责将这些素材组装成带有逻辑的游戏对象。这样做的好处是,当你的项目变大时,找一张图和找一个游戏场景不会混在一起。 -
scripts/独立存放虽然 Godot 允许把
.gd脚本和.tscn场景放在同一个文件夹里,但对于稍微复杂一点的项目,将纯代码脚本抽离到scripts/目录下,会让你的版本控制(Git)提交记录更加清晰,也方便复用代码。 -
充分利用
resources/管理数据Godot 强大的自定义资源(Custom Resources)系统非常适合做数值策划。将物品的属性、敌人的血量等数据剥离出来放在
resources/里,以后你想调整数值平衡时,完全不需要去碰复杂的代码逻辑。 -
善用
docs/文件夹在根目录建一个
docs/用来放你的设计草稿、待办事项或者 AI 对话生成的需求文档。Godot 在打包导出游戏时,默认只会打包引擎识别的资源文件,这些.md或.txt文档不会被塞进最终的游戏包里,所以你可以放心地把项目笔记存在这里。