ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Superpowers使用指南:安装、Skills与多人实时协作游戏开发

Superpowers使用指南:安装、Skills与多人实时协作游戏开发 最近又有人问我 superpowers 到底怎么安装、那些 skills 该去哪里找、怎么才能把一套多人协作的开发环境真正跑起来。看起来是又一批做独立游戏、搞 Game Jam、带编程课的朋友把这个略显低调的开源项目加入了收藏夹。严格说Superpowers 不是一个普通的“编程技巧合集”它是一个以 Node.js 服务器为底座、以浏览器为编辑器的多人实时协作游戏开发环境游戏逻辑用 TypeScript 写支持 2D 和 3D。它在社区里被称为“带编辑器的协作开发服务器”对于小团队做原型、课堂协作、黑客松项目确实有相当独特的价值。这篇文章我会从“它到底是什么”讲起把装环境、装软件、创建项目、引入技能Skills、拉队友协作、写第一段脚本这几个环节完整走一遍。中途也会分享一些我实际使用中踩过的坑以及对它维护现状的判断。如果你已经在官方文档里转了很久还没完全弄清“技能”在哪、怎么引那这篇应该能帮你省下不少时间。1. 先搞清楚 Superpowers 是什么再决定装不装很多第一次接触的人都会先入为主地把它当成又一个“游戏引擎”。其实它跟 Unity、Godot 那类引擎的底层设计有很大区别理解这一点后面很多操作才不会别扭。1.1 它是“带编辑器的协作开发服务器”不是传统引擎Superpowers 最核心的形态是一个运行在 Node.js 上的服务端程序。你去官网下载的客户端也好用 npm 自托管的服务器也好最终都是把服务跑在本机或某台服务器上然后用浏览器访问它的编辑器页面。也就是说真正的“开发环境”在浏览器里项目文件和数据则由服务器统一管理。这种设计带来的直接好处是多人协作不再是靠 Git 之类的版本控制工具来“推拉同步”而是像一群人同时编辑同一个在线文档一样你改场景、我改脚本、他调参数大家共享同一个项目状态。编辑器界面我用下来其实很接近一个轻量级的 IDE 加可视化场景编辑器左边是资产列表中间是场景视图右边是属性面板还能打开独立的脚本编辑窗口。技术栈方面Superpowers 的 3D 渲染基于 Three.js2D 物理和渲染则用到了 LiquidFun 那套体系。写逻辑的语言是 TypeScript也就是说如果你已经会 JavaScript/TypeScript进入它几乎没有额外的语言门槛。很多“官方技能”本身也是用 TypeScript/JavaScript 写的所以社区里插件生态能长起来靠的就是这套统一语言。1.2 它真正解决的问题是什么我自己的体会是Superpowers 解决的痛点非常明确小型团队在项目早期需要“无摩擦的同步开发体验”。特别是 Game Jam 那种只有 48 小时的场景几个人身处不同城市又不想折腾 Git、不想频繁打包发版本、想直接看到队友刚拖进场景的模型Superpowers 几乎是开箱即用的方案。它也很适合教学。课堂上一个老师带十几个学生每人做一个小场景通过同一个服务器就能看到彼此进度学生输出的反馈是即时的这个体验比传统“各自装一个编辑器、最后收作业”要有意思得多。但要说清楚它不是万金油。如果你要做的是高画质、重度渲染的大项目或者需要像 PS 那样精细的贴图绘制管线那 Superpowers 肯定不适合。它是“快速做原型、快速协作、逻辑清晰够用”这个定位不是全能引擎。1.3 和其他工具的直观差别我整理了一张简表方便你判断它的位置对比项SuperpowersGodotUnity编辑器形态浏览器 服务器桌面应用桌面应用默认脚本语言TypeScript/JavaScriptGDScript、C# 等C#多人实时协作原生支持无需额外配置需借助外部协作方案需借助外部协作方案3D 渲染Three.js自研渲染自研渲染开源属性开源开源商业授权限制上手曲线低浏览器就能开始中等中等偏陡当前维护热度半休眠稳定但更新慢非常活跃非常活跃这张表并不是要分高下而是想说选 Superpowers 的人基本上不是因为它在渲染或工具链上胜出而是看中了“多人共享 网页开发 代码驱动”这一套组合。想明白这个点你才不会在后面的安装和技能配置上犹豫。2. 开始安装两条路径和前置条件网上关于“怎么安装 superpowers”的问题特别多主要原因是指南分散、版本碎片化。我这里把前置环境和两条主要路径都梳理一遍。2.1 前置环境Node.js 与浏览器无论走哪条安装路径你的机器上最好先装好 Node.js推荐用 LTS 长期支持版。Superpowers 服务器本身是 Node 程序桌面客户端的内部也带着一套 Node 运行时但你自托管时一定用得上。浏览器的话Chrome、Edge、Firefox 都可以我主要在 Chrome 下用偶尔 Firefox 也能正常打开编辑器。需要注意的是Superpowers 的编辑器界面跑起来后有几个独立窗口请允许浏览器弹出窗口否则脚本编辑器和场景视图可能打不开。我第一次用时就因为浏览器拦截弹窗点了半天没反应还以为是服务坏了。2.2 路径一桌面客户端如果你完全不想碰命令行最简单的办法是去 Superpowers 的官网或 GitHub 的 releases 页面下载对应平台的安装包。Windows、macOS、Linux 都有对应版本。安装后直接运行它会自动把服务器在本机启动然后打开浏览器进入登录界面。桌面客户端的好处是省事Node 运行时也一并帮你带上了。坏处是它启动的服务器毕竟还是你本机想真正跟远程队友协作还是得回到“自托管服务”这条思路上。2.3 路径二npm 自托管服务器这是我个人最推荐的方式尤其是团队场景。全局安装只需要一条命令npm install -g superpowers然后启动superpowers正常情况下控制台会输出服务器监听的地址默认端口通常是4234。这时候打开浏览器访问http://localhost:4234就能看到登录界面了。如果端口被占用启动日志里一般会提示可以按照它的提示换一个端口。用 npm 方式的额外好处是数据目录、项目文件都在你指定的位置方便备份。首次启动时注意看日志里数据目录的路径通常在你当前用户主目录下或者启动命令执行目录附近以后做备份时找它就行。这里也说一句不同操作系统下npm 全局安装偶尔会遇到权限问题。如果在 Linux/macOS 上报 EACCES 一类的错误建议先解决 npm 全局目录的写权限而不是图省事直接sudo。因为sudo安装容易把全局包的目录权限弄得很乱后面装技能插件时会跟着踩坑。2.4 安装阶段最常见的坑端口被占用检测一下 4234 是否被别的程序占用如果占用看看启动参数是否支持自定义端口。通常日志会提示。刷新之后项目列表是空的有时候服务器起来了但浏览器打开还在旧的缓存页一般强刷一次CtrlShiftR就好。局域网队友访问不到检查两件事一是服务器监听地址是不是绑定了0.0.0.0二是系统防火墙有没有放行对应端口。只监听了localhost的话别人自然连不上。安装这一步并不复杂但很多人卡在后面“技能到底去哪了”上。下面就开始讲核心。3. 第一次打开编辑器账号、项目创建与界面逻辑安装起来并顺利跑通页面只能算第一步。接下来你会在登录页发现一个问题为什么本地开发还要注册账号3.1 用户身份与权限从哪来Superpowers 的账号不是为“云服务”准备的而是为“协作身份”准备的。在自托管服务器上第一个注册的管理员账号拥有最高权限之后加入的账号可以被分配不同角色。这样做的目的是让“谁改了什么”在项目里是可追踪的也方便你在团队协作时控制谁能进入项目。本地使用时注册账号只要填用户名和密码就行不涉及手机号、邮箱验证这类繁琐流程。注册完自动登录直接进入项目列表。3.2 创建项目2D、3D、空项目怎么选进入主界面后创建项目时通常能看到几个模板常见的有 2D 项目、3D 项目和空项目。选 2D 还是 3D取决于你想做的游戏类型。这里需要注意模板并不限制你以后只能用 2D 或 3D真正的功能模块由“技能”决定模板只是帮你预置了官方技能组合。我实际用的经验是如果不确定做什么直接选 3D 模板因为 3D 项目中也能创建 2D 场景。反过来2D 项目里加 3D 支持通常会麻烦一点因为你需要补上对应的 3D 渲染技能和相关资产类型。3.3 编辑器布局场景、资产、脚本和控制台项目创建后你会进入编辑器页面。整体布局大致分四块场景视图中间区域显示你当前场景里的角色、摄像机、光源等。资产面板左侧或者底部显示项目中的所有资源比如模型、贴图、脚本、音频。属性面板选中某个角色后这里会出现它的位置、旋转、缩放、组件列表等。脚本编辑器可以单独弹出也可以内嵌显示负责写 TypeScript 逻辑代码。这套布局对用过任何现代游戏编辑器的人来说都不陌生真正需要适应的是“项目数据在服务器上”这件事。你新建一个资产后其他正在登录这台服务器的队友只要刷新或稍等片刻就能看到同一个资产出现不需要任何提交操作。3.4 第一次实际操作建一个场景并移动摄像机创建项目后默认会有一个场景。你可以先在场景中创建一个方块或立方体然后调整摄像机位置让它正对着方块。这个操作逻辑和主流引擎很接近选中摄像机在属性面板改位置和旋转角度。我建议新手先做一个小验证把一个立方体放在原点摄像机摆到(0, 3, 5)位置朝向原点看看场景视图里是否显示正常。如果能看到模型就说明整个渲染链路是通的如果黑屏先查摄像机朝向和项目是否还停留在“运行”状态。这套验证动作能让你在深入技能之前先建立起对编辑器的基本信任感。4. 技能才是灵魂Skills 有哪些、怎么找到、怎么引入如果你在搜索“superpowers 具体使用”时看到一堆关于 skills 的内容那说明你已经摸到了这个项目的核心。可以说 Superpowers 几乎所有引擎功能都是通过技能Skills提供的。4.1 技能系统的设计逻辑Superpowers 本身只提供最基础的编辑器框架、资产管理和协作同步能力其余诸如 2D 渲染、3D 渲染、粒子系统、UI、瓦片地图等全部以技能插件的形式挂载。每个技能可以理解为“一个功能模块包”它定义了一组资产类型、组件、菜单选项以及对应的运行时 API。这种设计的好处是高度模块化。你不需要的场景能力可以不装项目可以保持干净遇到需要的功能找到对应技能引入并启用即可。坏处是新手容易搞不清“能力”和“插件”的关系为什么别人的项目里有粒子我的项目里却没有因为你没有给那个项目引入对应的粒子技能。4.2 官方核心技能有哪些我按功能领域整理了一份官方技能的常见清单功能领域对应技能/模块作用基础运行时机Base场景管理、行为组件、时间更新、输入等基础能力2D 渲染Display2D 场景、Sprite、Tilemap 等 2D 绘制能力3D 渲染Display3D3D 场景、模型、相机、灯光等 3D 绘制能力粒子效果Particles创建和管理粒子系统做爆炸、烟雾、魔法效果瓦片地图Tilemap基于瓦片网格的地图编辑功能补间动画Tween在属性之间做平滑过渡常用于 UI 动画和简单移动UI 界面UI制作 HUD、按钮、文本框等界面元素网络加载Web加载远程资源与外部网络服务通信需要说明的是不同版本对官方技能的组织方式和命名会有差异你实际打开项目设置时看到什么以那个列表为准。但整体上上述几个模块是绝大多数项目会用到的。4.3 第三方技能去哪找官方技能覆盖的是基础能力社区技能则补充了大量玩法层面的功能比如寻路、对话系统、特定类型的相机控制等。找第三方技能我常用的渠道有在 GitHub 上搜索关键字superpowers skill按更新时间排序优先看近期有提交的项目。在 npm 上搜索superpowers或superpowers-plugin之类的关键字看是否有可安装的发布包。去 Superpowers 官方文档的“技能列表”页面会不定期收录社区项目。找到技能后重点看它的 README。因为技能和服务器版本之间存在兼容性问题尤其是维护停滞的社区技能极有可能只适配某个历史版本。别一看名字合适就装先确认它写的兼容版本再动手。4.4 引入一个技能的具体操作技能安装在不同版本里的做法有差别我这里说的是我自己在较老且稳定的版本里走通过的一套流程把下载或克隆下来的技能目录放到服务器指定的技能/插件加载目录中。重启 Superpowers 服务让它重新扫描并加载技能。在项目的设置或技能管理页面里找到新出现的技能项勾选启用。保存项目然后回到编辑器看看资产创建菜单里有没有出现该技能对应的新选项。如果你运行时找不到“技能管理页面”请直接去这个版本对应的官方文档查 “Installing skills” 一节。因为这一部分确实在不同时期变化比较大网上很多旧教程的命令已经失效了照搬可能报错。4.5 引入后的验证方式技能引入后怎么确认引入成功我的做法是三步验证新技能对应的资产类型能正常创建比如粒子技能生效后能新建粒子资产。场景里能通过“添加组件”找到该技能提供的组件。运行时控制台没有报错尤其没有出现“Skill not found”之类的错误。如果你已经启用技能但找不到对应组件多数是启用的技能和项目模板不匹配或者是服务端加载技能时发生了异常。这时去后台看启动日志是最快的办法。5. 把队友拉进同一个项目团队协作的实际玩法Superpowers 的多人协作是它区别于其他引擎的核心卖点但很多人在这一步也会遇到“队友就是连不上”的尴尬。我拆开来说。5.1 用户角色与权限在 Superpowers 服务器里管理员可以创建项目并设置公开或私有。对私有项目非管理员用户需要被授予访问权限。它可以看作是“房间级”的协作管理员负责开门其他人进去编辑。我实际用下来并没有特别复杂的项目级细粒度权限体系更多是“谁能不能进这个项目”的开关。这意味着协作更多靠团队自觉和模块分工而不是靠权限做硬隔离。这一点要在团队里提前说清楚免得有人误改了你正在调的场景。5.2 远程连接本地和云服务器的差异如果你的队友都在同一个局域网里把本机服务器地址发给对方对方在浏览器输入http://你的局域网IP:4234就能连上。但要注意服务器进程的监听地址必须允许外部访问不能只绑定 127.0.0.1。如果你们身处不同城市那就得把服务部署到一台有公网地址的云服务器上再让所有人访问http://云服务器IP:4234。部署前记得配置好防火墙和安全组开放对应端口。出于安全考虑建议设置强密码不要用弱口令毕竟暴露在公网的服务会被扫描器盯上。5.3 多人同时编辑时怎么避免互相踩坏虽然 Superpowers 支持多人同时在线同一时间改同一个资源仍然会产生冲突最终谁后保存谁生效。这个逻辑有点像在线文档里两个人同时编辑同一段落总会有一个人的版本被覆盖。我的建议是在项目早期就按模块或场景划分文件夹比如“场景 A 由小张负责”“界面场景小王负责”“公共脚本大家只读”。编辑器里的实时同步适合“互相看到彼此进度”不适合“两个人同时争抢同一个脚本的保存权”。5.4 一种值得推荐的协作方式我比较习惯的用法是一人专门负责场景搭建另一人负责写行为脚本第三人负责资源和导入。三人集中在同一个项目里做谁的画面不对直接在群里喊一声另一个人马上就能改完看到结果整个反馈循环非常短。这种体验用传统引擎加 Git 的方式很难复现。6. 写一个会转的方块脚本基础与首个行为实现聊完技能和协作终于到了写代码的环节。如果你已经会用 TypeScript这部分会很轻松如果没写过也可以当作第一次体验“行为组件”的入口。6.1 行为Behavior是什么在 Superpowers 里脚本通常附加在场景中的角色上通过“行为”组件运行。你可以把行为理解成“挂在角色身上的小处理器”每帧被调用一次执行你的逻辑。一个角色可以挂多个行为共同决定它的表现。这种设计与 Unity 的 MonoBehaviour 思路相似只是这里的语言固定为 TypeScript。你新建一个脚本资产后可以把它拖到一个角色上或者通过“添加组件”选择这个脚本。6.2 第一步新建脚本并挂到角色上在资产面板中右键新建一个脚本起个名字比如Spin。打开脚本编辑器里面默认会有一个类模板。你只需要在它的更新逻辑里让角色每秒旋转一点。class Spin extends Sup.Behavior { update() { this.actor.rotate(0, 0.03, 0); } }这段代码的逻辑很直白继承 Sup.Behavior在 update 中让这个角色每帧绕 Y 轴旋转 0.03 弧度。你没有看错不需要额外 import编辑器运行环境会为脚本提供Sup等全局命名空间。然后把脚本保存回到场景把脚本拖到刚才建的立方体上或者选中立方体后在组件列表中添加“Spin”行为。6.3 运行验证现在按下运行按钮或者直接按编辑器里的运行快捷键进入运行模式。立方体应该开始匀速旋转。如果没转先看是不是脚本没有挂上去再看脚本控制台有没有报错。这里有一个新手特别容易踩的坑脚本名称和类名不一致。Superpowers 对类的识别通常依赖脚本资产本身如果你把脚本重命名了但类名还保留旧名字可能会导致组件无法正确绑定。我的经验是先确定脚本资产名再让类名和它保持一致这样最稳。6.4 第二个小技巧用属性面板暴露参数你可以在类里声明公开字段比如旋转速度class Spin extends Sup.Behavior { speed 0.03; update() { this.actor.rotate(0, this.speed, 0); } }保存后回到属性面板你会看到这个行为组件上出现了“speed”字段可以直接在编辑器里改数值。这是很典型的“代码驱动 编辑器可调”的工作流逻辑在脚本里参数交给策划或美术在面板上微调不需要他们懂代码。我特别推荐在团队协作时多用这种方式能明显减少来回沟通成本。7. 常见问题与踩坑记录最后一章聊聊我实际用下来遇到的典型问题和判断。7.1 启动与连接问题排查表现象可能原因处理方式浏览器打不开编辑器服务没启动或端口不对看启动日志确认地址和端口队友连不上服务只监听了 localhost修改监听配置绑定到 0.0.0.0端口冲突4234 被其他程序占用换端口或停掉占用进程项目列表空白浏览器缓存强制刷新页面技能列表找不到新技能技能目录放错或版本不匹配检查加载目录和服务日志脚本报错导致项目打不开脚本语法错误用编辑器控制台定位错误行修好后重启项目7.2 对维护状态的诚实提醒需要承认Superpowers 的活跃开发期已经过去目前更像是一个“稳定但缓慢”的项目。官方仓库的提交频率不高社区技能的更新也不如早期频繁。这意味着你不太能指望它频繁加入新特性遇到某些需要深挖引擎层能力的场景可能会比较吃力。但这不代表它不可用。我自己的判断是它适合三类人——想做原型验证的独立开发者、需要在教学场景中让学生共同操作项目的老师以及频繁参加 Game Jam、看重实时协作的团队。如果你是想做一个需要长线运营、深度定制的商业项目建议谨慎评估不要轻易押注。7.3 我的选型建议如果你只是在网上看到“superpowers 技能”几个字觉得很好奇那完全值得花一个下午把它跑起来试试。先用官方模板建一个 3D 场景写一个旋转方块再试着把队友拉进来总共不过几小时。但如果你需要的是一套长期依赖、社区活跃、文档丰富的生产环境那么把 Superpowers 当成“灵感参考”远比当成“正式主力”更合理。最后再说一个实际操作中的体会当年我们参加线上黑客松五个人分散在三个城市正是靠着 Superpowers 的实时协作在第一个晚上就完成了核心 demo。虽然它后来没有成为团队的主力工具但那段“所有人盯着同一个场景你拉模型、我写脚本、他调数值”的体验至今让我觉得很特别。如果你身边正好有一群想一起做点小东西的朋友不妨先装上一台服务器建个项目把第一个方块转起来。很多东西试过才能理解设计者当初为什么这样取舍。
返回列表