静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
Q
QianXun @QianXun · 2026-09-26 16:42

> 写得出还要跑得快、发得出。本篇前半讲性能分析的正确姿势,后半是完整发布地图——包括那个被误解最多的问题:「Godot 能上主机吗?」

一、性能分析:先测量,再动刀

Godot 内置三件测量工具:

  • Profiler(调试器面板):按函数看耗时,勾「Frame Time」与「CPU 时间」,先找最贵的函数;
  • Monitors(监视器):FPS、内存、draw call、对象数、视频显存——曲线级实时观测;
  • Video/RenderingServer 信息:查 draw call 数与纹理显存。
4.6 的两件新武器:
  • ObjectDB 快照与对比:运行时任意时刻抓「全部存活对象」快照,两份对比即知谁被创建、谁没被销毁——内存泄漏从「猜」变成「看」;
  • 专业追踪器接入:Tracy、Perfetto、Instruments 一键对接(Android 上 4.7 起默认 Perfetto),GDScript/C#/GDExtension 全链路火焰图。
优化顺序铁律:先算法、再节点、再渲染。性能问题的 80% 是「每帧做重活」:_process 里 get_node、每帧实例化、无节制的 Tween 与粒子。先修这些,再谈 GPU。

二、渲染侧的四板斧

  • 2D 批处理:同纹理连续提交合并 draw call。打散因素(贴图交替、canvas 层夹叠、独立 shader)逐项排查;图集(AtlasTexture/TexturePacker)是解药——4.7 还让 TextureRect 支持 AtlasTexture 的区域重复绘制(nine-patch),低端机纹理切换再省一截。
  • MultiMesh:几千个同款物体(草地、弹壳、粒子云)用 MultiMeshInstance3D,一次 draw call 画完全部。
  • 合并与 LOD:静态小物件合并网格(Mesh 菜单)、远处开 LOD(4.6 的组件剪除让 LOD 保形更好)。
  • 视口降采样 + 4.7 新增的最近邻缩放:低分辨率渲染再锐利放大,复古风游戏白赚一半帧率。
物理侧:4.6 起 Jolt 是默认物理,速度稳定性双优;需要更准可调 physics_ticks_per_second,需要更顺滑开物理插值(4.5 重做过)。线程侧:重活扔 WorkerThreadPool(add_task / add_group_task),别自己裸管 Thread 生命周期。

三、导出:平台地图全览

导出前装模板(4.7 起模板下载器按平台按架构按需下载,不用再全量拉)。各平台现状:

  • Windows:一键出 exe;4.5 起改元数据不再依赖 rcedit 工具(跨平台打包也能改图标与产品信息)。4.6 起 Windows 新项目默认 D3D12。
  • Linux / macOS:Linux 直出;macOS 需要 Apple 开发者账号签名与公证(有 per-架构模板)。
  • Web(HTML5):Compatibility 渲染器专用;4.5 起 WASM SIMD 白赚性能;SharedArrayBuffer 需要服务器正确响应头(itch.io 有现成托管方案)。
  • Android:JDK + Android SDK 配置一次,之后 Gradle 导出;4.6/4.7 的 GABE 让这一切可以在安卓设备上完成;自适应图标、内嵌启动画面(4.7 可在导出面板直接编辑)、SAF 文件访问、PiP 小窗(4.7)齐备。
  • iOS:需 macOS + Xcode 出 ipa;4.7 手柄支持切到 SDL3。
  • visionOS(4.5+):导出为空间里的「窗口应用」,Vision Pro 首个原生支持 Godot 的平台——4.8 dev 还在加手部追踪与 PSVR2 控制器支持。
  • 主机(Switch/PS5/Xbox):官方不提供,且这不是 Godot 独有的限制——主机 SDK 全在 NDA 之下,任何引擎(包括 Unity/UE)都不能公开分发主机导出模板。Godot 的解法是认证第三方:W4 Games 提供 Switch/PS5/Xbox 的官方中间件移植,另有 Lone Wolf Technology、Pineapple Works、RAWRLAB、mazette! 等一列服务商标在官方文档里。结论:能上主机,走商业服务,先和平台方签约拿到开发者资质。
  • Steam Deck:官方支持(走 Linux 模板),Steam 上大量的 Godot 游戏已验证这条路。
发布流程的工程化收尾:版本号写进项目设置、用 Patch PCK(4.6 起支持增量编码,补丁只含变化部分)做热更包、CI 里用命令行 godot --headless --export-release 自动出包。

四、上线前检查清单

  • 帧率目标下跑通完整一关(不只主菜单);
  • 手柄全流程可玩(4.7 的 Ignore Joypad on Unfocused Application 别忘了);
  • 存档兼容性(版本号存进存档,防升级炸档);
  • 多语言(CSV ?context/?plural 列,4.6 起连 C# 的 Tr() 都能自动提取进 POT);
  • 导出前跑一遍着色器预编译(4.5 的 shader baker),消灭玩家端首次编译顿挫。
下一篇,第十级台阶:精通之路——GDExtension 与 C# 的选型、编辑器插件开发、读源码的门径,以及 4.8 与开源引擎的未来。

*本篇配图:性能管线与多平台发布。*

第九级 · 性能与导出:从帧率到发布地图

暂无表态