Godot 3 GDScript 教程 / Godot 3 GDScript 教程(十九):导出与发布
导出与发布
游戏开发完成后,需要将项目导出为各平台的可执行文件并发布。Godot 3 支持 Windows、Linux、macOS、Android、iOS、HTML5(Web)等多个平台。
导出模板安装
编辑器 → Editor → Manage Export Templates...
自动下载:选择与 Godot 版本匹配的模板
手动安装:解压到用户目录
Windows: %APPDATA%/Godot/templates/
Linux: ~/.local/share/godot/templates/
⚠️ 注意:导出模板版本必须与 Godot 编辑器版本完全匹配(包括 minor 版本),否则导出会失败。
平台配置
Windows
| 设置项 | 推荐值 | 说明 |
|---|---|---|
| Architecture | x86_64 | 64位 |
| Embed PCK | ✅ | 单文件分发更方便 |
| Console Wrapper | 开发时开,发布时关 | 调试用 |
| Icon | .ico 文件 | 可执行文件图标 |
Android
| 设置项 | 推荐值 |
|---|---|
| Package Name | com.company.gamename(反向域名) |
| Version Code | 每次发布递增的整数 |
| Min SDK | 21(Android 5.0) |
| Target SDK | 33 |
| Keystore | 签名密钥文件(发布必须) |
前置要求:Android SDK(API 30+)、JDK 11、Editor Settings 中配置路径。
iOS
前置要求:macOS + Xcode + Apple 开发者账号($99/年)。
Web(HTML5)
| 导出产物 | 说明 |
|---|---|
index.html | 主页面 |
.wasm | WebAssembly 代码 |
.pck | 资源包 |
.js | JavaScript 引擎 |
导出设置详解
资源过滤器
# 只导出需要的资源(减小包体)
Include Filter: res://scenes/*;res://scripts/*;res://assets/*
Exclude Filter: res://addons/*;res://docs/*;res://*.blend
命令行导出
# 批量导出脚本
godot --export "Windows Desktop" build/windows/game.exe
godot --export "Linux/X11" build/linux/game.x86_64
godot --export "Android" build/android/game.apk
godot --export "HTML5" build/web/index.html
图标与启动画面
各平台图标要求
| 平台 | 格式 | 尺寸说明 |
|---|---|---|
| Windows | .ico | 16×16 到 256×256 多个尺寸 |
| macOS | .icns | 16×16 到 1024×1024 |
| Android | .png | mdpi 48 到 xxxhdpi 192 多种密度 |
| iOS | .png | 1024×1024(Xcode 自动缩放) |
| Web | .ico | favicon.ico |
启动画面
Project → Project Settings → Application → Boot Splash
- Image: 启动画面图片
- Full Size: 是否全屏显示
- Bg Color: 背景颜色
代码签名
Windows
signtool sign /f certificate.pfx /p password \
/tr http://timestamp.digicert.com /td sha256 /fd sha256 game.exe
macOS
# 签名
codesign --force --sign "Developer ID Application: Your Name" game.app
# 公证(macOS 10.15+ 必须)
xcrun altool --notarize-app --primary-bundle-id "com.company.game" \
--username "[email protected]" --password "app-specific-password" --file game.app.zip
Android
# 生成 Keystore
keytool -genkey -v -keystore my-game.keystore -alias mygame \
-keyalg RSA -keysize 2048 -validity 10000
# 在 Godot 导出设置中配置 Release Keystore
⚠️ 注意:Android Keystore 文件丢失后将无法更新应用,请妥善保管。
Steam 发布流程
准备工作
1. 注册 Steamworks 开发者账号($100 一次性费用)
2. 创建应用,获取 AppID
3. 下载 Steamworks SDK / GodotSteam 插件
GodotSteam 集成
# https://godotsteam.com/
var result = Steam.steamInitEx(false, 480) # 480 是测试 AppID
if result["status"] != 0:
push_error("Steam 初始化失败")
return
func _process(delta):
Steam.run_callbacks() # 必须每帧调用
# 成就系统
func unlock_achievement(id: String):
Steam.setAchievement(id)
Steam.storeStats()
# Steam Cloud 存档
func upload_cloud(data: String, filename: String):
Steam.fileWrite(filename, data.to_utf8())
发布清单
| 步骤 | 说明 |
|---|---|
| 创建应用 | Steamworks 后台 |
| 配置商店页面 | 描述、截图、标签、定价 |
| 上传构建 | SteamCMD 或后台 |
| 设置分支 | default(发布)、beta(测试) |
| 提交审核 | 3-5 个工作日 |
| 发布上线 | 审核通过后 |
移动端发布
Android
1. 生成签名的 APK 或 AAB(Google Play 推荐 AAB)
2. Google Play Console 创建应用
3. 上传构建到内部测试轨道
4. 填写应用信息、截图、隐私政策
5. 设置内容分级、提交审核
iOS
1. Xcode 打开导出的项目
2. 配置 Signing & Capabilities
3. Archive 并上传到 App Store Connect
4. 填写信息、提交审核(24-48 小时)
移动端优化
# 移动端导出前检查
# 1. 纹理压缩:ASTC/ETC2
# 2. 分辨率适配:Stretch Mode: 2d + Aspect: keep
# 3. 触摸屏输入适配
# 4. 降低粒子数量、简化着色器
# 5. 限制帧率:Engine.target_fps = 60
Web 导出注意事项
限制
| 限制项 | 说明 |
|---|---|
| 文件大小 | 初始加载不宜超过 50MB |
| 线程 | SharedArrayBuffer 需要特殊 HTTP 头 |
| 音频 | 需要用户交互才能播放(浏览器限制) |
| 性能 | 比原生慢 2-5 倍 |
Nginx 配置
server {
listen 80;
root /var/www/game;
types {
application/wasm wasm;
application/octet-stream pck;
}
gzip on;
gzip_types application/wasm application/javascript;
# SharedArrayBuffer 需要的头(多线程支持)
add_header Cross-Origin-Opener-Policy same-origin;
add_header Cross-Origin-Embedder-Policy require-corp;
}
⚠️ 注意:Web 导出的 SharedArrayBuffer 需要服务器返回特殊 CORS 头,否则只能单线程模式。
游戏开发场景
多平台构建脚本
#!/bin/bash
GAME="MyGame"
mkdir -p build
godot --export "Windows Desktop" "build/windows/${GAME}.exe"
godot --export "Linux/X11" "build/linux/${GAME}.x86_64"
godot --export "HTML5" "build/web/index.html"
echo "=== All builds complete ==="
版本号管理
extends Node
const VERSION = "1.2.3"
const BUILD = 456
func _ready():
print("Version: %s (build %d)" % [VERSION, BUILD])
扩展阅读
💡 总结:导出前务必在目标平台上进行完整测试。Android 推荐 AAB 格式。Web 导出注意文件大小和服务器配置。Steam 发布需要预留审核时间。始终保留好签名密钥文件。