戰(zhàn):從安裝到鍵盤控制3D場(chǎng)景的完整指南)
沖著 superpowers 這四個(gè)字母敲進(jìn)搜索引擎的人我猜你大概率不是想找什么超級(jí)英雄電影而是盯上了那個(gè)開(kāi)源的 HTML5 游戲開(kāi)發(fā)引擎。這名字起得確實(shí)中二但用起來(lái)……說(shuō)實(shí)話也有點(diǎn)配得上這個(gè)名頭。我在本地把它從安裝到跑通第一個(gè)帶鍵盤控制的 3D 場(chǎng)景前前后后折騰了差不多一個(gè)周末踩過(guò)的坑有一籮筐但也確實(shí)被它瀏覽器當(dāng) IDE、打開(kāi)就能改代碼的體驗(yàn)驚艷到了。這篇文章寫給誰(shuí)想快速搭 Web 游戲原型的人、受夠了大型引擎啟動(dòng)速度和資源占用的人還有單純想在瀏覽器里體驗(yàn)一把協(xié)作寫游戲的人。下面這些內(nèi)容不是官方文檔的復(fù)讀是我自己從安裝、啟動(dòng)、建項(xiàng)目、寫腳本到排錯(cuò)的一條龍記錄照著走能少走很多彎路。1. 先搞明白superpowers 到底是個(gè)什么東西1.1 它和 Unity、Godot 的關(guān)鍵區(qū)別Superpowers 是一個(gè)基于 Web 技術(shù)棧的開(kāi)源游戲開(kāi)發(fā)引擎服務(wù)端跑在 Node.js 上客戶端就是你的瀏覽器。整個(gè)開(kāi)發(fā)過(guò)程不依賴傳統(tǒng)的編輯器安裝包而是通過(guò)瀏覽器訪問(wèn)本地服務(wù)來(lái)操作這一點(diǎn)和 Unity、Godot 這類需要下載幾百 MB 甚至幾個(gè) GB 的桌面 IDE 形成了特別鮮明的對(duì)比。最核心的設(shè)計(jì)邏輯是一切皆同步。它把項(xiàng)目文件、場(chǎng)景數(shù)據(jù)、腳本代碼都放在服務(wù)器端所有連接到這臺(tái)服務(wù)器的協(xié)作者都能實(shí)時(shí)看到對(duì)方在改什么。用一句話描述就是像用在線協(xié)作文檔一樣寫游戲。這種思路別說(shuō)在當(dāng)年放在現(xiàn)在也不算過(guò)時(shí)尤其適合小團(tuán)隊(duì)或課程教學(xué)場(chǎng)景老師和學(xué)生連到同一個(gè)服務(wù)上改一行代碼對(duì)方的場(chǎng)景里立刻就有反應(yīng)。從技術(shù)底子上說(shuō)它支持 TypeScript 寫腳本底層用 WebGL 渲染 2D 和 3D 場(chǎng)景資源文件可以是圖片、音頻、3D 模型最后產(chǎn)物可以導(dǎo)出為 Web 端內(nèi)容。對(duì)比起來(lái)Unity 的優(yōu)勢(shì)是生態(tài)龐大、組件豐富Godot 的優(yōu)勢(shì)是輕量且好用而 Superpowers 的優(yōu)勢(shì)就是這臺(tái)瀏覽器工作流和協(xié)作同步的組合拳哪怕不建站在局域網(wǎng)里拿兩臺(tái)電腦聯(lián)調(diào)原型也很順手。1.2 適合誰(shuí)、不適合誰(shuí)以我實(shí)際使用的體感來(lái)看它不是萬(wàn)能的但使用場(chǎng)景非常明確。為了讓你快速判斷值不值得裝我直接列一個(gè)實(shí)際參考表人群是否適合原因Web 游戲原型開(kāi)發(fā)者很適合寫 TypeScript、調(diào)場(chǎng)景、預(yù)覽全在瀏覽器里完成迭代路徑短想學(xué)習(xí) TypeScript 的初學(xué)者適合項(xiàng)目結(jié)構(gòu)簡(jiǎn)單寫一個(gè)行為腳本就能立刻看到結(jié)果需要多人實(shí)時(shí)協(xié)作的小團(tuán)隊(duì)很適合天然支持協(xié)作不需要額外配 Git 流程追求高畫質(zhì) 3A 效果的人不適合引擎渲染能力和資源管理上限就在那別太為難它重度依賴現(xiàn)成商店資源的開(kāi)發(fā)者不適合資源市場(chǎng)不像大廠生態(tài)那么豐富很多素材要自己準(zhǔn)備想導(dǎo)出原生 App 的人不太適合主要面向 Web 目標(biāo)原生打包鏈路并不成熟你看完可能也發(fā)現(xiàn)了它的定位就是輕量、快速、協(xié)作。如果你想要的是一個(gè)裝在本地、運(yùn)行流暢、能做出中型 Web 作品的工具Superpowers 是及格偏上的選擇。但你如果期待它能頂替 Unity 做大型 3D 項(xiàng)目那趁早關(guān)掉這個(gè)頁(yè)面。2. 安裝前準(zhǔn)備環(huán)境需求與方案選型2.1 本機(jī)環(huán)境準(zhǔn)備Node.js 與端口上網(wǎng)搜superpowers 安裝出來(lái)的內(nèi)容不少但很多老教程根本沒(méi)有交代環(huán)境細(xì)節(jié)導(dǎo)致新手卡在第一步。這里我先把最基礎(chǔ)的環(huán)境清單拍出來(lái)操作系統(tǒng)Windows、macOS、Linux 都行我測(cè)試時(shí)用的是 Windows 10 和一臺(tái) Ubuntu 20.04 服務(wù)器都沒(méi)什么大問(wèn)題。Node.js一定要裝 LTS 版本。我一開(kāi)始圖新裝了當(dāng)時(shí)最新的 Node 大版本結(jié)果某個(gè)原生模塊直接編譯失敗后來(lái)回退到 14 LTS 才順利跑起來(lái)。你要還在折騰建議先去官方把 Node 的 LTS 版本安上別用嘗鮮版踩坑。端口默認(rèn)使用 4237。這個(gè)端口不算常見(jiàn)一般不會(huì)被占但如果你本機(jī)跑了一堆開(kāi)發(fā)服務(wù)提前檢查一下netstat也不虧。瀏覽器請(qǐng)用 Chrome 或者 Edge 這種內(nèi)核比較新的瀏覽器。老牌瀏覽器或者 IE 之類就別想了WebGL 和現(xiàn)代 JS 特性都扛不住。提示如果你在 Linux 服務(wù)器上部署尤其是精簡(jiǎn)版系統(tǒng)記得先確認(rèn)已經(jīng)裝了build-essential、python這些基礎(chǔ)依賴否則 npm 安裝時(shí)編譯原生模塊會(huì)報(bào)一堆錯(cuò)。2.2 兩種安裝路徑的取舍Superpowers 的安裝方式大體分兩種一是下載現(xiàn)成的桌面客戶端內(nèi)嵌服務(wù)端和瀏覽器殼二是通過(guò) npm 全局安裝命令行工具然后自己用瀏覽器訪問(wèn)。我當(dāng)時(shí)為了省事先試了桌面客戶端但后來(lái)發(fā)現(xiàn)還是 npm 方案更靈活。對(duì)比項(xiàng)桌面客戶端npm 命令行方式安裝包體積較大自帶運(yùn)行環(huán)境很小依賴 Node 環(huán)境啟動(dòng)方式點(diǎn)圖標(biāo)啟動(dòng)superpowers命令啟動(dòng)互聯(lián)協(xié)作需要額外配置直接綁端口局域網(wǎng)可訪問(wèn)升級(jí)版本重新下載npm update -g superpowers適合場(chǎng)景小白嘗鮮、單機(jī)開(kāi)發(fā)我推薦所有常寫代碼的人選這個(gè)從擴(kuò)展性來(lái)說(shuō)npm 方式更好。你想讓團(tuán)隊(duì)協(xié)作連同一臺(tái)服務(wù)命令行啟動(dòng)后直接輸出局域網(wǎng)地址即可如果哪天服務(wù)掛了重啟命令也就一條??蛻舳藙t多了一層殼反而不好定位問(wèn)題。所以這篇文章后面都是以 npm 方案為主線這也是我實(shí)際驗(yàn)證過(guò)的最穩(wěn)路徑。2.3 版本鎖定與鏡像加速npm 全局安裝有一個(gè)隱藏問(wèn)題如果不指定版本裝到的永遠(yuǎn)是latest。但開(kāi)源項(xiàng)目有自己的更新節(jié)奏l(xiāng)atest不一定和你的 Node 版本兼容。我第二次裝的時(shí)候就直接鎖定了當(dāng)時(shí)驗(yàn)證過(guò)的版本命令類似npm install -g superpowers0.x當(dāng)然具體可用版本號(hào)請(qǐng)以你安裝時(shí)的 npm 源顯示為準(zhǔn)但先查版本、再鎖版本這個(gè)習(xí)慣一定要養(yǎng)成。另外國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境下npm 官方源非常慢甚至在下載某些依賴時(shí)直接超時(shí)。建議提前切換鏡像源npm config set registry https://registry.npmmirror.com切換完之后安裝速度會(huì)明顯加快。如果項(xiàng)目中某些原生依賴仍然拉取失敗可以考慮用npx node-gyp rebuild或直接查看錯(cuò)誤日志對(duì)癥處理但多數(shù)情況下鏡像源 LTS Node 的組合已經(jīng)能解決九成問(wèn)題。3. 完整安裝實(shí)操?gòu)拿畹綖g覽器3.1 npm 全局安裝與啟動(dòng)環(huán)境確認(rèn)沒(méi)問(wèn)題后正式安裝其實(shí)非???。打開(kāi)你的終端執(zhí)行npm install -g superpowers安裝過(guò)程會(huì)輸出一堆包名看到added字樣基本就成功了。接著在終端輸入superpowers服務(wù)啟動(dòng)后終端會(huì)顯示一段提示大意是服務(wù)已經(jīng)跑起來(lái)了讓你用瀏覽器訪問(wèn)本機(jī)端口。如果一切順利瀏覽器打開(kāi)http://localhost:4237就能看到管理界面。我第一次跑的時(shí)候什么都不懂以為裝完就直接有圖標(biāo)點(diǎn)結(jié)果發(fā)現(xiàn)命令行啟動(dòng)才是常態(tài)。這跟你用 Vite 啟動(dòng)前端項(xiàng)目是一個(gè)思路不是什么稀奇事。每次想開(kāi)始工作打開(kāi)終端敲superpowers然后瀏覽器訪問(wèn)就完事。注意終端窗口不要關(guān)關(guān)了服務(wù)就停了。習(xí)慣了 IDE 按鈕啟動(dòng)方式的人可能需要一點(diǎn)時(shí)間適應(yīng)這種常駐終端的模式。3.2 瀏覽器訪問(wèn)與初始賬號(hào)設(shè)置第一次通過(guò)瀏覽器打開(kāi)管理界面時(shí)系統(tǒng)會(huì)讓你創(chuàng)建一個(gè)管理員賬號(hào)。這個(gè)設(shè)計(jì)很務(wù)實(shí)因?yàn)?Superpowers 本身是多人的架構(gòu)哪怕你本地單機(jī)開(kāi)發(fā)也需要一個(gè)身份來(lái)管理項(xiàng)目和協(xié)作者。賬號(hào)和密碼設(shè)置好之后你會(huì)看到一個(gè)服務(wù)器概覽頁(yè)上面有當(dāng)前服務(wù)地址、端口、項(xiàng)目列表之類的內(nèi)容。剛開(kāi)始列表是空的需要手動(dòng)創(chuàng)建項(xiàng)目。這里有一個(gè)經(jīng)驗(yàn)之談密碼盡量設(shè)一個(gè)長(zhǎng)期固定、但不用和重要網(wǎng)站重復(fù)的密碼。因?yàn)檫@臺(tái)服務(wù)如果開(kāi)了局域網(wǎng)訪問(wèn)同一網(wǎng)段的人理論上都能看到登錄頁(yè)千萬(wàn)不要圖省事留空密碼或者設(shè)成純數(shù)字短密碼。3.3 創(chuàng)建你的第一個(gè)項(xiàng)目在管理頁(yè)里找到創(chuàng)建項(xiàng)目的入口填一個(gè)項(xiàng)目名然后選擇模板。Superpowers 自帶幾個(gè)示例模板比如空項(xiàng)目、第一人稱射擊模板、俯視角角色扮演模板等。我的建議是第一次先選空項(xiàng)目或者帶基礎(chǔ)場(chǎng)景的模板不要一上來(lái)就開(kāi) FPS 示例。因?yàn)槭纠?xiàng)目里塞了一堆資源和腳本新手很容易被界面里的各種面板搞暈。空項(xiàng)目一切從零開(kāi)始反而能讓你把最基礎(chǔ)的場(chǎng)景-物體-腳本關(guān)系捋清楚。創(chuàng)建完成后點(diǎn)擊進(jìn)入項(xiàng)目瀏覽器會(huì)加載一個(gè)完整的編輯界面。注意這個(gè)界面不是在線的 demo而是你本地服務(wù)器的真實(shí)編輯器加載速度和本機(jī)文件系統(tǒng)直接相關(guān)通常幾秒就打來(lái)了。如果卡在加載界面半天不動(dòng)先想想是不是瀏覽器太老或者項(xiàng)目中資源過(guò)多。4. 編輯器初體驗(yàn)與核心操作4.1 界面布局與核心概念場(chǎng)景/演員/行為如果你用過(guò) Unity進(jìn)入 Superpowers 編輯器會(huì)有強(qiáng)烈的熟悉感。左側(cè)是資源樹Assets用來(lái)管理圖片、模型、音頻、腳本等文件中間是場(chǎng)景視圖Scene能看到當(dāng)前場(chǎng)景的 2D/3D 狀態(tài)右側(cè)是屬性面板Inspector展示選中物體的參數(shù)。但概念上有些差異它把場(chǎng)景里的每個(gè)東西叫做Actor翻譯過(guò)來(lái)是演員你要給演員加戲就是掛一個(gè)Behavior腳本。一個(gè)立方體、一個(gè)角色、一個(gè)相機(jī)都是 Actor。Actor 下有組件腳本也是一種組件。這個(gè)模型比 Unity 的 GameObject 概念更強(qiáng)調(diào)行為驅(qū)動(dòng)。實(shí)際操作中你不需要死記術(shù)語(yǔ)只需要理解場(chǎng)景里先建出 Actor然后給 Actor 掛腳本腳本決定它下一步干什么。就這么簡(jiǎn)單。4.2 創(chuàng)建基本游戲?qū)ο笈c設(shè)置在場(chǎng)景視圖里右鍵或者通過(guò)頂部菜單選擇創(chuàng)建 Actor然后選一個(gè)基礎(chǔ)幾何體比如立方體。創(chuàng)建完你會(huì)看到場(chǎng)景中央多了一個(gè)默認(rèn)的立方體右側(cè)屬性面板里能看到它的位置、旋轉(zhuǎn)、縮放。這里的默認(rèn)單位是米抽象單位你說(shuō)它是游戲里的坐標(biāo)單位就行。新手容易犯的一個(gè)錯(cuò)是創(chuàng)建了一堆物體全部疊在原點(diǎn)然后預(yù)覽的時(shí)候發(fā)現(xiàn)場(chǎng)景里只有一個(gè)東西——因?yàn)槠渌矬w都重疊了。建議把第一個(gè)物體的位置隨便改一下比如(0, 0, 0)、(2, 0, 0)、(-2, 0, 0)錯(cuò)開(kāi)擺放視覺(jué)效果才清晰。如果場(chǎng)景里沒(méi)有相機(jī)預(yù)覽畫面會(huì)黑屏或者什么都看不到。空模板有時(shí)會(huì)自帶相機(jī)有時(shí)不帶遇到這種情況就手動(dòng)創(chuàng)建一個(gè) Camera Actor并把它的位置放在可以看到物體的地方。這一步會(huì)卡住很多人我專門提一句。4.3 用 TypeScript 寫第一個(gè)移動(dòng)腳本現(xiàn)在到重點(diǎn)環(huán)節(jié)了。給對(duì)象掛行為腳本在資源面板里新建腳本文件命名為MoveBehavior然后把這個(gè)腳本拖拽到場(chǎng)景中的目標(biāo) Actor 上或者通過(guò)屬性面板給 Actor 添加組件來(lái)綁定腳本。腳本內(nèi)容我貼一下自己測(cè)試時(shí)用的版本做了最簡(jiǎn)處理class MoveBehavior extends Sup.Behavior { speed: number 0.05; update() { const keyboard Sup.Input.getKeyboard(); const move new Sup.Math.Vector3(0, 0, 0); if (keyboard.isKeyDown(LEFT)) move.x - this.speed; if (keyboard.isKeyDown(RIGHT)) move.x this.speed; if (keyboard.isKeyDown(UP)) move.z - this.speed; if (keyboard.isKeyDown(DOWN)) move.z this.speed; this.actor.move(move); } }代碼邏輯很簡(jiǎn)單每幀檢查鍵盤方向然后讓當(dāng)前 Actor 朝對(duì)應(yīng)方向移動(dòng)。這里的Sup是引擎暴露的全局命名空間Sup.Input負(fù)責(zé)讀取輸入actor.move()是 Actor 提供的移動(dòng)方法。具體 API 以當(dāng)前版本官方文檔為準(zhǔn)但思路就是這樣。寫完后保存腳本回到預(yù)覽模式右上角或菜單里都有預(yù)覽入口應(yīng)該就能用方向鍵控制那個(gè)物體了。注意這個(gè)物體必須是一個(gè)可移動(dòng)的 Actor且沒(méi)有掛和它沖突的其他物理組件否則你會(huì)看到移動(dòng)很慢或者根本動(dòng)不了。4.4 即時(shí)預(yù)覽與調(diào)試技巧預(yù)覽功能是它比傳統(tǒng)引擎更爽的一點(diǎn)。你不需要像打包程序那樣啟動(dòng)構(gòu)建直接在編輯界面打開(kāi)預(yù)覽瀏覽器就會(huì)跑一個(gè)當(dāng)前場(chǎng)景的版本。修改腳本保存后切回預(yù)覽頁(yè)刷新一下即可看到最新效果。我習(xí)慣的做法是把編輯器窗口和預(yù)覽窗口并排放左邊寫代碼右邊看運(yùn)行效果。引擎內(nèi)置的場(chǎng)景編輯和運(yùn)行預(yù)覽是分離的所以有時(shí)候你在預(yù)覽里移動(dòng)了物體回到編輯器會(huì)發(fā)現(xiàn)位置沒(méi)有同步這很正常別慌回到編輯器調(diào)整坐標(biāo)就行。調(diào)試方面你可以直接用console.log把變量打到瀏覽器控制臺(tái)。因?yàn)槭菫g覽器環(huán)境你還能順手用上開(kāi)發(fā)者工具的斷點(diǎn)調(diào)試這對(duì)于排查詢問(wèn)腳本邏輯的問(wèn)題簡(jiǎn)直是降維打擊。這里分享一下我自己的排錯(cuò)流程先看控制臺(tái)有沒(méi)有紅色報(bào)錯(cuò)再看腳本是否成功編譯最后檢查 Actor 是否真的掛上了腳本。三個(gè)檢查點(diǎn)通常能解決 80% 的代碼沒(méi)生效問(wèn)題。另外腳本文件名與類名不一致也會(huì)導(dǎo)致掛載異常這算是低概率但很隱蔽的坑最好讓兩者保持同名。5. 常見(jiàn)問(wèn)題與避坑實(shí)錄5.1 高頻報(bào)錯(cuò)速查表下面這份表格是我在安裝和使用過(guò)程中遇到過(guò)的真實(shí)問(wèn)題不是從文檔里抄的每一行都有過(guò)對(duì)應(yīng)的排查操作現(xiàn)象可能原因解決辦法npm install卡住或報(bào)錯(cuò)網(wǎng)絡(luò)源不穩(wěn)定切換鏡像源后重試啟動(dòng)后瀏覽器訪問(wèn)不了服務(wù)沒(méi)起來(lái)或端口錯(cuò)誤檢查終端日志、確認(rèn)端口 4237預(yù)覽黑屏場(chǎng)景沒(méi)有相機(jī)添加 Camera Actor 并調(diào)整位置腳本掛上但沒(méi)效果腳本文件名與類名不一致保持腳本名和類名一致移動(dòng)方向反了坐標(biāo)系理解偏差檢查 Camera 朝向和 Actor 空間坐標(biāo)控制臺(tái)報(bào) TypeScript 編譯錯(cuò)語(yǔ)法或變量類型問(wèn)題看具體行號(hào)修復(fù)保存后等待重編譯局部網(wǎng)絡(luò)其他設(shè)備無(wú)法訪問(wèn)防火墻攔端口放行 4237 或在安全網(wǎng)絡(luò)下使用項(xiàng)目加載慢資源過(guò)多或?yàn)g覽器緩存問(wèn)題清緩存、減少大模型導(dǎo)入這里要額外強(qiáng)調(diào)一點(diǎn)版本兼容性是排查問(wèn)題時(shí)最先要懷疑的。如果你玩的版本比較新而網(wǎng)上教程對(duì)應(yīng)的版本比較舊API 寫法很可能不一樣不要直接復(fù)制老代碼優(yōu)先看官方文檔或項(xiàng)目自帶的示例代碼。5.2 協(xié)作開(kāi)發(fā)注意點(diǎn)Superpowers 的協(xié)作特性是它最吸引人的地方但用之前要明白一個(gè)前提所有協(xié)作者連接的是同一臺(tái)運(yùn)行中的服務(wù)不再是每人一個(gè)本地項(xiàng)目再合并的模式。第一次聯(lián)調(diào)我犯了個(gè)錯(cuò)誤我以為團(tuán)隊(duì)成員各自在本地跑一個(gè)服務(wù)然后像普通游戲那樣聯(lián)網(wǎng)同步結(jié)果當(dāng)然行不通。Superpowers 的協(xié)作更像是都圍著同一臺(tái)服務(wù)器工作A 同學(xué)改了代碼B 同學(xué)刷新項(xiàng)目代碼的時(shí)候就已經(jīng)是最新的了。這意味著團(tuán)隊(duì)需要指定一臺(tái)機(jī)器作為公共開(kāi)發(fā)服務(wù)器或者用一臺(tái)內(nèi)網(wǎng)服務(wù)器常駐跑superpowers。使用協(xié)作時(shí)建議約定一套簡(jiǎn)單的誰(shuí)改哪一塊的軟件規(guī)范不然兩個(gè)人同時(shí)在同一個(gè)腳本里改雖然不會(huì)崩但會(huì)互相覆蓋。這個(gè)沒(méi)有自動(dòng) diff 和合并跟在線文檔的協(xié)作邏輯不完全一樣。小團(tuán)隊(duì)兩三個(gè)人用沒(méi)問(wèn)題人再多就要注意分工。5.3 發(fā)布與導(dǎo)出經(jīng)驗(yàn)做完了項(xiàng)目總要給別人看吧。Web 引擎的好處就是天然適合輸出網(wǎng)頁(yè)產(chǎn)物。Superpowers 提供了構(gòu)建與導(dǎo)出的流程具體操作可以看官方文檔——我在這個(gè)環(huán)節(jié)就沒(méi)必要把詳細(xì)步驟硬編出來(lái)了因?yàn)椴煌姹景粹o位置可能不一樣但大方向是一致的在服務(wù)器管理頁(yè)或者項(xiàng)目菜單里找導(dǎo)出構(gòu)建Deploy之類的功能。導(dǎo)出之后的靜態(tài)文件放到任意靜態(tài)服務(wù)器上客戶端瀏覽器訪問(wèn)就能玩。有一點(diǎn)經(jīng)驗(yàn)很關(guān)鍵如果項(xiàng)目里有請(qǐng)求外部資源的腳本導(dǎo)出后可能會(huì)出現(xiàn)跨域問(wèn)題。排查思路就是看瀏覽器控制臺(tái)的網(wǎng)絡(luò)請(qǐng)求逐個(gè)確認(rèn)資源路徑是否能被訪問(wèn)。我個(gè)人給的建議是導(dǎo)出前先在本地預(yù)覽一遍所有場(chǎng)景不要只測(cè)主場(chǎng)景。有些場(chǎng)景引用的資源沒(méi)打包進(jìn)去本地不報(bào)錯(cuò)傳到服務(wù)器就 404這種問(wèn)題等到發(fā)布后再查就很被動(dòng)。寫在最后的幾句心里話折騰 Superpowers 的過(guò)程讓我重新想起一個(gè)樸素的道理順手比強(qiáng)大更重要。它當(dāng)然沒(méi)法提供虛幻引擎那種夸張的畫面表現(xiàn)也不像某些老牌引擎一樣擁有一整套龐大生態(tài)但它把裝完就能跑、跑起來(lái)就能改、改完就能看這件事做到了極致。我后來(lái)甚至專門在虛擬機(jī)里開(kāi)了一臺(tái)常駐服務(wù)專門給朋友做原型驗(yàn)證用這種體驗(yàn)是傳統(tǒng)編輯器給不了的。如果你想找的是一款低門檻、適合快速驗(yàn)證想法、又能拉上朋友一起動(dòng)手的引擎那 Superpowers 值得你在某個(gè)周末給它一次機(jī)會(huì)如果你需要的是工業(yè)級(jí)的工時(shí)管理和渲染管線那它不適合你別耽誤時(shí)間。工具不分高低分的是匹配不匹配你的需求。