最近是不是也被 superpowers 这个词刷到首页了?如果你跟我一样卡在“这到底是个什么东西、为什么那么多人说想安装”的状态,那这篇就是给你准备的。Superpowers 是一款开源、完全网页化的 3D 创作与游戏原型平台:不用装 UE、Unity 这类动辄几个 GB 的桌面引擎,只要一个浏览器,就能完成搭场景、写逻辑、多人同时编辑,甚至把做好的东西导成独立网页分享出去。我因为工作里经常要做轻量级创意原型,这几年把 Superpowers 从在线版一直用到本地自托管,今天就把安装和上手经验完整捋一遍。
1. Superpowers 是什么:一个被低估的浏览器 3D 创作平台
1.1 它的诞生和基本定位
Superpowers 最早是一个众筹项目,做出来的产品形态就是“Web 端实时协作的 3D 开发环境”。它想解决的问题相当实际:传统游戏引擎安装重、学习曲线陡、多人协作难,一个需求从想法到能看的原型往往要折腾半天。Superpowers 把编辑器本身搬进浏览器,后端用 Node.js 做服务端,前端用 TypeScript 写脚本,渲染基于 WebGL 和 Three.js。整套组合下来,一个 3D 游戏项目从创建、编辑到运行,都不需要你再安装 Unity Hub、Android SDK、Xcode 这类重量级依赖。
我对它的评价是八个字:低门槛,但没把上限砍死。你可以在里面拖拖拽拽搭一个虚拟展厅,也可以写完整的行为逻辑和网络同步代码,做成一个能多人同时进入的网页小游戏。它不像 Scratch 那样纯积木拖拽,也远比 Unity 轻,而是恰到好处地站在中间:开箱即用的基础资产和编辑器都有,同时又用 TypeScript 作为核心语言,给进阶用户留了充足拓展空间。核心特性拆开看,大概有这么几条:
- 零客户端安装:编辑器和游戏运行都在浏览器里完成。
- 实时协作:多人同时编辑同一个项目,能看到对方的头像和光标。
- 组件化的 Actor 体系:场景里的物体都能挂网格、灯光、相机和脚本。
- TypeScript 脚本:生命周期和行为逻辑清晰,前端开发者上手很快。
- 静态导出:做好的项目能导出成纯静态网页,分发不需要服务器。
定位上,它和传统游戏引擎不是一个赛道。它偏向快速原型、教学演示、互动网页、虚拟展厅这类“产品规模不大但迭代要求快”的场景。对我来说,它最大的价值不是替代 Unity,而是让“三分钟把一个想法变成可操作的 3D 场景”真正成为可能。
1.2 为什么会成为热门搜索词
这个项目其实发布有些年头了,最近搜索热度又起来,我猜有几个原因。第一,桌面端引擎越做越重,硬件和安装成本劝退了一大批跃跃欲试的人,大家转头找轻量方案;第二,浏览器端 WebGL、WebGPU 这几年发展很快,“网页里跑 3D”早就不是玩具,很多被桌面端挡在门外的新手开始重新审视老项目;第三,很多搜索“superpowers”的人,要的并不是游戏引擎教程,而是一个“不用装环境、打开就能协作”的工具,能自托管的网页编辑器天然有吸引力。
另外也要提醒一声,搜“Superpowers”会看到不少同名东西,有的讲世界观,有的讲编程课。如果你搜到的是游戏开发平台相关内容,多半就是我说的这个开源项目;如果你想要的是一个浏览器里的协作 3D 编辑器,那大概率也绕不开它。最好直接去看官方仓库下面怎么描述自己,避免被各种“超级能力”的标题党带偏。
2. 装之前先想清楚:在线账号、本机自托管,还是团队服务器
很多人一上来就问“怎么安装”,但我觉得这事得拆开回答。Superpowers 有好几种完全不同的使用形态,安装路径差别很大。先想清楚自己是哪类用户,再决定怎么装,能少走特别多弯路。
2.1 三种常见形态的对比
| 使用形态 | 你需要做的事 | 适合谁 | 主要代价 |
|---|---|---|---|
| 官方在线版 | 打开官网注册账号直接用 | 想快速体验、单人小项目 | 数据在官方服务器,版本和功能跟着官方走 |
| 本机自托管 | 装 Node.js、克隆仓库、本地启动 | 想离线用、私有项目、研究源码 | 要自己处理环境和依赖,端口和账号都要自己管 |
| 团队/班级服务器 | 把服务端部署到云主机或内网机器 | 小团队长期协作、教学班级 | 要维护网络与备份,有一定运维成本 |
拿我的实际经历说:最开始我用了几个月在线版做小原型,很多想法很快被验证。直到我需要在没有外部网络的环境里演示项目,又想看看服务端能不能按自己的方式调,才把本地自托管跑起来。如果你现在只是被“想安装 superpowers”这个念头点着,但还不确定拿它做什么,我的建议很简单:先用在线版跑一个项目,觉得手感对得上,再考虑本地安装。一上来就装服务器版本,反而容易把兴趣耗在环境配置上。
2.2 架构先明白:你“安装”的是服务端
这里有个新手特别容易误会的地方:Superpowers 的“客户端”其实就是浏览器里打开的那个编辑器界面;你在本机安装的,本质上是它的服务端程序。
整个工作方式是这样的:服务端负责保存项目、管理账号、处理实时同步;浏览器端负责渲染编辑器、提供 3D 视口和脚本编辑功能;两者通过 WebSocket 通信。项目里物体的位移、属性的改动,都会实时同步给所有打开同一个项目的协作者。明白了这一点,后面不管是配置端口、换域名,还是排查“为什么页面开了但连不上项目”,思路都会清晰很多——绝大多数问题都出在服务端,而不是浏览器。
2.3 我的选择建议
如果只是三五个人的远程协作,我倾向于用在线版或一台长期运行的云主机;如果你是自己一个人离线开发,本地跑一个实例就够了,做得差不多了再考虑同步到服务器。给一群学生上课的话,教师机上跑一个服务端,学生浏览器直接访问内网地址,效率是最高的,谁做了什么改动全流程可见。
还需要提一个安全层面的建议:别图省事就把没做任何防护的服务端直接暴露到公网。Superpowers 本身是协作工具,账号体系相对简单,没有 HTTPS 和访问控制时很容易被陌生人注册然后动你的项目。要放到公网,至少加一层反向代理和访问限制;只是在局域网或 localhost 用,就不用操这个心。
3. 本地自托管安装全流程:从克隆仓库到打开编辑器
下面这条路线是最完整、也最能暴露问题的一条路。把它跑通,其他形态基本可以类比解决。
3.1 需要准备的环境
- Node.js:项目发布得比较早,建议用 Node 14 或 16 的 LTS 版本。Linux 环境用 nvm 切换会很方便。
- git:用来克隆仓库。
- 浏览器:Chrome、Edge、Firefox 都行,但需要正常开启 WebGL。
- 一台能联网的机器:首次安装依赖会拉取大量包,网络状况会影响成功率。
我不建议你一上来就用最新版 Node,原因后面会专门讲。宁可先花十分钟把 Node 版本切好,也别装了半天再返工。
3.2 安装步骤
打开终端,按顺序执行:
git clone https://github.com/superpowers/superpowers.git cd superpowers npm install npm start如果没有意外,服务端启动后会在终端打印类似“listening on 4237”的日志,默认端口是 4237。然后在浏览器里打开:
http://localhost:4237看到登录或注册界面,安装就算基本成功了。
注意:老项目的依赖安装偶尔会挂。如果
npm install报 peer 依赖冲突,可以试试npm install --legacy-peer-deps;如果某个包因为本机缺少编译工具而失败,先确认系统里有没有 Python、make、g++ 这些基础构建工具。
3.3 我遇到的坑:Node 版本与依赖安装
我踩过最大的坑就是 Node 版本。Superpowers 发布时 Node 生态和现在差异很大,一些老依赖在新版 Node 上会直接报ERR_OSSL_EVP_UNSUPPORTED,这其实是 OpenSSL 策略变化导致的,很多老工具都会中招。当时的解决方式很简单:把 Node 切到 16 LTS,用 nvm 的话一条命令就切过去了。
第二个坑是网络。npm install要拉一堆依赖,中途失败很正常。遇到失败不要反复删掉重装,先确认镜像源和网络状态,再用npm ci或者重新执行一次npm install。看报错时别只看前面,重点看最后几行,大部分错误都会指出具体是哪个包出了问题,比盲目重来高效得多。
第三个坑不算环境,算心态。老项目启动后不一定立刻就有很漂亮的日志输出,你可能会面对几秒钟的黑屏终端,甚至以为自己没启动成功。别急,打开浏览器访问端口验证一下,比盯着终端瞎猜更靠谱。
3.4 第一次启动后的初始化
启动后第一件事不是急着新建项目,而是先看一眼服务端配置。Superpowers 的配置文件在 server 目录下,可以改端口、服务器名称等内容。本地单人玩,不配置也能跑,但知道配置文件在哪,后面改端口、换域名时会方便很多。
接着注册一个本地账号。第一次注册的账号会被当成这台服务端的管理员,之后再创建的账号则是普通成员。不同身份在协作时的权限不一样。如果你要给团队成员开账号,记得先用管理员身份登录管理页看一眼,别在普通账号下找半天的管理入口。
4. 编辑器初体验:场景、Actor 和行为脚本
4.1 项目模板与界面布局
登录后你会看到项目列表。新建项目时可以选择不同模板,最常用的是“3D 游戏”项目。打开项目后,界面分为几个区:中央是 3D 场景视口,左边是资源面板,右边是属性面板和层级面板,顶部是运行和测试相关的按钮。
这里有几个核心概念最好先吸收:
- 场景(Scene):一个项目可以有多个场景,类似游戏里的关卡。
- Actor:场景里的每一个物体都是一个 Actor,可以挂网格、灯光、相机,也可以挂脚本。
- 资产(Asset):模型、材质、纹理、脚本、动画都算资产,资产组织得好不好,直接决定项目后段乱不乱。
- 脚本(Script):控制逻辑的核心,用 TypeScript 写。
这些概念和主流引擎的组件化思路很像,只要你碰过 Unity 或 Godot,平移过来非常顺;就算没有经验,花半小时拖几下也能建立起感觉。
4.2 三分钟搭一个小场景
我一般会这样验证安装是否真的没问题:新建 3D 项目,打开默认场景,从资源面板拖一个立方体进场景,然后拖一个地面进去,再加一盏灯,点运行看看渲染是否正常。
这一步看着简单,但很有用。它能同时确认渲染管线、资源加载、基础操作流程都没有问题。如果这一套走下来顺畅,后面写脚本、做协作就可以放心往下继续。
4.3 第一个行为脚本(TypeScript)
在资源面板里新建脚本,双击打开编辑。一个最简单的旋转脚本大概长这样:
class Rotator extends Sup.Behavior { speed = 0.5; update(dt: number) { this.actor.rotate(0, this.speed * dt, 0); } } Sup.registerBehavior(Rotator);关键点在于:脚本类要继承Sup.Behavior,update方法每帧被调用,dt是离上一帧的时间差;写完之后保存,回到场景,把这个脚本挂到立方体这个 Actor 上,运行项目就能看到立方体持续旋转。整个过程很像游戏引擎里的组件系统,但语法用了前端程序员很熟的 TypeScript,心理门槛一下子就降下来了。
说明:上面的代码是示意,不同版本的项目模板预置脚本可能略有差异。我的习惯是打开项目自带的示例脚本先看一遍,再照着写,能避免不少因 API 调整带来的报错。
4.4 关于脚本 API 的提醒
Superpowers 的脚本 API 自成一派,和直接在 Three.js 里写不太一样,但迁移成本不高。只要熟悉update、start这些生命周期方法,再理解this.actor对场景物体的操作方式,基本几小时就能上手。真要开发复杂玩法,再去看它官方的行为库和网络同步部分。
这里值得提一句:它内置的网络同步能力是我觉得最被低估的地方。给 Actor 挂上网络同步相关的组件后,位置、旋转这些属性会在多人之间自动同步,不需要自己写 WebSocket 逻辑。对于做多人小游戏原型来说,这一下省掉了很多脏活。
5. 协作、导出与日常维护的实战心得
5.1 多人协作的正确打开方式
Superpowers 的协作是实时的:两个人同时打开同一个项目,你能看到对方的视角头像和光标,操作时更新几乎是即时出现的。这个体验很像在线协作文档,但在 3D 编辑器里出现还是挺稀罕的。
我的协作经验是:场景搭建阶段大家都能动,但到了脚本阶段最好分工明确。一个人动场景层级,很容易干扰另一个人正在选择或修改的对象,虽然不至于丢数据,但会互相碍事。我比较推荐的做法是:一个负责场景和光照,一个负责脚本逻辑,一个负责资源和导出,各干各的,效率和体验都会好很多。
5.2 把项目导出成静态页面
当你把原型做得差不多了,可以直接把项目导出成静态网页,丢到任何静态托管平台就能访问。这一步对做演示特别有价值:没有服务器、不用装运行时,一个页面发给客户或同事就能直接体验。
这其实是它“零安装”卖点里最亮眼的部分——创作过程零安装,分发过程也零安装。你想想,你给别人发一个链接,对方浏览器里就能玩你做的 3D 小游戏,这比让对方装一个游戏引擎要友好太多了。
5.3 数据备份与升级避坑
自托管意味着数据维护就是你的责任。我用过一段时间后的习惯是:把服务端的数据目录整体打包,定时放到另一台机器或网盘。特别注意,别只备份导出后的静态网页,那个丢了还可以重新导,源工程丢了就真的找不回来了。
另外,在没有完整备份的情况下,不要轻易升级依赖或切到新分支。这个项目版本迭代不像商业软件那么稳定,我吃过一次亏:手痒升级了一堆依赖,结果服务端启动不起来,后来回滚才恢复。开源老项目能跑就别乱动,这是我最真实的体会。
5.4 用久之后我才明白的事
玩 Superpowers 这段时间,最大的感受是:它强在“把想法快速立起来”,而不是“把商业游戏做到底”。它适合当第一块 3D 原型跳板,也适合当教学工具,但如果你追求的是追热门引擎的全部功能,那它给不了你。
安装这类老一点的开源项目,心态也很重要。别被新版 Node 的报错劝退,排查顺序基本是:先看环境,再看依赖,最后看代码。错误日志无非就是这三层,一层一层排除,绝大部分都能解决。我到现在还偶尔会打开 localhost:4237,随手拖两个盒子跑一跑,这种“浏览器本身就是开发工具”的体验,依然有它独特的魅力。