如何将 Godot 游戏导出到网页端(HTML5 指南,2026年)
一份详尽的步骤指南,教你如何将 Godot 4 游戏以 HTML5 和 WebAssembly 格式导出到网页端:导出模板配置、让大多数构建失败的 SharedArrayBuffer 请求头问题、如何托管到 itch.io,以及黑屏问题的修复方法。
Godot 以 HTML5 和 WebAssembly 格式导出到网页端,这意味着你的游戏可以直接在浏览器标签页中运行,无需下载,无需插件。这是把可玩构建分享给别人最快的方式:发一个链接,对方点开就能玩。
问题在于,「导出到网页端」其实是两件事,不是一件。生成文件很简单,大约一分钟就能搞定。但让这些文件真正在浏览器中运行,才是大多数人遇到黑屏的地方,因为现代浏览器要求提供两个特定的 HTTP 请求头,而多线程 WebAssembly 构建依赖这两个请求头才能工作。本指南涵盖这两个环节、具体的设置方法,以及导致大多数导出失败的三种错误。
本指南适用于 Godot 4 以及 Summer Engine。Summer Engine 与 Godot 4 兼容,使用相同的导出流程。如果你的游戏是用自然语言描述构建的,导出步骤与手写代码的 Godot 项目完全相同。
{/* IMAGE: The Godot Export dialog open with a Web preset selected, the Export Project button highlighted. 1200x675 editor screenshot. */}
网页导出实际生成什么文件
导出时,Godot 不会生成单个文件,而是写出一个包含静态资源的小文件夹:
- index.html 是加载一切的页面,也是浏览器打开的入口。
- .wasm 文件 是编译为 WebAssembly 的 Godot 引擎本体,是体积最大的部分。
- .pck 文件 是你的游戏数据:场景、脚本和资源打包在一起。
- .js 文件 是将引擎连接到页面的加载器胶水代码。
- 通常还有 .worker.js 和 .audio.worklet.js,用于多线程和音频处理。
这些文件必须放在同一目录下,并通过 HTTP 服务访问。不能双击 index.html 就期望它能运行,这是很多人踩到的第一个坑。后面我们会详细说明。
第一步:安装导出模板
Godot 的编辑器和导出模板是分开发布的。导出模板是各平台的预编译引擎二进制文件,包括用于浏览器的 WebAssembly 构建。全新安装时不包含这些模板。
进入 编辑器 然后选择 管理导出模板,点击 下载并安装,即可拉取与你当前引擎版本完全对应的模板。
这是整个流程中最重要的一条规则:模板版本必须与引擎版本完全匹配。 4.3 的模板无法运行从 4.4 导出的项目。版本不匹配是网页构建失败的第二大常见原因,仅次于请求头问题。升级引擎后,必须重新安装模板。
第二步:添加 Web 导出预设
打开 项目 然后选择 导出。点击 添加 并选择 Web。
此时会出现一个选项面板。默认值基本合理,但有两个设置对网页端尤为重要:
- 导出类型。 「Regular」选项给你多线程构建,速度更快,也是默认选项。过去曾有非多线程的回退方案,供无法设置特殊请求头的服务器使用。在 Godot 4 中,几乎永远应该选择多线程构建,然后在服务器端修复请求头问题,具体方法见下文。
- VRAM 贴图压缩。 勾选你关心的目标平台。浏览器在大多数机器上走「桌面端」压缩路径,所以保持开启。移动端浏览器可能还需要勾选移动端压缩选项。
除非有特殊需求,否则 Head Include 和自定义 HTML 外壳保持空白即可。默认外壳会自动处理加载和进度条。
第三步:导出项目
选择一个目标文件夹。新建一个空文件夹,命名为 web-build 之类的名字,让输出文件与其他内容分开。
主文件命名为 index.html,而不是你的游戏名称。包括 itch.io 在内的大多数托管平台会把 index.html 作为入口文件。如果你命名为 mygame.html,服务器找不到它,你看到的将是一个空白目录列表,而不是游戏。
点击 导出项目。几秒钟后,文件夹就会填满前面列出的那些文件。简单的那一半完成了。
{/* IMAGE: A file explorer showing the exported web-build folder contents: index.html, .wasm, .pck, .js files. 1000x500. */}
第四步:请求头问题,直白地说清楚
这是大多数快速教程不会提到的部分,也是大多数初次网页导出出现黑屏的原因。
Godot 4 的多线程构建使用了 SharedArrayBuffer,这是一个让 WebAssembly 引擎在多线程上运行的浏览器特性。出于安全考虑,浏览器只在页面通过两个特定 HTTP 响应头提供服务时才启用 SharedArrayBuffer:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
这两个请求头会让页面进入浏览器所谓的「跨域隔离」状态。没有它们,SharedArrayBuffer 就是 undefined,引擎无法启动线程,你会看到黑色画布,控制台会出现提到 SharedArrayBuffer is not defined 或 crossOriginIsolated is false 的报错。
这两个请求头不在 Godot 里设置,而是在提供文件的服务器端设置。这就是关键所在。由此引出三个结论:
- 从硬盘直接打开 index.html 永远不会生效,因为没有服务器来发送请求头。
- 无法设置自定义请求头的服务器(比如普通的 GitHub Pages)无法直接运行多线程构建。
- 自动发送这两个请求头的服务器(比如开启了相应选项的 itch.io)直接就能用。
第五步:上传前先在本地测试
不要通过上传再刷新的方式调试网页导出。先在自己的机器上用一个设置了正确请求头的本地服务器测试。
如果你安装了 Python,最快的方式是写一个小脚本,用两个请求头提供文件夹服务。把下面这个脚本保存为 web-build 文件夹里的 serve.py:
import http.server, socketserver
class Handler(http.server.SimpleHTTPRequestHandler):
def end_headers(self):
self.send_header("Cross-Origin-Opener-Policy", "same-origin")
self.send_header("Cross-Origin-Embedder-Policy", "require-corp")
super().end_headers()
with socketserver.TCPServer(("", 8000), Handler) as httpd:
print("Serving on http://localhost:8000")
httpd.serve_forever()
运行 python serve.py,然后打开 http://localhost:8000。如果游戏在这里能正常加载,说明导出是正确的,剩下的问题都是服务器配置问题,与 Godot 无关。
如果不想写脚本,Godot 编辑器里的 远程调试 运行选项(播放按钮旁的下拉菜单中的「在浏览器中运行」)会自动启动一个配置正确的本地服务器并打开构建。这是开发过程中最快的完整性检查方式。
第六步:托管上线
itch.io(最简单,免费)
这是分享游戏和参加 game jam 的推荐方案。
- 将整个
web-build文件夹打包成 zip。注意是打包文件夹的内容,而不是文件夹本身,确保 index.html 位于 zip 的顶层。 - 在 itch.io 上新建一个项目,将 项目类型 设置为 HTML。
- 上传 zip 文件,并勾选 此文件将在浏览器中运行。
- 在嵌入选项中,设置与游戏分辨率匹配的视口尺寸,如果 itch 提供了 SharedArrayBuffer 支持 选项,勾选它(itch 会帮你设置那两个请求头)。
itch.io 会自动处理请求头,这就是它阻力最小的原因。如果游戏在上面的本地脚本测试中能运行,但在 itch 上不行,那几乎可以肯定是 SharedArrayBuffer 开关没勾选。
Netlify、Vercel 或自有服务器
这些服务器支持设置自定义请求头,配置完成后多线程构建就能正常运行。
在 Netlify 上,将 _headers 文件添加到部署根目录:
/*
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
在 Vercel 上,在 vercel.json 的 headers 规则下设置同样的两个请求头。在自己的 nginx 或 Apache 服务器上,将它们添加到对应的 location 块中。原理到处都一样:为页面和资源发送这两个请求头。
GitHub Pages
普通的 GitHub Pages 无法设置自定义请求头,因此多线程构建无法直接在上面运行。有人通过一个小型 service worker 在客户端注入请求头来绕过这个问题(「coi-serviceworker」是常见的解法),但这是一种变通手段,不是每个浏览器都能识别。如果必须用 GitHub Pages,做好添加这个变通方案的准备。否则,用 itch.io 或 Netlify,省去麻烦。
修复黑屏:三问清单
如果你看到黑色画布,打开浏览器开发者控制台(按 F12,然后切到控制台标签),读第一条红色报错。它会对应以下三种原因之一。
- 你是直接打开文件的吗? 如果 URL 以
file://开头,那就是问题所在。用上面的本地脚本通过 HTTP 提供服务。 - 报错中提到了
SharedArrayBuffer或crossOriginIsolated吗? 请求头缺失。在服务器端添加它们,或者勾选 itch.io 的 SharedArrayBuffer 开关。 - 报错中提到了版本或模板加载失败吗? 导出模板与引擎版本不匹配。通过「管理导出模板」重新安装。
九成的网页导出失败都是这三种情况之一。按顺序逐一排查,再假设游戏有更深层的 bug。
哪些功能在浏览器中不可用
网页导出是真实可用的,但它不是加了个 URL 的桌面版。有些东西表现会有所不同:
- 文件系统访问 是沙盒化的。存档数据写入浏览器的 IndexedDB,而不是磁盘上的文件夹。如果网页端是你的主要目标,存档系统要围绕这一点设计。
- 原生插件(为桌面端编译的 GDExtension 库)通常在浏览器中无法工作。任何链接了原生
.dll或.so的内容都需要兼容网页的替代方案,或者在网页构建中去掉。 - 加载体积比任何地方都更重要。 在网页端,玩家在游戏启动前需要下载引擎、数据包和所有资源。压缩贴图,删除未用资源,如果网页端是你的主要渠道,要对 3D 项目的规模保持现实预期。一款体量较大的 3D 游戏首次加载可能达到 30 到 100 MB,在移动网络下体验很差。
- 音频延迟 在浏览器中略高于桌面端。通常没有影响,偶尔在节奏要求严格的游戏中会有感知。
如果你的游戏是用 Summer Engine 构建的
上面的导出步骤完全相同,因为 Summer Engine 与 Godot 4 兼容,使用同一套 HTML5 和 WebAssembly 流程。区别在于上游,也就是游戏的构建方式。你不需要手写玩家控制器、场景配置和游戏逻辑,只需用自然语言描述你想要的效果,AI 来构建。准备分享时,按照本文描述的步骤导出到网页端即可。
网页端导出属于免费功能。构建和导出都是免费的,付费计划只涉及更高的 AI 用量和团队协作功能,所以从想法到一个可点击的链接,整个流程尝试起来零成本。
如果你还没有开始项目,到达网页可玩构建的最快路径是:从一个已经配置好移动和摄像机的模板开始,用自然语言描述你想要的游戏机制,然后按照上面六个步骤放到浏览器里。从空白项目到一个可玩的 itch.io 链接,整个过程一个下午就能完成。
Frequently asked questions
- Godot 游戏可以导出到网页端吗?
可以。Godot 4 通过 WebAssembly 导出为 HTML5,游戏可以在任何现代浏览器中运行,无需插件或安装。你只需添加一个 Web 导出预设,安装导出模板,Godot 就会生成一组静态文件,可以部署到任意服务器。主要限制在于:多线程构建需要两个特定的 HTTP 请求头才能运行,另外某些仅限桌面端的功能(如自定义窗口管理或部分原生插件)在浏览器中无法使用。
- 为什么我的 Godot 网页导出是黑屏?
黑屏几乎都源于以下三种情况之一。第一,你直接从文件系统打开了 index.html,而不是通过 HTTP 服务访问,浏览器会阻止这种方式。第二,你的服务器没有发送多线程构建所需的 Cross-Origin-Opener-Policy 和 Cross-Origin-Embedder-Policy 请求头。第三,你的导出模板与引擎版本不匹配。打开浏览器开发者控制台,找到第一条红色报错,问题就在这三者之一。itch.io 会自动设置这两个请求头,所以上传到 itch.io 是排除请求头问题最快的方式。
- 如何免费托管 Godot 网页游戏?
itch.io 是最简单的免费托管方案。将导出文件夹打包成 zip,以 HTML 项目形式上传,勾选在浏览器中运行的选项,itch 会自动配置所需的跨域请求头。GitHub Pages 和 Netlify 也是免费的,但需要你自己配置那两个请求头,而 GitHub Pages 不支持直接设置,需要借助变通方案。想要快速分享链接,itch.io 是阻力最小的路径。
- Godot 网页导出的文件比桌面构建更小吗?
不,网页导出往往是加载体积最大的版本,因为玩家在游戏运行前需要下载完整的 WebAssembly 引擎、游戏数据包以及所有资源。一款小型 2D 游戏通常只有几 MB,但 3D 游戏可能达到 30 到 100 MB 甚至更多,在移动网络下首次加载会非常慢。如果网页端是你的主要目标,要压缩贴图、删除未用资源,并控制项目规模。
- Summer Engine 支持导出到网页端吗?
支持。Summer Engine 与 Godot 4 兼容,因此使用本指南中描述的同一套 HTML5 和 WebAssembly 导出流程,AI 可以帮你配置导出预设并解释请求头要求。网页端导出属于免费功能。区别在于游戏的构建方式,而非导出方式:你用自然语言描述游戏,AI 负责编写代码和搭建场景,然后像任何 Godot 4 项目一样导出到网页端。
Related guides
- Export Your Game to Android in Godot 4 (Full 2026 Walkthrough)Export a Godot 4 game to Android the right way: install the build template, point Godot at the JDK and Android SDK, create a keystore, fix the common errors, and ship a signed APK or AAB.Read guide
- How to Make AI in Godot 4: A Step-by-Step Guide (2026)A practical guide to building AI in Godot 4, from enemy state machines and pathfinding to LLM-driven NPCs, with copy-paste GDScript and a faster AI-assisted path.Read guide
- How to Use Cursor AI with Godot (2026 Step-by-Step Setup)A working step-by-step guide to using Cursor AI with Godot in 2026: open the project, set up the GDScript language server, add a Godot MCP server, write your first AI edit, and the runtime limit you need to know.Read guide
- How to Make a Web Game with AI (2026)A build-it guide to making a web game with AI that runs in a browser tab and plays from a single link. What makes a game web-native, which template to start from, the exact prompts, and how to export and share it.Read guide