Web 遊戲照現在的方式開發:桌面瀏覽器、Vite dev server、部署 Cloudflare 測試站。橋接層 UnityBridge 在沒有 Unity 的環境自動掛 mock 模式:鍵盤模擬投幣、開局、硬體事件,機率判定用本地假骰。
好處:遊戲團隊完全不需要板子或 Unity 環境就能開發 99% 的內容;mock 和真橋走同一個介面,整合時零改動。
init → ready 握手npm run build 的 dist 資料夾放進 Unity 的 StreamingAssets,跟 APK 一起裝機——機台不需要網路整合後 WebView 全螢幕蓋頂,Unity 畫面無人可見——殼只需活著做 IO 與橋接。POC 依此清單設定,目標:CPU 個位數 %、GPU 趨近 0:
Application.targetFrameRate = 10(局中可降至 5;操作員開選單時拉回 30,關閉即降回)Camera.enabled = false 或 OnDemandRendering 隔幀渲染——GPU 讓給網頁測試有效性保證:WebView 與瀏覽器同引擎、系統疊層合成成本極小 → 整合後效能 ≈ 瀏覽器實測值 − 殼殘餘幾 % CPU。驗收加一條 A/B 實測:同板「純瀏覽器 vs Unity殼+WebView」FPS 差距須 <10%,用數據關掉疑慮。
Unity 負責開機自動啟動、看門狗(心跳監控、自動重載)、每日離峰自動重載網頁(清記憶體)、錯誤紀錄落地。操作員選單、對帳、機率調整全在 Unity 端,跟現有機台的維運習慣一致。
| # | 限制 | 白話說明 | 因應方式 |
|---|---|---|---|
| 1 | 橋只能傳字串、非同步 | 不能傳物件/圖片/音訊過橋;不能「呼叫後原地等答案」(會凍結畫面)。單趟往返 1~2 幀(8~33ms) | 訊息全 JSON;打擊採「特效先播、判定下幀套用」;大資源走檔案不過橋 |
| 2 | WebView 版本決定功能 | WebGL2(畫面)、DecompressionStream(模型解壓)等能力取決於板子的 System WebView 版本,太舊會缺功能 | 選板時用 webglreport.com/?v=2 驗證;鎖定版本後整機驗收;解壓有自動退回原檔的保險 |
| 3 | 記憶體是兩家分 | Unity 和網頁引擎同時活著,iPhone 8 等級的 RAM 要養兩個引擎 | Unity 殼保持空場景/純邏輯(不渲染重內容);web 資產已瘦身 92%;營運期每日重載 |
| 4 | Unity 畫面疊不上網頁 | 疊加式 WebView 永遠在 Unity 畫面之上——Unity 的 UI 蓋不到網頁上面 | 操作員選單二選一:暫時隱藏 WebView 切回 Unity 畫面(套件支援),或選單也做成網頁(規格書開放問題 3) |
| 5 | 網頁音訊要「解鎖」 | 瀏覽器規定音訊要有一次使用者互動才准播(防自動播放廣告),機台開機自啟會踩到 | UniWebView 可設定免手勢播放;整合驗收必測「開機直接有聲音」 |
| 6 | 實體按鍵的路由要定案 | 機台按鍵/搖桿訊號進安卓後,「誰收」要明確:WebView 直接收?還是 Unity 收再轉發? | 建議統一 Unity 收(IO 本來就在 Unity)→ 過橋轉發;避免兩邊搶輸入的雙軌混亂 |
| 7 | file:// 不能用 | 直接讀本地檔案模式會被瀏覽器安全限制擋掉動態載入 | 已定案:localhost 供檔或套件 asset 映射(POC 後二選一) |
| 8 | 錢向邏輯不准放 Web | 表演與判定分離原則——這是自我要求的紅線,不是技術限制 | 協定已貫徹:Web 只送事件,計票/機率/派彩全在 Unity |
| 風險 | 嚴重度 | 發生情境 | 對策(多數已寫進協定) |
|---|---|---|---|
| 板子 WebView 過舊,WebGL2 跑不動 | 高 | 選了太老的板子/系統,遊戲畫面直接開不出來 | ⚠️ 選板前置驗證(webglreport+直接開遊戲),這是採購前必做,事後無解 |
| 效能不達標(FPS 低於可玩) | 高 | iPhone 8 級 GPU 撐不住滿場怪+特效 | 資產已瘦身;專案本有 perfConfig 降級管線(特效減量);板子到手第一件事跑效能實測,用數據決定降級檔位 |
| 網頁當機/白畫面 | 中 | 長時間營運後 WebView 崩潰 | 心跳 3 秒斷線自動重載+局中回復(協定 §6);驗收含「強殺 WebView 10 秒內復活」 |
| 記憶體累積→OOM 閃退 | 中 | 連續營運多日,網頁引擎記憶體慢慢漲 | 每日離峰自動重載(載入已優化到幾秒,無感);Unity 端記憶體監控+告警落紀錄 |
| 更新半套(web 新、Unity 舊) | 中 | 維護人員只更新了一邊 | 協定版本握手:不合直接拒開局顯示維護畫面(§6.5),寧停不錯帳 |
| 開機無聲音 | 中 | 音訊自動播放限制沒處理 | UniWebView 設定+開機自檢清單列入 |
| 輸入路由混亂 | 中 | 按鍵有時給 Unity 有時給網頁,操作時靈時不靈 | 定案「全由 Unity 收再轉發」單軌制;整合期用自動化按鍵連打測試驗證 |
| 對帳不一致 | 低 | 橋在重載瞬間掉了事件,Web 和 Unity 數字對不上 | 三層防護:序號缺口偵測+關鍵訊息 ack+局終對帳以 Unity 為準(§2/§6.6) |
| 供檔服務啟動失敗 | 低 | localhost 埠被佔用等罕見情況 | 啟動重試+備用埠+失敗顯示維護畫面(不會靜默黑屏) |
| 系統彈窗/導航列跳出來 | 低 | 安卓系統更新提示等打斷 kiosk 全螢幕 | kiosk 模式設定(immersive+關自動更新+開機自啟動),機台裝機 SOP 列入 |
UnityBridge 橋接層+mock 模式+把「機率判定」從 web 內部改為走橋詢問(mock 回答)——這步做完,web 端整合工作就完成 8 成