最近后台收到好几条类似的搜索想要安装superpowers。我一开始真没看明白这名字听起来像什么玄学插件或者某种神秘buff点进去才发现哦原来是个开源的在线协作式游戏开发环境。折腾完一轮安装、建项目、跑通基础流程之后我决定把整个过程和踩过的坑一起写下来给同样被superpowers这个名字吸引、又不知道从哪下手的朋友做个参考。这个项目适合谁独立游戏开发者、喜欢搞Web技术的小团队、想尝试多人实时协作写代码的玩家甚至是想在hackathon里快速出demo的学生队伍都可以拿来用。它最大的特点不是让游戏有超能力而是把游戏开发中的编辑、编码、资源管理、调试全部放进一个基于浏览器的环境里并且天生支持多人同时在线编辑。听起来有点像是游戏开发版的 Google Docs实际用起来也确实有那个感觉。1. Superpowers到底是个什么东西值得装吗1.1 它不是外挂也不是引擎全家桶先纠正一个容易误解的点Superpowers不是一个装进游戏里就能让角色飞天的插件也不是Unity、Unreal那种动辄十几个G的重型引擎。它更像是一个游戏工坊一个以Web技术为底座的开发环境。你用它来写代码、搭场景、放资源、调逻辑最后产出HTML5游戏能直接扔到浏览器里跑。它内置了场景编辑器、代码编辑器、资源管理器还自带一个运行游戏用的服务器。所有工作界面都是网页不过如果你用官方客户端打开它套了一层Electron壳看起来像个桌面软件。底层用的是TypeScript游戏逻辑脚本也是用TypeScript写的这对任何写过前端代码的人来说几乎零门槛。1.2 真正值钱的是实时协作这个设计我之所以特意写这篇东西是因为Superpowers最核心的能力也是它最容易被忽略的能力就是多人实时协作。传统小团队做游戏美术出图放共享盘程序拉代码改逻辑策划写文档发群里每个人工作在不同的工具里同步一次恨不得开两个小时会。Superpowers把这堆事收拢到一个界面里模型、贴图、脚本地图、场景层级全部在同一个项目空间中共享。几个人可以同时打开同一个场景有人拖动Actor位置有人改脚本代码有人添加资源彼此马上就能看到对方的修改。这种感觉很像一群人围在同一张桌子上拼乐高而不是各拼各的拍完照再合并。对做小游戏、做原型验证来说这种即时可见的效率提升异常明显。2. 安装之前先把运行方式搞清楚2.1 客户端和源码服务器两条路怎么选Superpowers的安装方式大致分两种我在不同机器上都试过简单总结一下差异。一种是下载官方提供的桌面客户端。这种方式最省心下载对应系统Windows、macOS、Linux都有的安装包装完直接打开客户端会自己启动一个本地服务器然后打开编辑器界面。适合自己一个人写写画画或者拉上局域网里的朋友一起玩。另一种是从GitHub克隆源码通过Node.js在服务器上跑起来。这种方式适合自己搭一个长期稳定的共享环境或者部署到云服务器上让不同城市的人也能连进来一起协作。缺点是配置稍微多一点但可控性更强。我个人现在用的是源码部署主要因为可以随意改端口和配置后续做插件扩展也更方便。2.2 本机快速上手的安装步骤如果你只是想在Windows或macOS上快速体验我建议直接用客户端全过程大概是这样去官方GitHub仓库的Releases页面下载对应平台的安装包。安装前先把Node.js装好建议LTS版本我用的Node 18没有任何问题。安装Superpowers客户端并打开。第一次启动会让选服务器地址默认就是本地http://localhost:4237选本地就行。进入首页后创建一个用户名然后新建项目选需要的插件一般选default这个基础包就够起步。项目创建完会触发插件加载等左下角进度条跑完就能进入编辑器了。整个过程没什么玄学唯一要注意的是第2步Node.js版本别选太老的。我在一台古董机器上试过Node 12启动服务的时候直接报了一串看不懂的依赖错误换成Node 16之后一切正常。2.3 源码部署的几个细节和报错处理如果你想像我一样走源码部署下面是完整的过程。git clone https://github.com/superpowers/superpowers.git cd superpowers npm install npm start理论上这三行命令就够了但实际操作中会撞上几个常见问题。第一个是端口占用。默认端口是4237如果你本地已经有什么服务占着启动会报EADDRINUSE。解决办法很简单启动前检查一下端口或者改配置。我是直接把环境变量改掉PORT4321 npm start改完访问http://localhost:4321即可。第二个是权限问题。Linux服务器上如果监听默认端口虽然4237不是特权端口有时会因为文件目录权限不足导致资源无法写入。npm安装后建议先创建一个普通用户再运行别图省事直接用root否则后面装插件时会生成一堆root属主文件普通用户没法改。第三个是npm安装慢。Superpowers依赖不少国内网络环境如果很慢可以把npm镜像切到国内源再执行npm install这个属于常规操作。注意装完不要随意清理npm缓存它下次启动还要校验依赖。踩过这几个坑之后我建议所有第一次尝试源码部署的朋友都按先客户端后源码的顺序来客户端跑通一遍知道编辑器长什么样再折腾源码。直接上源码又赶上网络不好你会以为这工具是坏的其实只是安装路径不对。3. 从新建项目到跑起来第一段脚本全流程拆解3.1 项目创建和场景编辑器里的几个关键概念进入编辑器后最核心的东西是场景。一个游戏里会有多个场景比如主菜单、第一关、结算界面等等。场景里装着Actor相当于Unity里的GameObjectActor身上可以挂组件Component组件决定了这个Actor能干什么。新手最需要适应的就是这个场景/资源/脚本三件套的目录结构。我在左下角资源面板里习惯这样建目录assets/放图片、音频、字体等原始资源。scripts/放所有TypeScript脚本。scenes/放场景文件其实场景本身也属于资源单独分个目录纯粹是个人整理习惯。创建场景后双击打开会看到带有网格线的视口。鼠标左键选择Actor右键在平地上移动滚轮缩放中键平移都是常规操作。工具栏里有添加Actor、添加组件、复制粘贴的按钮非常直观。3.2 用TypeScript写第一个运动脚本Superpowers的脚本体系最让我舒服的一点是绑定脚本就像给它挂了一个名字然后你只需要实现生命周期函数。新建脚本后默认会自动生成一个继承自Sup.Behavior的类。下面这个是我每次新建项目都要先跑的hello world代码让正方体原地旋转再加点位移。// scripts/RotateMe.ts class RotateMe extends Sup.Behavior { speed: number 60; move: number 0.1; update() { this.actor.rotate(0, this.speed * Sup.Time.deltaTime, 0); this.actor.moveRight(this.move * Sup.Time.deltaTime); } onDestroy() { // 这里写销毁逻辑比如从场景移除时的清理 } } Sup.registerBehavior(RotateMe);这里有个细节Sup.Time.deltaTime是每帧间隔时间用来保证不同帧率下运动速度一致。this.actor就是当前挂载脚本的Actorrotate和moveRight都是内置方法。写好脚本后回到场景编辑器选中一个立方体Actor点击Add Component选择RotateMe播放游戏立方体马上就开始转起来了。第一次看到这种写一行代码保存立刻生效的感觉还是很爽的。3.3 资源导入、场景切换和运行预览资源导入比我想象中简单粗暴直接把PNG、JPG、MP3、OGG这类文件拖进资源面板的对应目录就行。Superpowers会自己生成对应的资源引用文件你不用手动写路径。场景切换用一行代码就能完成Sup.loadScene(scenes/GameOver);这行代码会立刻切到指定场景。需要注意场景名称要和资源面板里看到的完全一致包括大小写。有次我把场景命名为menu代码里写Menu运行时报错说找不到场景就是这个原因。预览时直接点编辑器右上角的播放按钮游戏会在另一个浏览器标签页里打开。你可以开着调试面板实时看日志改动脚本保存后甚至不用刷新页面重新播放一遍就会带上新逻辑。实际上Superpowers的脚本是热重载的在某些时候改完代码切回游戏标签页直接就生效了这debug体验比传统游戏引擎舒服不少。4. 多人实时协作的完整打开方式4.1 协作机制和数据同步逻辑Superpowers的协作不是简单的你改一版我改一版而是让每个客户端都直连到同一个Superpowers服务器所有改动通过服务器转发给其他客户端。这里的改动精确到某个文件、某个字段、某个操作的层级不像Git那样按补丁合包所以才能做到实时。举个例子我和同事同时打开同一个场景我拖动了一个Actor的位置他那边视口里那个Actor立刻跟着变。他改完脚本字号这种不影响目录树的操作我这边代码屏也会同步刷新连光标位置都能大致对应上。这种看着对方写代码的体验一开始会有点不习惯但用顺了之后效率奇高。如果多人同时改同一个文件的不同部分系统会自动合并类似在线文档的车道机制。如果改到同一个函数的同一行后保存的会覆盖前面的但这个不是无脑覆盖它会在右侧弹出冲突提示让你手动选。我从实际使用经验来说只要大家沟通好谁负责哪个模块撞车概率非常低。4.2 实际协作中最实用的三个习惯和人实时协作和单人开发是完全不同的节奏我用Superpowers组队做过一个48小时小游戏踩过不少坑总结出三个非常实用的习惯。第一明确锁区。美术尽量在资源目录里加新文件程序在脚本目录里改代码策划在场景里调布景。大家默认不碰别人的核心区域开工前喊一句我这块加文件了就够。第二多用聊天框少用电话。Superpowers自带一个侧边聊天面板协作时所有操作记录和系统通知都会混在一起。如果谁改了场景名称或者删掉了某个Actor聊天框里会立刻刷出记录。所以重要决定在聊天框里留个文字相当于存档出问题还能查是谁干的。第三不要长时间占用同一个Actor不放。场景里如果有人正在微调某个对象其他人对这个对象做大幅操作很容易造成界面跳动。我们后来约定谁要调整某个对象就在聊天里说一句我先占住这个门改完再说释放。听起来有点村规但实际非常管用。4.3 自建共享服务器让异地对战和远程协作变成现实如果你团队的人都分布在不同的城市就需要一台云服务器来跑Superpowers服务端。部署方式和前面源码部署一样但要注意几个网络相关配置。服务器上要放行4237端口或你自己改的端口。所有队友访问时直接在浏览器地址栏输入http://服务器IP:4237即可不需要装客户端因为Superpowers本身就是个Web应用。如果想配域名和HTTPS需要在前面再挂一层Nginx反向代理这个属于常规操作但要注意WebSocket也要一并代理配置时记得打开proxy_set_header Upgrade $http_upgrade;这类参数。我在阿里云和腾讯云轻量服务器上都跑过1核2G的配置跑两个人协作没问题四个人以上同时在线编辑大场景会有轻微卡顿加到2核4G就很稳了。存储上记得给数据目录做快照因为服务器上所有人的项目文件都在那里丢了哭都来不及。5. 我用Superpowers几周后总结出的避坑清单5.1 插件加载失败多半是网络和缓存的问题Superpowers的插件系统有点类似VS Code的扩展市场创建项目时会拉取一堆依赖。我现在都用default插件起步包里已经带了2D、3D渲染器、文本、音频、粒子系统等常用模块。如果你在创建项目时卡在插件加载界面最常见原因是网络问题。插件下载不走npm源走的是Superpowers自己的资源服务器某些网络环境会失败。此时要么开终端手动下载插件放进去要么换个网络。还有一个邪门情况之前加载一半断了注册表里留了脏数据下次创建项目一直报插件不完整。解决办法是去项目目录里删掉plugins文件夹重新加载别怕项目脚本和资源都在。5.2 资源路径大小写问题坑了我整整一下午Superpowers在Windows上运行时文件系统不区分大小写但项目内部的资源引用是区分大小写的。我在Windows上导了一张Beach.png代码里写beach.png编辑器里一切正常因为Windows不敏感。结果把项目丢到Linux服务器上部署所有引用这个贴图的模型全部变成紫红色日志里疯狂报错Texture not found。这个坑特别隐蔽。我的建议是从第一天起就约定所有文件和文件夹统一用小写加下划线命名比如player_model.png、map_01。这样在任何平台上都不会翻车。5.3 大场景掉帧和脚本卡顿优化姿势很重要Superpowers跑的是浏览器环境性能上限天然比原生引擎低。当场景里Actor数量超过几百个且每个Actor都挂了独立的渲染组件时帧率会明显下降。我试过几种优化方案最有效的有三个能用静态合并的物体会尽量合并网格减少DrawCall。少用实时光源改成烘焙贴图。Superpowers的3D渲染基于Three.js这意味着可以拿Three.js的优化思路直接套用。脚本里每帧运算尽量裁剪别在update()里频繁创建对象或字符串拼接这个和Web前端优化一脉相承。有一次我在场景里放了五百个独立Cube每帧都各自旋转播放直接掉到20帧。把Cube换成静态模型合并之后回到60帧。所以别迷信Web引擎肯定够用该优化的还是要优化。6. 装完不是结束Superpowers的进阶玩法我列几个方向6.1 自定义插件开发扩充自己的编辑器如果你不只是想拿它写游戏还想改造这个工具本身Superpowers支持插件开发。插件由客户端服务和服务端组件组成可以新增自己的资源类型、编辑器面板、甚至第三方代码编辑器集成。我自己做的一个小插件是在资源面板右键菜单里加了一项批量重命名省去了逐个改名的痛苦。整个开发过程走的是Node.js加TypeScript的路子没有太多魔法。如果你懂前端工程化上手很快。6.2 和常规Web工程互相打通因为项目的产出本来就是HTML5游戏所以游戏跑起来之后可以直接把构建好的静态文件丢到任意静态服务器上哈希部署。Superpowers项目目录结构并不复杂只要你不用它的在线云存储服务本地所有资源文件都是普通文件。也可以直接写一个外部网页用iframe把Superpowers导出的游戏包嵌进去用postMessage协议做页面和游戏之间的通信。我试过把Superpowers做的解谜游戏嵌到公司官网的一个展示页里效果很好没有遇到跨域之外的其他障碍。6.3 什么项目最适合用它做用小团队协作原型这个场景优先级最高。两个人一天时间就能搭出一个可以玩的密室逃脱Demo面对面桌子上改代码那种体验是传统引擎给不了的。再者是教学和直播。直播写游戏时观众能看到代码改动实时反映在画面上甚至能进到项目里跟着操作这个互动性对教学场景是天然加成。我见过有人用它做编程公开课学生全都连到同一个服务器老师代码一改学生屏幕集体同步比自己贴代码截图清楚多了。另外是老少皆宜的2D涂鸦游戏。Superpowers的2D组件非常轻量做俄罗斯方块、2048、涂色类小游戏都很快。我个人感觉3D部分因为材质和光照系统相对简陋适合做低多边形风格的小场景不适合追求写实渲染。最后说点个人体会。我原本是看到安装superpowers的热搜想凑个热闹结果这工具在电脑里留了快一个月还拉了两位同事一起用。它不完美编辑器里的拖拽手感比不过商业引擎文档也不全好多功能要自己去翻TypeScript类型定义。但打开浏览器就能一起做游戏这件事确实只有它做得最彻底。如果你也刚被这个名字吸引别把它想复杂了下载下来建个场景拖个方块写几行旋转代码你就能明白我为什么愿意花时间写这篇文章了。