SpinningTop 實戰教材版
以陀螺專案 2D→3D 搬移的真實過程為教材:引擎做掉了什麼、網頁怎麼自己做、特效為什麼難、AI 的強項與盲區。給決策者的通盤認知地圖。
Unity/Cocos 不是「一個工具」,是十幾個子系統的集合。不用引擎,這些全部要自己做(或用零散的網頁函式庫拼)。好消息:每一項 AI 都寫得出來;差別在有些一次就對、有些要跟人來回迭代。
| 子系統 | 引擎給你的 | 網頁上自己做 | AI 開發難度 |
|---|---|---|---|
| 遊戲迴圈 | Update()/FixedUpdate() 框架 | requestAnimationFrame + deltaTime + 邏輯/渲染分離 | 容易・一次寫對 |
| 渲染管線 | 場景圖、相機、材質、光照全包 | Canvas 2D 自己畫,或 Three.js 自組場景/相機/材質 | 中等・見② |
| 資產載入 | 拖進編輯器就能用 | 自寫 loader(FBX/貼圖/音效)+載入順序管理 | 容易 |
| 骨骼動畫 | Animator 狀態機、動畫混合 | Three.js AnimationMixer + 自寫狀態機(哪個狀態播哪段) | 中等・狀態機是坑(見④) |
| 物理/碰撞 | 物理引擎內建 | 自寫(我們的專案就是自寫圓形碰撞+反彈) | 中等・手感靠特例調 |
| 粒子/特效 | Particle System 視覺化編輯 | 四種做法自己選(見③) | 難・本報告重點 |
| UI 系統 | UGUI/FairyGUI | HTML/CSS 疊在遊戲畫布上(反而比引擎好做) | 容易・網頁的主場 |
| 除錯工具 | 編輯器內建 Inspector/Profiler | 自建除錯面板(我們的 PERF 面板:切渲染模式/凍結畫面/FPS) | 容易・但要記得做 |
| 跨裝置適配 | 解析度方案內建 | 自己處理縮放/DPR/效能分級 | 中等 |
我們的專案三種都有(PERF 面板可切),是活教材。
CPU 每幀用畫圖指令(畫線/畫圓/貼圖片)把整個畫面重畫一次。AI 最擅長的路線——所有視覺都是一行行看得懂的畫圖程式。
把模型/材質/燈光放進 3D 場景,GPU 負責畫。效能好、真立體,但要理解 3D 概念。
3D 場景(背景/怪物/陀螺)+透明 2D 畫布(特效/UI)疊在上面。移轉期的務實選擇,但有結構性代價:
特效是「不用引擎」最難的部分——引擎的粒子編輯器幫美術做掉的事,網頁上要在四種技術方案裡選對的用。
| 做法 | 原理 | 適用 | 代價 |
|---|---|---|---|
| 1. CPU 程序畫圖 (2D canvas) |
每幀用程式畫線/圓/漸層 | 形狀複雜、變化快、數量少的(星形爆炸、電弧、對決 UI) | 吃 CPU;在混合模式下永遠蓋最上層 |
| 2. GPU 粒子系統 | 發射一批粒子,GPU 自己算軌跡 | 大量小顆粒(打擊碎屑、火花雨) | 每顆粒子只能是簡單形狀(點/小貼圖) |
| 3. GPU shader 程序化 | 用數學公式在顯卡上「算」出圖形 | 幾何規則+高頻變化的(衝擊波圓環、光圈、虛線圈) | 要寫 shader(AI 擅長,但視覺對齊要迭代) |
| 4. 貼圖烘焙 (canvas→texture) |
用 2D 畫法畫進小圖,貼到 3D 面片 | 視覺要求 100% 一致+變化慢的(警示圈) | ⚠️ 每幀上傳貼圖有頻寬紅線(見下) |
混合模式 = 兩張獨立畫布疊放:下層 WebGL(3D 世界)、上層 Canvas(特效/UI)。同一張紙上可以自由決定先畫誰後畫誰;兩張紙疊著,上面永遠蓋住下面——這是瀏覽器的物理疊放,沒有商量餘地。
所以「特效蓋在怪物頭上」不是 bug,是混合架構的結構性代價。治本 = 把特效搬進 3D 世界內(它就有了「深度」,怪物可以站在特效上面)——這正是我們現在做的事,也是為什麼要一種一種搬(每種特效要按上面四種做法選型重做)。
該留在上層的:資訊類(血條、傷害數字、頭上票數、對決 UI)——這些本來就該蓋在一切之上,是合理的最上層。
20+ 個實際問題(完整清單見 wiki 問題報告)歸納成四類。新專案或新功能,先對照這四類做設計檢查。
從我們這幾天實際合作模式提煉——這套流程已經在陀螺專案上驗證過一輪。
| 項目 | 說明 | |
|---|---|---|
| AI 強 | 寫程序化視覺 | 畫圖碼、shader、粒子——給參考就能寫出來 |
| AI 強 | 架構搬移、批次修改 | 狀態機重寫 150 行一次到位、20 項問題逐一根因修復 |
| AI 強 | 自我排查 | 並排讀兩版程式碼找差異、量測數據定位根因(身體偏移 10-30px 是量出來的) |
| AI 盲 | 視覺驗收 | AI 的驗證環境看不準 3D 細節(頭朝向那次 AI 自以為修了)——人眼是唯一標準 |
| AI 盲 | 手感 | 打擊感「停一拍」這種東西 AI 不會主動感知——要人描述(你說了 AI 才能對齊) |
| AI 盲 | 真機效能 | AI 環境的 FPS 沒參考價值——掉幀只有你玩得出來 |
wiki/decisions/2d-to-3d-migration-issues.md)wiki/conventions/webgl-3d-rendering-rules.md)