Unity ↔ Web:使用・限制・風險報告

2026-07-19|製程守門員|供蔡決策與 Unity 端團隊參考|姊妹篇:《串接協定規格書》《橋接執行緒圖解》
跳到:一、怎麼使用二、限制(要遵守的)三、風險清單與對策四、接下來的路線圖

一、怎麼使用(三個階段)

階段 1:日常開發(現在~整合前)——什麼都不用改

Web 遊戲照現在的方式開發:桌面瀏覽器、Vite dev server、部署 Cloudflare 測試站。橋接層 UnityBridge 在沒有 Unity 的環境自動掛 mock 模式:鍵盤模擬投幣、開局、硬體事件,機率判定用本地假骰。

好處:遊戲團隊完全不需要板子或 Unity 環境就能開發 99% 的內容;mock 和真橋走同一個介面,整合時零改動。

階段 2:整合(板子+UniWebView 到位後)

  1. Unity 殼 App:既有彩票機框架 + UniWebView 6。啟動流程:開本地供檔(localhost 或套件 asset 映射)→ 開全螢幕 WebView 載入遊戲 → 走協定 init → ready 握手
  2. Web 遊戲打包進 APKnpm run build 的 dist 資料夾放進 Unity 的 StreamingAssets,跟 APK 一起裝機——機台不需要網路
  3. 橋接通訊:全部走協定規格書定義的 JSON 訊息(投幣、開局、hit_query、心跳、出票…)
  4. 更新遊戲:大多數改動只動 web 資料夾(換 dist 重打包,Unity 殼不用改);改到協定才需要兩邊一起動+版本握手保護

階段 2.5:Unity 殼省電規格(讓 GPU/CPU 全讓給網頁遊戲)

整合後 WebView 全螢幕蓋頂,Unity 畫面無人可見——殼只需活著做 IO 與橋接。POC 依此清單設定,目標:CPU 個位數 %、GPU 趨近 0

測試有效性保證:WebView 與瀏覽器同引擎、系統疊層合成成本極小 → 整合後效能 ≈ 瀏覽器實測值 − 殼殘餘幾 % CPU。驗收加一條 A/B 實測:同板「純瀏覽器 vs Unity殼+WebView」FPS 差距須 <10%,用數據關掉疑慮。

階段 3:營運(機台上線後)

Unity 負責開機自動啟動、看門狗(心跳監控、自動重載)、每日離峰自動重載網頁(清記憶體)、錯誤紀錄落地。操作員選單、對帳、機率調整全在 Unity 端,跟現有機台的維運習慣一致。

二、限制(設計時要遵守的邊界)

#限制白話說明因應方式
1橋只能傳字串、非同步不能傳物件/圖片/音訊過橋;不能「呼叫後原地等答案」(會凍結畫面)。單趟往返 1~2 幀(8~33ms)訊息全 JSON;打擊採「特效先播、判定下幀套用」;大資源走檔案不過橋
2WebView 版本決定功能WebGL2(畫面)、DecompressionStream(模型解壓)等能力取決於板子的 System WebView 版本,太舊會缺功能選板時用 webglreport.com/?v=2 驗證;鎖定版本後整機驗收;解壓有自動退回原檔的保險
3記憶體是兩家分Unity 和網頁引擎同時活著,iPhone 8 等級的 RAM 要養兩個引擎Unity 殼保持空場景/純邏輯(不渲染重內容);web 資產已瘦身 92%;營運期每日重載
4Unity 畫面疊不上網頁疊加式 WebView 永遠在 Unity 畫面之上——Unity 的 UI 蓋不到網頁上面操作員選單二選一:暫時隱藏 WebView 切回 Unity 畫面(套件支援),或選單也做成網頁(規格書開放問題 3)
5網頁音訊要「解鎖」瀏覽器規定音訊要有一次使用者互動才准播(防自動播放廣告),機台開機自啟會踩到UniWebView 可設定免手勢播放;整合驗收必測「開機直接有聲音」
6實體按鍵的路由要定案機台按鍵/搖桿訊號進安卓後,「誰收」要明確:WebView 直接收?還是 Unity 收再轉發?建議統一 Unity 收(IO 本來就在 Unity)→ 過橋轉發;避免兩邊搶輸入的雙軌混亂
7file:// 不能用直接讀本地檔案模式會被瀏覽器安全限制擋掉動態載入已定案: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 列入
總評:高風險兩項都集中在「板子硬體選型」——這是採購前要用實測把關的事,其餘風險全部有標準對策且多數已寫進協定。架構本身(表演/判定分離+訊息橋)是成熟模式,不存在無解的技術風險。

四、接下來的路線圖(建議順序)

  1. 蔡定案:規格書 §9 五個開放問題——最關鍵是 outcome 形式(建議模型 A 即問即答起步)+按鍵路由(建議 Unity 單軌)
  2. 採購動作:買 UniWebView 6;板子候選機到手先跑兩個驗證(webglreport + 直接開遊戲測 FPS),過了才定板
  3. Web 端先行(不用等板子):實作 UnityBridge 橋接層+mock 模式+把「機率判定」從 web 內部改為走橋詢問(mock 回答)——這步做完,web 端整合工作就完成 8 成
  4. Unity 殼 POC:空專案+UniWebView+供檔+橋 echo 測試(收什麼回什麼),驗證整條鏈路通
  5. 整合聯調:真機率模組接上 hit_query;跑協定驗收清單(§8:斷橋、選單開關 100 次、對帳 100%)
  6. 營運化:看門狗、每日重載、開機自檢、裝機 SOP
分工介面清楚:第 3 步純 web 團隊、第 4 步純 Unity 團隊、兩邊只靠協定文件對接——這就是先寫規格書的原因。