进阶阶段
一、3D 开发
1.1 2D vs 3D 开发差异
| 方面 | 2D 开发 | 3D 开发 |
|---|---|---|
| 坐标系 | Vector2 (x, y) | Vector3 (x, y, z) |
| 节点类型 | Node2D, Sprite2D | Node3D, MeshInstance3D |
| 物理 | 简化物理 | 完整 3D 物理 |
| 摄像机 | Camera2D | Camera3D |
| 复杂度 | 相对简单 | 更复杂 |
1.2 3D 核心概念
3D 节点类型
Node3D:3D 场景的基础节点,包含 3D 变换MeshInstance3D:显示 3D 模型CharacterBody3D/RigidBody3D:3D 物理体CollisionShape3D:3D 碰撞形状Camera3D:3D 摄像机DirectionalLight3D/OmniLight3D/SpotLight3D:光源
坐标系与变换
# 3D 移动
position += transform.basis * Vector3.FORWARD * speed * delta
# 旋转
rotation.y += rotation_speed * delta
# 看向目标
look_at(target_position, Vector3.UP)
1.3 2.5D 游戏开发
2.5D 是一种在 3D 环境中使用 2D 精灵的风格:
- 真实的 3D 场景和光照
- 2D 精灵作为角色和物体
- 类似《咩咩启示录》的现代视觉风格
参考文章:
二、着色器编写
2.1 着色器基础
着色器(Shader)是运行在 GPU 上的小程序,用于控制图形渲染效果。
Godot 着色器类型:
canvas_item:2D 着色器,用于精灵、UIspatial:3D 着色器,用于 3D 模型particles:粒子系统着色器
着色器结构:
shader_type canvas_item;
uniform vec4 color : source_color = vec4(1.0);
uniform float speed : hint_range(0.0, 10.0) = 1.0;
void vertex() {
// 顶点变换
VERTEX += vec2(sin(TIME * speed) * 10.0, 0.0);
}
void fragment() {
// 像素颜色计算
COLOR = texture(TEXTURE, UV) * color;
}
2.2 常用 2D 着色器效果
呼吸发光效果
shader_type canvas_item;
uniform float speed = 2.0;
uniform float strength = 0.5;
void fragment() {
float pulse = sin(TIME * speed) * 0.5 + 0.5;
COLOR = texture(TEXTURE, UV) * vec4(1.0, 1.0, 1.0, pulse * strength);
}
水面波纹效果
shader_type canvas_item;
uniform sampler2D noise_texture;
uniform float wave_speed = 1.0;
uniform float wave_strength = 0.02;
void fragment() {
vec2 uv = UV;
float wave = sin(uv.y * 10.0 + TIME * wave_speed) * wave_strength;
uv.x += wave;
COLOR = texture(TEXTURE, uv);
}
2.3 视觉着色器(Visual Shader)
Godot 提供节点化的视觉着色器编辑器,无需编写代码:
- 通过拖拽节点连接创建效果
- 实时预览效果
- 适合初学者和快速原型
参考文章:
三、性能优化
3.1 通用优化原则
对象池(Object Pooling)
- 预先创建对象,重复使用而非频繁创建/销毁
- 适用于子弹、敌人等频繁生成的对象
LOD(细节层次)
- 根据距离切换不同精度的模型
- 远距离使用低模,近距离使用高模
纹理优化
- 使用压缩纹理格式
- 合理控制纹理尺寸
- 合并小纹理为图集
3.2 2D 性能优化
| 优化项 | 建议 |
|---|---|
| 碰撞检测 | 使用 Layer 和 Mask 过滤碰撞对象 |
| 动画 | 使用 AnimatedSprite2D 而非逐帧修改 Sprite |
| 粒子效果 | 限制粒子数量,使用 GPUParticles2D |
| UI 更新 | 避免每帧更新 UI,使用信号驱动 |
3.3 3D 性能优化
碰撞体优化
- 静态环境使用
StaticBody3D - 动态物体使用
RigidBody3D - 玩家角色使用
CharacterBody3D
渲染优化
- 使用遮挡剔除(Occlusion Culling)
- 合理设置阴影质量
- 控制光源数量
移动平台优化
- 启用移动专用渲染器
- 设置合适的帧率限制
- 优化纹理和资源大小
- 实现按需资源加载
3.4 性能分析工具
Godot 内置性能分析工具:
- Debugger 面板:查看帧率、内存使用
- Profiler:分析 CPU 和 GPU 性能瓶颈
- Monitor:实时监控各种指标
参考文章:
四、发布多平台
4.1 支持的平台
Godot 支持一键导出到以下平台:
| 平台 | 文件格式 | 特殊要求 |
|---|---|---|
| Windows | .exe | 无 |
| macOS | .app | 需要签名 |
| Linux | .x86_64 | 无 |
| Android | .apk / .aab | 需要 SDK,需签名 |
| iOS | .ipa | 需要 Xcode,需签名 |
| Web | HTML5 | 需要 Web 导出模板 |
4.2 导出配置步骤
1. 安装导出模板
编辑器菜单 → 项目 → 安装导出模板
2. 创建导出预设
项目 → 导出 → 添加... → 选择平台
3. 配置导出选项
- 应用名称和版本号
- 应用图标(不同尺寸)
- 初始分辨率和窗口设置
- 调试模式开关
4. 导出游戏
点击 "导出项目" 按钮 → 选择导出路径
4.3 平台特定配置
Windows
- 配置图标:准备
.ico格式图标 - 控制台输出:可选是否显示控制台窗口
Android
- 安装 Android 构建模板
- 设置最小 SDK 版本(建议 21+)
- 配置包名、版本名称
- 设置应用图标和权限
- 生成签名密钥
Web (HTML5)
- 下载 Web 导出模板
- 配置窗口拉伸模式为
canvas_items - 导出后需要 Web 服务器运行
- 可上传至 itch.io 等平台
4.4 窗口适配设置
在项目设置中配置:
项目设置 → 显示 → 窗口
- 宽度/高度:基础分辨率
- 拉伸 → 模式:canvas_items(自适应)
- 拉伸 → 宽高比:keep 或 expand
参考文章:
推荐资源汇总
官方资源
| 资源 | 链接 | 说明 |
|---|---|---|
| 官方文档 | docs.godotengine.org | 最权威的学习资料 |
| 官方教程 | Getting Started | 系统入门教程 |
| GDScript 学习 | Learn GDScript | 浏览器交互式学习 |
| 示例项目 | godot-demo-projects | 官方示例代码 |
社区资源
| 资源 | 链接 | 说明 |
|---|---|---|
| Godot Shaders | godot-shaders | 开源着色器库 |
| Godot 中文社区 | 论坛/QQ群 | 中文开发者交流 |
| Reddit r/godot | reddit.com/r/godot | 国际社区 |
| Discord | Godot Official | 实时交流 |
视频教程
| 教程 | 平台 | 适合人群 |
|---|---|---|
| Godot 4.5 零基础教程 | B站 | 完全新手 |
| HeartBeast | YouTube | 2D 游戏开发 |
| GDQuest | YouTube | 系统学习 |
| 游戏像素课 | B站 | 中文教程 |
推荐书籍
- 《Godot 游戏开发实战》
- 《Godot Engine 游戏开发完全指南》
总结
Godot 是一款非常适合初学者的游戏引擎,其开源、轻量、功能强大的特点使其成为独立游戏开发者的首选。通过本文整理的学习路径,你可以:
- 基础阶段:掌握编辑器使用、节点系统、GDScript 编程,完成第一个 2D 游戏
- 进阶阶段:学习 3D 开发、着色器编写、性能优化,实现多平台发布
记住,游戏开发是一个实践性很强的领域,多动手、多尝试、多思考是进步的关键。祝你学习愉快,早日做出属于自己的游戏!