JSG11 保齡球 — 完整企劃書
TM 小曹 · 2026-08-21 v3.2:雙人換人字卡的英文小字幕依 RD 實機實裝對齊(總覽 §7,DEC-JSG11-063,BW-208)— 字級 56px → 80px、可讀性補強由「黑色投影」改為 黑色 8 方向描邊 5px(Unity OutlineWith8Direction,Effect Distance 5/5 + Use Graphic Alpha)、字型定案 GenSenRounded-B(Font Style 維持 Normal 不另勾 Bold);版位連帶重算 (500,734) 920×60 → (480,722) 960×130(RD 端掛 Content Size Fitter,左緣距出手回饋面板只剩 20px,字串不可再變長);文字內容與多國 ID 57031/57032 不變 | 上版:2026-08-10 v3.1:雙人模式換人提示改用全螢幕 Your Turn 特效字卡(總覽 §7,DEC-JSG11-059,BW-208)— 原橘色橫幅取消,大字與光帶直接沿用冰壺現成素材與動態、美術零工項,1P/2P 共用同一張;辨識靠下方英文小字幕「PLAYER 1 · BALL {0} OF 5」(多國 57031/57032,中英同字串);時序不變(黑畫面後 0.15/0.60/0.25、不封鎖輸入、淨增等待 0 秒) | 上版:2026-08-03 v3.0:雙人模式 v1.6 三項修訂(總覽 §7)— ① 關卡開放由「5 關全開」改為跟隨單人已解鎖進度(DEC-JSG11-056,BW-199)② 雙人紀錄這一版不做(暫緩到上架版,BW-213)③ 雙人藍牙連線要做但畫面不講究、QC 這一版不測(BW-198);BW-197/BW-199 程式負責人改派蝸牛 | 上版:v2.9 新增雙人模式 v1.6(BW-197~213 共 17 項;每球換人/各 5 球/不綁教學,戰鬥 HUD 雙列記分板 + 換人提示 + 雙欄結算)| 再上版:v2.8 互動式新手教學關卡 v2.4(BW-186~195,程式負責人 Alan)+ 藍牙裝置連線燈號補齊

JSG11 保齡球

單人闖關 · 兩階段投擲 · 5 關機關闖關 · 投擲曲球
類型 運動 / 體感
模式 單人 5 關闖關 + 雙人對戰(v1.6)
球數 每關固定 10 球
門檻 遞增 24/48/68/88/96;挑戰加分 +10/+20/+30/+40/+50
製作 5/18 ~ 7/B(1.5 月)+ Alpha 0.5 月
CP 7/7 一次驗收

1遊戲核心

單人闖關保齡球遊戲。採用 兩階段投擲操作(旋手腕選位 + 看時機推出選角度),新增 手環角加速度驅動的旋轉球路——投擲瞬間扭腕決定球路彎曲方向,玩家可主動曲球避開機關。

5 關闖關制 + 簡化分數制(Open / Strike,無 Spare)。每關有獨立機關特色(障礙物 / 黑洞 / 地雷 / 風),鼓勵玩家學習各關策略並挑戰附帶任務。

關鍵賣點

🎯 玩家技術定變化

投擲瞬間手腕扭動量決定球軌跡彎曲程度,出手後不可再調整。練熟 = 主動曲球避機關,重玩價值來自操控精進。

🎪 5 關 5 種樂趣

標準 → 障礙物 → 黑洞 → 地雷 → 風吹。每關一個機關,位置固定可學,附帶任務 +10 鼓勵嘗試。

🧠 規則簡單客服好解釋

只有 Open / Strike,無 Spare、無連擊獎勵、無強化球。心算容易、UI 顯示絕對分數。

⚠️ 前端與規則重做

演算法層(Andros 既有 OnPush / OnRotate / OnConfirm)沿用,除此以外全部重做(含遊戲規則)。時程風險詳見「開發」分頁。

2設計哲學

簡化勝過複雜

規則直白、玩家心算容易、客服解釋簡單。寧可砍規則也不增加心智負擔。

沒有失敗 ≠ 沒有後果

不會 game over 整輪重來,但沒過門檻會回大廳重新選關(不解鎖下一關)。

挑戰非必要、但有設計重量

附帶挑戰任務(+10~+50,各關遞增)計入門檻,鼓勵玩家嘗試但不強迫。

變數在玩家、固定在機關

旋轉量由玩家手腕扭動決定(操控變量);機關位置固定(玩家可學、QC 好平衡)。

3操作系統 — 兩階段投擲

沿用 Andros 既有 input pipeline(演算法層),唯一新增是階段 2 的「箭頭自走擺動」取代冰壺的「手腕主動轉角度」。UI 層所有實作重新撰寫(不沿用冰壺前端 code)。

1
階段 1 — 選位置(站位)
玩家 手腕垂直地板(手心朝內),旋轉手腕(左右側轉)→ 對應球道上球的初始 X 站位。
使用 Andros 演算法 DetectRotate(✅ 沿用)+ JSG11_StancePositionUI(❌ 自寫),roll 角度越大,multiplier 越大(站位變化越快)。
2
階段 1→2 — 手放下鎖站位
手放下(手腕從垂直轉為水平 / 下垂)→ 觸發冰壺 OnConfirm 事件 → 鎖定站位 → 進入「推球準備」狀態。
3
階段 2 — 瞄準箭頭自動擺動
瞄準箭頭以 DOTween 連續擺動(無鎖方向動作)。
新增 取代冰壺 SetObjectRotation() 的手腕主動轉角度。
4
階段 2 — 看時機推出
玩家 看時機推出(揮臂)→ 觸發冰壺 PushCurling → OnPush(forcePercentage)。
推出瞬間擷取當下箭頭角度作為球的初始 forward 向量。
5
(可選)重選 — 手往上抬
手往上抬 → 觸發 OnReadjust → 回到階段 1 重選。依 UX 決定是否開放。
📐 鏡頭流程(v1.3)
球出手 → 鏡頭停在投擲視角不動(看球往前飛)→ 過截止線切到 _traceCamera 開始跟球(無 zoom in、無瓶區近景)→ 倒瓶 / 球停鏡頭固定。
不沿用冰壺 OverHeadCamera 結算頂視角流程。原 v1.2 PinAreaCamera 已刪除。

🎬 字卡播放順序(2026-05-28 v1.4 統一決議)

所有觸發路徑(碰判定點 / 進溝 / Strike / 黑洞吸入 / 球低速判定)走同一序列。最後一球(Finish)後直接切結算,不走黑畫面 fade。

球停下(碰判定點 / 進溝 / Strike 即時 / 球低速)
  │
  ├─ 等 3 秒(觀察期;若全倒可提前觸發 Strike)           ← BW-088
  │
  ▼
閘門下拉動畫 + 字卡(Strike/Open/Gutter/Sucked)
  + 分數彈出 + 挑戰面板即時演出(同步)            ← BW-088, BW-091 (Strike), BW-127 (Gutter), BW-131 (Sucked), BW-080~083 (挑戰面板)
  │
  ├─ 若 Strike + 挑戰達標 → Challenge Clear 字卡           ← BW-085
  │
  ▼
分支判定:
  ┌─ 非最後一球 → 黑畫面 fade(BW-087)→ 投擲視角 → 下一球
  │
  └─ 最後一球(Finish)→
       │
       ▼
     Finish 字卡(BW-117)
       │
       ▼  ← 直接切換,無黑畫面 fade(沿用 Lobby Modal 動畫)
       │
     結算畫面(BW-095~101,BW-089 沿用 BW-178 Lobby Modal token)
       │
       ├─ 若打破最高分 → HighScore 字卡                    ← BW-119(NEW)
       │
       └─ 若解鎖新關卡 → New Stage 字卡                    ← BW-118
       

實作關聯:BW-024(鏡頭停止線)/ BW-088(3 秒 + 同步演出)/ BW-119(HighScore)/ BW-089(最後一球流程)/ BW-104(空氣牆)。字卡動畫秒長由綠豆統一(r134 動態階段)。
詳細逐 Phase 演出時機見 UI 頁「單球循環流程」。

🎯 出手回饋 — 力道與旋轉 v1.6 NEW

玩家丟完一球之後,畫面左下角會告訴他剛剛用了多少力、球轉了多少。2026-07-28 拍板新增(DEC-JSG11-049),跟雙人模式同一批做。

📊 顯示什麼

力道=一個圓環+中間的百分比數字,環從 12 點鐘位置順時針長。旋轉=一條中間是零點的橫條,橘色從中間往左長代表左旋、往右長代表右旋,條越長彎越多,下面再寫一行「左旋/右旋/直球」。旋轉不給數字、也不分強中弱 — 條有多長就代表轉多少,多一層文字分級只會讓玩家以為可以精準控制。

🔁 這是「回饋」不是「操控」

保齡球沒有蓄力條:力道和旋轉都是揮臂推出去的那一瞬間才從手環讀到的,玩家丟之前既看不到也調不了。所以這兩個顯示的作用是告訴玩家剛剛做了什麼,不是讓他丟之前先設定。(這也是為什麼它跟企劃書早期寫過「不做力道條」不衝突 — 那講的是投擲前的蓄力條,那個到現在還是不做。)

⏱️ 為什麼不學冰壺鎖畫面

冰壺是投完之後鎖住畫面、圓圈慢慢轉 3 秒,期間玩家不能動。冰壺撐得住是因為球數少;保齡球一局 10 球,照抄等於一局白等 30 秒,雙人每球換人更嚴重。改成出手瞬間 0.4 秒填到值、全程不擋操作,一局多花 0 秒。

📌 為什麼要一直留著

面板顯示的永遠是「上一球」的值,出手後就留著不走,直到下一球丟出去才更新。如果球停就消失,玩家看得到它的那幾秒正好在盯著球滾,等於白做。留著,玩家下次選位置時才會想「上一球 92%、直球,剛剛洗溝了,這球收一點」 — 回饋要活到下次做決定的時候才有價值。

👥 單人 · 雙人 · 教學一條規則

「該玩家這一關第一次丟出去之後才出現,之後就一直在」— 一條規則三個模式通用。雙人不做兩份面板(同時只有一個人在丟),但顯示的必須是當前這位玩家自己的上一球,換人時淡入淡出換掉、標籤前面加 1P/2P。教學關卡則是影片面板收起來時才顯示。

📐 還缺一組數值

「100% 是多少」還沒定義。力道的滿格值(是出手速度還是手腕加速度峰值?)跟旋轉條的滿格值都要演算法端給,UI 才有基準。可行性沒問題(2026-07-28 TM 確認力道百分比做得到),所以不擋開發 —— 版面與程式照常做、先接假資料,數值到位後接上即可。

4互動式新手教學關卡 v2.4 NEW

對應 Excel LevelSetting._id=0(LevelTypeId=0)——早於 v1.0 就已預留但從未補完設計的教學關,2026-07-01 正式定案(DEC-JSG11-030/031)。跟既有「教學頁」(畫面 9~11,純圖文/影片,看不能玩)並存不衝突:教學頁維持原樣,本功能是額外的真正可操作練習關卡,讓玩家進正式關卡前實際動手練。

🎬 可收合教學影片面板

每階段開始自動於畫面左側彈出大面板,展示 30 秒後自動收合(或手動按內嵌三角形按鈕),收合後貼齊左緣僅留直立把手,練習操作區域完整可見。

🎯 3 階段練習目標

選擇位置 ×4 / 丟出保齡球 ×3 / 曲球控制 ×3(🟡 初版設計值,待 RD 實機測試確認)。每階段完成才自動進入下一階段,重用 HUD/ChallengeTask 顯示即時計數。

🏁 無結算、直接返回

3 階段全部完成後播 WordCard_Finish(沿用正式關卡字卡素材,不重畫),無結算頁、無分數,播完直接返回大廳。

👤 負責分工

程式實裝:Alan(維護組,非原開發組兔子)。視覺/wireframe:TM+AI。對應 BW-186~195,詳細規格見「UI」分頁 §3「24 個畫面清單」畫面 18~24。

5計分系統

結果條件得分備註
Open沒倒完所有正規瓶倒幾瓶 = 幾分—
Strike1 球倒完所有正規瓶15 分(10 + 5)+5 加乘獎勵
挑戰任務達成 / 沒達成(binary)+10~+50 分(各關遞增)計入過關門檻

滿分計算

基礎滿分 = 10 球 × (正規瓶 + 5) = 150

含挑戰滿分(各關不同):
  Stage 1:150 + 10 = 160
  Stage 2:150 + 20 = 170
  Stage 3:150 + 30 = 180
  Stage 4:150 + 40 = 190
  Stage 5:150 + 50 = 200

門檻(解鎖下關):
  Stage 1=24  Stage 2=48  Stage 3=68
  Stage 4=88  Stage 5=96

重要規則

  • 沒有 Spare
  • Strike 加乘僅 +5,無連擊獎勵
  • Strike 判定只看 正規瓶(障礙瓶、地雷彈飛瓶不影響)
  • 地雷彈飛瓶子也算倒下,仍可 Strike(但挑戰失敗)
  • UI 顯示絕對分數(如「過關 24」各關不同),不顯示百分比
  • 強制打完 10 球,提前達標也要打完

65 關闖關架構

解鎖:打贏本關門檻 → 下一關開放。沒過門檻 → 回大廳重新選關(不退關、不 game over、不顯示 Try Again)。

STAGE 1
標準
場上 10 正規三角陣
機關 無
滿分 160 / 門檻 24 / 挑戰加分 +10
為玩家建立操作基準,體驗正規保齡球感受。
挑戰:3 次 Strike(結算統計)
STAGE 2
障礙物
場上 10 正規 + 障礙瓶 × 1(2026-08-03 定案)
機關 障礙瓶(球道中段 z −6.76,位置固定)
滿分 170 / 門檻 48 / 挑戰加分 +20
障礙瓶倒下 0 分、跟正規瓶一起重置,每球回到完整佈局。Strike 仍只看正規瓶。
挑戰:不擊倒障礙瓶(即時失敗)
STAGE 3
風吹
場上 10 正規三角陣
機關 風場(球道中段 z −10,作用區 3 × 3 m,橫向蓋滿整條球道)
方向 向右側風(垂直球行進方向)
滿分 180 / 門檻 68 / 挑戰加分 +30
球進風場 → 被側向推走,提高洗溝風險。玩家可用旋轉抗風或順風。
挑戰:不洗溝(即時失敗,任一球洗溝即失敗)
STAGE 4
黑洞
場上 10 正規三角陣
機關 黑洞(球道中段偏玩家側 z −8.56)
大小 吞噬半徑 0.20 m / 吸引半徑 0.375 m
滿分 190 / 門檻 88 / 挑戰加分 +40
球進黑洞影響半徑 → 被吸入 → 該球作廢 0 分。不影響球瓶。
挑戰:不要碰到黑洞(即時失敗)
STAGE 5
地雷
場上 10 正規三角陣
機關 地雷(球道中段 z −8.53,介於風場與瓶陣之間,一次性)
威力 爆炸推力 400(Impulse),爆炸半徑=球半徑
特殊瓶 炸彈瓶 × 1(擊中後立即在原位刷新)
滿分 200 / 門檻 96 / 挑戰加分 +50
球觸發地雷 → 爆炸 → 被炸瓶彈開(算倒下)。仍可 Strike,但挑戰失敗。
挑戰:不要碰到地雷(即時失敗)
🎯 機關座標參考 + v1.6 隨機位置規劃 規劃中 · 未排程

球道上視圖,玩家在下、球瓶在上。縱深為實際比例(1 格 ≈ 1 公尺),橫向放大 3.4 倍以便標示。所有座標直接讀自 Jacfitness_Art 的 JSG11/Scene/JSG11.unity(2.4 與 1.6 分支內容相同),不是估算值。

白色圓環=目前已實裝的固定位置;實心圓點=v1.6 提案的隨機候選位置。隨機規則:開局抽一次、整局固定 — 雙人是每球換人共用同一條球道,若每球重抽會造成 1P/2P 遇到的機關位置不同而不公平。

JSG11 機關隨機位置規劃 — 球道俯視四面板:障礙瓶/風場/黑洞/地雷,各標出候選位置與 2.4 現況位置
四關機關的候選位置分佈。候選數:障礙瓶 5/風場 6/黑洞 6/地雷 5。
三條物理約束(決定了為什麼不能自由亂放)
1. 可用縱深帶 z −7.0 ~ −12.0。上限 −7.0 是現況障礙瓶已驗證的可視極限,再往球瓶推玩家在出手前看不清楚;下限 −12.0 保留足夠距離,讓球被打偏後的位移能累積出來。機關的 z 位置實質上就是難度旋鈕。
2. 黑洞橫向只能左右兩檔。吸引半徑 0.375 m、球道半寬只有 0.6 m,一顆黑洞就吃掉大半條道。放中線等於必吸,所以必須偏一側、另一側固定留一條約 0.48 m 的安全通道。
3. 風場移動 x 完全無感。它的 BoxCollider 是 3 × 3 m、橫向蓋滿整條球道,所以隨機的是「縱深 + 吹向」而不是左右位置。程式用 transform.right 施力,換向只要轉 180°。
障礙瓶/地雷的 5 個候選排成 V 字(中線配近端 −7.5、±0.20 配 −9.5、±0.40 配 −11.5):越靠中線越難閃、越遠離球瓶偏移累積越多,兩個因素方向相反,這樣配對可讓 5 個候選的難度接近,不會抽到某一格特別坑。

候選座標清單

座標系同上圖:球從 z = −19 往 +z 滾、頭瓶 z = 0、x = 0 為球道中線,單位公尺。y 一律沿用現況(四個機關現在都是 y = 0),本規劃只動 x / z。
這裡只定義「座標長怎樣」,不規定「資料放哪」 — 要進 BowlingStageSetting 加欄位、另開表、還是先寫死在程式等實測定案,由 RD 決定(RD 端目前沒有機關參數表,機關係數一律寫死,見 §7)。

障礙瓶(Stage 2)/地雷(Stage 4)— 共用同一組 5 點
#xz距球瓶
10.00−7.57.50
2−0.20−9.59.50
3+0.20−9.59.50
4−0.40−11.511.50
5+0.40−11.511.50

V 字分佈。靠中線配近端、靠邊配遠端,讓 5 點難度接近。

黑洞(Stage 3)— 6 點
#xz安全通道
1−0.37−7.5右側 0.48 m
2+0.37−7.5左側 0.48 m
3−0.37−9.5右側 0.48 m
4+0.37−9.5左側 0.48 m
5−0.37−11.5右側 0.48 m
6+0.37−11.5左側 0.48 m

被吸範圍 = 吸引半徑 0.375 + 球半徑 0.11 = 0.485,球道半寬只有 0.6,所以放 x=0 兩側各只剩 0.115 m 細縫=必吸。

風場(Stage 5)— 6 種
#z 中心作用區 z吹向
1−7.5−6.0 ~ −9.0左
2−7.5−6.0 ~ −9.0右
3−9.5−8.0 ~ −11.0左
4−9.5−8.0 ~ −11.0右
5−11.5−10.0 ~ −13.0左
6−11.5−10.0 ~ −13.0右

x 固定 0。吹向換邊 = 把 WindZonePos 轉 180°(程式取 transform.right 施力)。

抽籤規則:開局抽一次、整局 10 球固定;2P 兩人用同一組、換人不重抽;連續兩局不抽到同一組。
可用縱深帶 −7.0 ~ −12.0 是針對「中心點」。風場作用區為中心 ±1.5,所以 −7.5 那檔邊界會到 −6.0、−11.5 那檔到 −13.0,兩端都超出該帶 — 這是可接受的,因為 3 × 3 m 的區域不是需要出手前辨識的小物件,可視性限制不適用。
實作陷阱:BowlingObjectCollisionMonoCompoment.Start() 會把 _initPos = transform.position 記下來當重置座標。隨機擺位若在 Start 之後才執行,障礙瓶被撞倒/地雷爆炸後會重置回舊座標,必須同步更新 _initPos。另外 ObstaclepPin 父節點帶 (0.113, 0, 0.308) 偏移,設座標要走 world 而非 local。

7雙人模式 v1.6 NEW

2026-07-27 規格與 UI layout 拍板(DEC-JSG11-047 玩法 / 048 layout),程式排在 v1.6(8/M~9/E,開發二組兔子為主,模式入口/關卡開放與藍牙連線由蝸牛負責)。兩人同機、每球輪流對打,沿用單人既有的 5 關關卡、機關與加分挑戰,不新增任何玩法系統。

2026-08-03 三項修訂(本節內文已更新,請以此為準):
① 關卡開放改跟隨單人進度 —— 原訂「雙人 5 關全開」作廢,改為只開放單人模式已解鎖的關卡(DEC-JSG11-056,翻案 047 其中一項)。
② 雙人紀錄這一版不做(暫緩,非取消)—— 資料格式等大廳統一改版的「多人資料結構整合」完成後,保齡球實際上架那一版再併入。
③ 雙人藍牙連線這一版要做得起來,但畫面不講究 —— 只求兩台手環連得上、讓 2P 遊戲本身測得動;正式版沿用 Jacfitness 公版藍牙。
④ 離開遊戲對話框不做雙人版文案 —— 雙人直接沿用單人那一句「離開時分數不會記錄/確定回到開始畫面?」,畫面與「否/是」按鈕本來就共用,這一項變成零改動。
②③ 兩項 QC 不在 v1.6(Alpha)測,改到保齡球實際上架的那一版驗收。

🔁 每球換人 · 各 5 球

1P 投一球 → 2P 投一球交替,每人 5 球(一局共 10 球,長度跟單人一關差不多)。之所以能每球換人零成本:保齡球每球都重置全瓶(已移除補球機制),換人不必保留任何瓶況、鏡頭流程也不用改。

🔓 關卡跟單人進度 · 入口不綁教學

2026-08-03 改(原訂 5 關全開):雙人可選的關卡以單人模式已經解鎖的關卡為準,還沒解鎖的一樣鎖著。卡片的鎖/亮狀態直接讀單人的解鎖存檔,雙人只讀不寫 —— 在雙人打過關不會推進單人進度、不計過關門檻、也不出現「New Stage」字卡;右上「關卡解鎖條件」紙條在雙人隱藏。
入口那顆「雙人模式」鈕仍然常態解鎖、不要求先完成教學關卡(單人的教學鎖不變)—— 雙人多半是老手帶新手,強制教學會卡住社交入口。
為什麼不全開:全開等於雙人要多一套「一律解鎖」的判定;而且 3~5 關的機關(風/黑洞/地雷)本來就預設玩家練過前幾關,兩個新手第一次進來就撞地雷關反而更糟。兩人共用同一台手機,解鎖進度只有一份,不存在「聽誰的」問題。

🏅 加分挑戰照舊

兩人打同一關即同一項挑戰,各自獨立判定成敗,+N 分計入各自總分。HUD 右側挑戰面板隨回合切換顯示當前玩家那一份(文案前面加 1P/2P)。

📉 分數量級跟單人不同

每人只投 5 球 → 理論最高 5×15 = 75,加挑戰 +10 → 上限 85 分(單人 10 球是 160)。2P 的分數永遠是 2 位數,RD 抓欄寬、QC 抓邊界時要用這個數字。

畫面

雙人戰鬥 HUD

戰鬥 HUD — 上下堆疊雙列記分板

左上改成 1P/2P 兩列(各 670×125)。當前回合那一列全彩、等待中那一列整列淡化 50%,這是沿用全站「非焦點區塊淡化」的既有規約,不是新發明的視覺語言。右上球數改成輪次 3/5。之所以不做左右分置:右上球數+暫停、右側挑戰面板都已佔住位置,硬要左右對稱還得做真鏡射,划不來。

換人提示 Your Turn 特效字卡

換人提示 — Your Turn 特效字卡,不佔玩家時間

2026-08-10 改版:原本規劃的橘色橫幅取消,改用全螢幕 Your Turn 特效字卡(上圖為實機畫面)。大字與光帶直接沿用冰壺現成的素材與動態,美術不用另外做,1P 跟 2P 用同一張。

每球換人 = 一局要提示 10 次,之所以敢用全螢幕字卡而不怕拖節奏:字卡出現在黑畫面過場結束、控制權真的交出的當下,只停 0.6 秒且全程不封鎖輸入 — 想立刻轉手腕就轉,字卡自己淡掉,淨增等待 0 秒。(原本否決全螢幕字卡的「一局多等 20 秒」,是按其他遊戲那種停 1.5 秒又鎖住操作的做法算的。)

因為 1P/2P 共用同一張「Your Turn」,辨識是誰的回合靠下面那行小字:PLAYER 1 · BALL 3 OF 5,順便告訴玩家打到自己的第幾球。這行字只做英文,中英文語系顯示同一句。不放暱稱。

2026-08-21 依實機更新這行小字的樣式:字級放大到 80px(原訂 56px 是從「New Stage」副標搬來的數字,那張字卡底下有面板襯著;換人字卡沒有底版,白字直接壓在亮球道上,56px 實機看太小),可讀性補強由單向陰影改成黑色八方向描邊(陰影只擋得住字的下方,球道左右一樣亮,字的上緣和側邊還是會糊)。字型定案 GenSenRounded-B(源泉圓體)。字放大後版位跟著重算成 (480, 722) 起、960×130 —— 左邊離左下的出手回饋面板只剩 20px,這行字已經沒有變長的空間,之後要加暱稱或改長句得先解決版位。文字內容與多國語系設定完全不動。

雙人結算

結算 — 1P vs 2P 雙欄對比

四列(Strike 得分/Open 得分/加分挑戰/總分)雙欄並排,勝方整欄黃色高亮+上方金字 1P WIN!/2P WIN!/DRAW。總分列不顯示過關門檻(雙人沒有門檻概念),也不出 HighScore 徽章(雙人成績不進單人排行)。底部四鈕走平台公版雙人版,第三顆是「選擇其他關卡」而非「下一關」。

雙人紀錄

紀錄 — 雙人分頁 v1.6 不做

2026-08-03 暫緩(非取消):這一版先不串。紀錄的資料格式要等大廳統一改版的「多人資料結構整合」完成,格式相符的話,保齡球實際上架那一版併入時直接套用,不必先做一份會被丟掉的。QC 這一版不測,改到上架那一版驗收。
下圖為已完成的 layout(規格不變、留待實作):走平台公版雙人紀錄母版,欄位日期/1P 分數/2P 分數/勝方,顯示 50 筆;勝方欄 1P 藍/2P 粉/平手灰。雙人成績只寫進這裡,不寫入單人排行與個人最高分(此原則不變)。

省下來的工

雙人不新增畫面、不新增流程層級:2P 連線走平台層共用連線頁(在載入保齡球之前就完成;2026-08-03 補充 —— v1.6 為了能測 2P 遊戲本身的功能,連線還是要做得起來,但畫面不用照任何設計稿,正式版沿用 Jacfitness 公版藍牙,QC 這一版不測)、關卡選擇沿用單人同一個畫面與解鎖狀態、結算鈕列走公版雙人版、戰鬥字卡全部沿用不重畫(紀錄分頁這一版不做,見上)。JSG11 端真正要客製的只有戰鬥 HUD 三態與結算兩塊,加上 4 個新元件。對應功能確認表 BW-197~213 共 17 項。

8旋轉球路系統(全局)

全部 5 關每一球都套用,投擲瞬間由玩家手腕動作決定旋轉量、出手後軌跡依物理彎曲不可再調整 — 非隨機抽選、無 UI 提示。

機制

  • Input:投擲瞬間手環偵測角加速度(玩家手腕扭動方向與強度)
  • 映射:角加速度值 → 球體 transform.forward 軸的 angularVelocity
  • 表現:Unity 物理引擎依此產生軌跡彎曲(連續量、無離散等級)
  • 自然狀態:不扭手腕 → 角加速度近零 → 球直走
  • 直球門檻:旋轉量要高於閥值才算曲球,低於就當直球(旋轉量送 0)

設計意圖

  • 旋轉完全由玩家技術決定,不再用「隨機抽 5 種」
  • 重玩價值來自操控精進(練熟後能曲球避機關)
  • 與機關產生策略張力(曲球繞過障礙 vs 被動接受結果)

Owner:Andros

直球 / 曲球判定閥值(2.4 演算法實作值,2026-08-05 回填)

「連續映射」不代表沒有門檻。演算法判定式為 Math.Abs(curvePower) < 閥值 → 直球,超過才依左旋 / 右旋特徵送出正負旋轉量。

項目值說明
直球 / 曲球判定閥值0.05 → 0.2(已調整)0.05 太低,玩家幾乎扭一下就被判成曲球,丟不出直球
內建死區(未變動)線性比例 < 0.1 → 回傳 0換算 GyroX 擺幅 < 290,000 一律無旋轉
映射曲線clamp01((rangeRX − 200000) / 900000) ^ 1.55冪函數(非線性),指數越大前半段越平緩
旋轉量輸入rangeRX = |GyroXMax − GyroXMin|單次投擲取樣區間的 GyroX 擺幅

反推兩個閥值對應的擺幅門檻:0.05 ≈ 330,000 → 0.2 ≈ 519,000,直球區放寬約 1.57 倍。死區 290,000 換算成 curvePower 只有約 0.032,所以舊閥值 0.05 幾乎沒有額外把關作用 —— 調到 0.2 才形成一段玩家感受得到的直球帶。決策見 DEC-JSG11-058,確認表對應 BW-009(映射曲線)/BW-010(不靈敏區)。
📌 推版狀態(2026-08-05):Alan 本機已改好 0.2,尚未 commit,故查 origin/2.4、origin/JSG11_Bowling 仍為 < 0.05。0.2 為正式規格值;QC 若在 commit 前拿到的 build 仍是曲球太容易觸發的舊行為,屬預期落差,不必開單。

旋轉視覺映射(連續 + 透明度線性,Trail 藍/橘二元)

轉速狀態球體視覺(旋轉 + 透明度)球路 Trail(顏色)
不扭手腕(角加速度近零)幾乎不旋轉、球直走;準備階段 Trail 全隱藏藍色一般 Trail(轉速 < 100% 均為藍;長度依移動速度,低於閾值消失)
轉速 < 100%(一般)球體旋轉(依轉速連續),無透明度變化(藍色球僅有 Trail)藍色一般 Trail(長度依移動速度)
轉速 = 100%(滿轉 / 螺旋丸)高速旋轉;滾動中轉速衰減 → 透明度依轉速線性遞減(僅橘色球適用)橘色螺旋丸 Trail

顏色為藍 / 橘二元(非級距);軌跡彎曲、Trail 長度為連續量;球體透明度衰減僅橘色螺旋丸球適用(2026-07-13 確認,藍色球僅有 Trail)。Trail 消失條件 = 移動速度低於閾值(與轉速無關)。對應確認表 BW-108~109(旋轉視覺)、BW-121(Trail v2.0,DEC-JSG11-020)。

9團隊分工

角色負責範圍Sheet Row
Andros投擲演算法(手腕 input → 站位 / 力道 / 角加速度映射)118
兔子投擲功能製作 + 戰鬥 UI(HUD / 結算 / 暫停)+ 部分機關119 / 135
Jason計分 / 挑戰追蹤 / Stage 1 2 4 5 / Lobby UI(大廳 / 關卡選擇 / 教學)120 / 134
亞哈UI 美術視覺(HUD / 結算 / 卡片 / 字卡 / 按鈕配色)— HUD + 字卡 5/18~5/29(r133/r137)+ Lobby/結算/教學 5/25~6/12(r138)133 / 137 / 138
飯茄場景(環型/弧型主視覺)+ 大廳背景(場景的相機角度)+ Loading 圖(場景截圖)128
品杰球、球瓶、機關模型(一般球 / 正規瓶 / 障礙瓶 / 風場 / 黑洞 / 地雷)129 / 130
綠豆VFX(特效)— 5/25 起:機關環境 5/25~5/29(r131)+ 機關事件 6/1~6/12(r132)+ 字卡動態 6/1~6/12(r134)+ 球旋轉/軌跡 5/30~6/26(r135~136)131 / 132 / 134 / 135 / 136
鏡SFX(音效)6/15 起(不等 VFX 全完)+ 遊戲 BGM 6/29~7/10(Alpha 用冰壺 BGM 佔位、正式版待 v2.5;大廳 BGM 已取消)132
小曹(TM)規格 / 排程 / CP 驗收 + Figma 素材交付(5/18~5/22)+ Demo 5/15 後在 Figma 標球道/球瓶尺寸115 / 137

10時程

關鍵節點

日期事件負責
5/15 (五)CP0 規格定錨會議(昨天沒開)三方對齊(TM / 美術 / UI)
5/15 (五)Andros 演算法 v1 交付(單點關鍵路徑)Andros
5/15 (五)Demo 完成(球道/球瓶尺寸今天定案)RD + TM
5/18兔子實裝(接 Andros v1,先用 TM Figma 素材拼裝)兔子
5/18 ~ 5/22TM Figma 素材整理(layout + 元素 + W×H 尺寸 box,row 115)⭐ NEW小曹
5/22 (五)TM 完整交付 Figma 素材給 RD(兔子 / Jason 取座標 / 尺寸 box 拼裝)⭐ NEW小曹
5/22 ~ 6/5美術階段 2 球瓶/球道美術組
5/18 ~ 5/29亞哈 UI 視覺 — HUD + 字卡(r133/r137,戰鬥優先)亞哈
5/25 ~ 5/29綠豆 VFX 機關環境(r131,風場 / 黑洞 常駐)綠豆
5/25 ~ 6/12亞哈 UI 視覺 — Lobby / 結算 / 教學(r138)亞哈
5/30 ~ 6/26綠豆 球路特效(r135~136,球旋轉視覺 + 軌跡光帶)綠豆
5/31美術階段 1 場景背景白稿完成美術組
6/1 ~ 6/12綠豆 字卡動態特效(r134,Strike 字卡入退場 + 粒子)— 接亞哈字卡設計稿後啟動綠豆
6/1 ~ 6/12綠豆 VFX 機關事件(r132,障礙瓶警示 / 地雷 LED / 地雷爆炸)綠豆
6/5 ~ 6/19美術階段 3 障礙物(視覺先做、大小後期調)美術組
6/12 後Jason / 兔子換亞哈視覺皮(替換 TM 素材佔位)Jason / 兔子
6/15 起鏡 SFX 開工(投擲/撞瓶/Strike/結算先做,不等 VFX 全完)鏡
6/19 ~ 6/26綠豆 VFX 機關(風/黑洞/地雷,接美術階段 3)綠豆
6/29 ~ 7/10鏡 遊戲 BGM 完成(Alpha 範圍) — 只測 BGM 可否播放,先用冰壺 BGM 佔位;正式版待 v2.5;大廳 BGM 已取消鏡
6 月底素材實裝完成Jason / 兔子
7/7CP 一次驗收(5 關 + 旋轉 + 三機關 + UI + VFX + SFX + BGM)— 多 1 週緩衝給音效小曹
7/B ~ 7/MAlpha(含外整)QC

🎨 美術交付

場景 · 球瓶 · VFX · SFX · BGM
場景 環型 / 弧型主視覺(單一牆面、不轉場)
球瓶 美術組製作
動畫 全物理路線(美術不做動畫)
角色 無角色形象

1風格框架 美術

給美術組的初始 brief — 場景風格以美術組提供之 ref 為主。

🎯 整體調性

  • 圓潤造型、誇張比例
  • 與 JSG 系列其他遊戲(冰壺 / 高爾夫)調性一致
  • 偏向復古暖色保齡球館(不要太硬派、不要賽博龐克)
  • 單一牆面主視覺、不做轉場

📐 場景原則

  • 環型 / 弧型主視覺(5/10 美術會決議)
  • 不超過單一牆面、鏡頭無破綻
  • 不需動態鏡頭切換場景
  • 球道與主視覺可分離製作(球道長度依 Andros v1 實測再定)

🎭 角色 / 動畫

  • 無角色
  • 無投擲動畫(全物理路線)
  • 球 / 瓶 / 機關互動全交給 Unity 物理引擎
  • 美術唯一交付:模型 + 材質 + 物理參數(mass / collider / 摩擦 / restitution)

🎬 視覺重點

  • 球體旋轉視覺連續變化(旋轉量大 = 尾跡明顯)
  • 正規瓶 vs 障礙瓶視覺要明顯區分
  • 機關影響範圍可視化(風線 / 旋渦 / 警示燈)
  • Strike 字卡視覺強烈(+5 加乘要爽)
🎨 美術提供的場景參考板(Miro)
美術組於 5/14 提供場景 ref:https://miro.com/app/board/uXjVHUlh-wo=/
後續新增 ref 由美術組直接傳給 TM(不需上傳到本 repo)。

2美術交付清單 美術

依甘特圖 row 126~131 三階段拆分。請美術組依時程交付,TM 會在每階段結束做匯流檢查。

場景三階段(row 127~129)

階段 1 場景 / 背景 / 大廳 / Loading初稿 ✅ 5/21 入庫 → 迭代到 8/M(v2.5)
• 環型 / 弧型主視覺白稿 × 1
• 大廳背景(場景的相機角度,不另做)
• Loading 圖(場景截圖)
• 2026-05-21 初稿 3 張已交付(構圖+色相 OK,見 §3 預覽)
• 持續迭代到 8/M(v2.5),細化材質 / 燈光 / 反射
負責:飯茄 ✅
階段 2 球瓶 / 球道2026-05-21 提前啟動(原 5/31~6/15)
• 球道模型(支援彎曲軌跡渲染)
• 正規瓶模型(白底紅頸)+ 障礙瓶
• 一般球模型 + 旋轉視覺
• 依 Andros v1(5/15)+ Demo 實測尺寸定案
• 不等場景細化即可起跑
負責:品杰 ✅
階段 3 障礙物 / 機關2026-05-21 提前啟動(原 6/15~7/4)
• 障礙瓶(視覺明顯區分正規瓶)
• 風場(風線 + 風向 + 範圍可視化)
• 黑洞(旋渦 + 邊緣扭曲)
• 地雷(外殼 + 警示燈)
• 機關模型完成後 → 機關 VFX → SFX
負責:品杰 ✅

UI / VFX / SFX / BGM 介入時程(2026-05-22 v2.5 美術 4 列日期校正)

UI — HUD + 字卡5/18 ~ 5/29
• 戰鬥 HUD 視覺 + 字卡集合
• 不卡場景細化,5/29 前先收
• 接 TM wireframe 後啟動
• Lobby / 結算 / 教學另接 5/25~6/12(r138)
負責:亞哈 ✅
VFX 特效5/25 起跑(v2.5 校正)
• VFX 優先順序(v2.5):
  5/29 前 BW-129 黑洞旋渦(機關環境 r131)
  6/1~6/12 BW-124 Strike 字卡(動態,r134)
  + BW-133 地雷爆炸(機關事件 r132)
  → BW-134 挑戰達成 +10
• 原 BW-116 Open 字卡(2026-05-22 刪除)
• 場景元素上 git 後即可開工
• BW-120 投擲箭頭已移出 VFX(→ UI+RD)
負責:綠豆 ✅
SFX 音效機關 VFX 完成後接
• 15 項 SFX(BW-135 ~ BW-149)
• 機關 VFX 完成後啟動
• 撞瓶聲合 1(不分大 / 小力)
負責:鏡 ✅
BGMAlpha 6/29~7/10(只測播放)/ 正式版待 v2.5
• Alpha 範圍(6/29~7/10):只測 BGM 是否可以播放(播放 / 迴圈 / 切歌),先用冰壺 BGM 作為測試佔位
• 遊戲 BGM × 1(5 關共用,正式版待 v2.5)
• 大廳 BGM(v2.6 取消,2026-07-02:大廳不需要 BGM)
• 風格方向 TM 與鏡 v2.5 場景定案後對齊
• 正式版交付:待 v2.5 再做,避免場景未定就提前白工
負責:鏡 ✅

3場景規格 美術

✅ 場景完成(飯茄 · 2026-06-29 更新)

三張 1920×1080 — 構圖、色相、燈光、材質、細節擺設完成。已入庫 Git · 同步 Google Drive · Figma layout 已更新。

大廳場景
大廳 · 關卡選擇背景(環/弧型 + JACFIT 招牌 + 排排球道)
遊戲畫面
遊戲畫面 · 玩家視角(球道 + 球體 + 瓶區概念)
Loading 圖
Loading 圖 · 場景截圖風格一致

📁 原始檔:output/JSG11-bowling/art-references/scenes/ · 對應 BW-102(階段 1 主視覺)

場景結構分層
主視覺背景
環 / 弧型
→
球道
支援彎曲渲染
→
瓶區
10 正規 ± 障礙
→
機關層
風 / 黑洞 / 地雷

場景原則(5/10 美術會決議)

  • 環型 / 弧型主視覺
  • 不超過單一牆面
  • 不做轉場
  • 主視覺確定後維持一致
  • 鏡頭無破綻、無需動態切換

球道需求

  • 直線球道為基底
  • 需支援由 forward 軸 angularVelocity 產生的彎曲軌跡渲染
  • 玩家手腕扭動量 → 軌跡彎曲程度(連續)
  • 溝槽(gutter)視覺需明確
  • 空氣牆(BW-104,2026-05-28 補) — 球道兩側溝外緣加不可見 collider,防球意外飛出場景(高度涵蓋彈起最大值)

攝影機追球(BW-021/022/179)

  • 球出手 → 投擲視角不動(v1.3,BW-021)
  • 球過 起始線 → `_traceCamera` 開始跟球(BW-022)
  • 球過停止線(2026-05-28 補,BW-024)→ 鏡頭停留,球繼續滾入結算判定
  • 倒瓶結束 → 字卡序列(見 §5)→ 黑畫面 fade 拉回投擲視角(僅非最後一球)

4球瓶 / 球規格 美術

🎳 球瓶 + 球正式素材(品杰 · 2026-06-08 入庫)

品杰交付 3D 渲染素材:正規瓶(白底紅環)/ 障礙瓶(黃黑斜紋 · Stage 2) / 地雷彈飛瓶(黑底紅環 · Stage 4) / 一般球(紅橘大理石紋)— 造型 / 材質方向 OK,可繼續迭代反射 / 其餘球皮。

正規瓶 — 白底紅環
正規瓶(白底紅環)
障礙瓶 — 黃黑斜紋 · Stage 2
障礙瓶(黃黑斜紋 · Stage 2)
地雷彈飛瓶 — 黑底紅環 · Stage 4
地雷彈飛瓶(黑底紅環 · Stage 4)
一般球 — 紅橘大理石紋
一般球(紅橘大理石紋)

📁 原始檔:art-references/BW_Pin_Regular.jpg · BW_Pin_Obstacle.jpg · BW_Pin_Mine.jpg · BW_Ball_Default.jpg · 對應下方規格表

類型視覺特徵適用物理
正規瓶 標準保齡球瓶、白底紅頸、可辨識 5 關通用 標準 mass + collider
障礙瓶
(Stage 2)
黃黑斜紋
與正規瓶明顯區分
Stage 2 倒下後跟正規瓶一起重置,每球復位回完整佈局
地雷彈飛瓶
(Stage 4)
黑色
與正規瓶明顯區分
Stage 5 被爆炸彈飛 獨立飛行軌跡 + 落地物理(AddExplosionForce)
一般球 標準保齡球(無強化球) 5 關通用 Rigidbody + 旋轉視覺(連續變化尾跡)

5VFX 特效綠豆

字卡分工:文字(字型 / 排版)= 亞哈,動態(入退場 / 動畫 / 粒子)= 綠豆,觸發時機(容器切狀態)= 兔子。

📇 戰鬥字卡(戰鬥字卡集合 · 8 型,v0.12 改名)

狀態提示字卡承載 6 種狀態(準備 / 完成 / 全倒 / 新關卡 / 洗溝 / 吸入),挑戰完成字卡與 High Score 字卡(2026-05-28 新增)為獨立結算特效。以下 7 張實機截圖 2026-07-09 已重截,套用戰鬥 HUD 放大(DEC-JSG11-040/041)與結算畫面微調(DEC-JSG11-038)後的最新畫面。

Ready 字卡 — 準備開始
準備字卡
BW-116 · ⭐⭐⭐
⏱ 進關後直接出現
關卡選擇 → 載入 → 準備(無倒數 3·2·1)
深色卡片 + 「READY」單字置中
Finish 字卡 — 結束
完成字卡
BW-117 · ⭐⭐⭐
⏱ 第 10 球結束 → 球停下 → Finish 字卡 → 直接切結算(無黑畫面 fade,沿用 Lobby Modal 動畫)
取代過關「PASS」音 / 光效
深色卡片 + 「FINISH」置中
New Stage 字卡 — 新關卡
新關卡字卡
BW-118 · ⭐⭐⭐
⏱ 結算頁 → HighScore(破紀錄才出)→ New Stage(解鎖才出,在 HighScore 之後)
主標「New Stage」/ 副標「第 {0} 關 — {1} 解鎖」(多國 ID 57011,例:「第 5 關 — 風吹 解鎖」/ en「Stage 5 — Wind Unlocked」)
橘色橫條 + 白字 + 上下白色裝飾線;現況實機截圖僅有「New Stage」大字、無副標 — 排版位置已在 Figma WordCard_NewStage(17102:2)補上參考文字層,供 RD 對位:副標 Txt_NewStage_Subtitle(白字 56px,置中,x=510 y=782 w=900 h=70/frame 1920×1080,位於總分列金色分隔線下方)+ RD 註記層 Note_NewStage_Subtitle_ForRD(橘字 24px,x=260 y=862 w=1400 h=40,標明多國 ID 57011,2026-07-03 使用者手動調整過座標)
Strike 字卡 — 全倒
全倒字卡
BW-124 · ⭐⭐⭐
⏱ 1 球倒完正規瓶(球停止判定瞬間)
深棕底金字 + 副標「+15(10+5)」
Gutter 字卡 — 洗溝
洗溝字卡
BW-127 · ⭐⭐
⏱ 關卡 3 球進溝瞬間
觸發即時挑戰失敗(剩餘球不再判定)
紅色警示閃光 + 「GUTTER!」字
Sucked 字卡 — 吸入
吸入字卡
BW-131 · ⭐⭐
⏱ 關卡 4 球被吸入黑洞瞬間
觸發即時挑戰失敗(該球 0 分)
紫色警示 + 球被吸入扭曲
Challenge Clear 字卡 — 挑戰完成
挑戰完成字卡
BW-134 · ⭐
⏱ 挑戰任務完成判定
關卡 1(結算統計達 3 次全倒)/ 關卡 2~5(10 球結束未觸發失敗條件)
金色徽章彈出 + 副標「+10」
結算畫面 Layout — HighScore 字卡出現位置
High Score 字卡
BW-119 · ⭐⭐⭐ 2026-05-28 新增
⏱ 結算頁切入後,若該關打破玩家歷史最高分
序列:Finish → 結算頁 → HighScore → NewStage
金字 + 徽章 + 「+X」差值提示

🎱 球與球路 VFX

球旋轉視覺 — 兩種 spin 對照
球旋轉視覺 + 透明度(v2.0)
BW-108~109 · ⭐⭐⭐
⏱ 球出手後到球停止
球體旋轉動畫 + 透明度依轉速線性(100% → 不透明,越慢越透明 → 消失)
球路 Trail — 藍 / 橘螺旋丸二元 + 長度依移動速度
球路 Trail v2.0(藍/橘二元)
BW-121 · ⭐⭐⭐ · DEC-JSG11-020
⏱ OnPush → 球停;準備階段全隱藏
顏色:轉速 < 100% 藍一般 / = 100% 橘螺旋丸
長度:移動速度線性(低於閾值消失)

🌀 機關環境 VFX(非字卡)

障礙瓶倒下警示 — 撞擊障礙瓶觸發紅三角警告
障礙瓶倒下警示
BW-125 · ⭐⭐
⏱ Stage 2 擊倒障礙瓶瞬間
觸發即時挑戰失敗
紅色閃光(HUD 變灰已足夠,不需字卡)
風場 VFX — Stage 5 球道風場環境
風場 VFX
BW-126 · ⭐⭐
⏱ Stage 5 球進入風場區域時
風場本身可常駐顯示
風線 + 風向指示 + 範圍可視化 + 球被吹偏軌跡修正
黑洞 VFX 環境 — Stage 3 球道黑洞常駐
黑洞 VFX(環境)
BW-129~130 · ⭐⭐
⏱ Stage 3 黑洞常駐 + 球被吸入時扭曲
字卡 SUCKED! 另外觸發(見上)
旋渦動畫 + 邊緣扭曲 + 半徑可視化
地雷 VFX — Stage 4 地雷引爆爆炸效果
地雷 VFX
BW-132~133 · ⭐⭐
⏱ Stage 4 地雷常駐閃爍 + 引爆瞬間爆炸
警示燈閃爍 + 爆炸特效(2026-05-15 已砍瓶子被彈飛尾跡)

6SFX 音效(15 項)鏡

優先音效觸發時機備註
⭐⭐⭐Ready / Finish 提示音關卡開始 / 結束Finish 兼任過關收尾音
⭐⭐⭐New Stage 進場字卡音BW-118 字卡彈出也作為解鎖下一關回饋音
⭐⭐⭐球出手音釋放瞬間—
⭐⭐⭐球滾動音球在球道上—
⭐⭐⭐撞瓶聲(單一音檔)球撞擊球瓶不分大 / 小力
⭐⭐⭐球瓶倒下音瓶倒地—
⭐⭐⭐Strike 音效(單一音檔)1 球倒完歡呼 + 提示音合 1
⭐⭐倒入溝 gutter 音球出界(Stage 5 挑戰失敗)失敗反饋
⭐⭐障礙瓶倒下警示音Stage 2 擊倒障礙瓶與正規瓶倒下要不同
⭐⭐風場 — 風吹聲Stage 5 球進風場風吹聲已足夠,球偏移聲 v0.11.1 已砍
⭐⭐黑洞 — 吸力聲Stage 3 球被吸入—
⭐⭐黑洞 — 吸入音效——
⭐⭐地雷 — 引爆聲Stage 4 觸發地雷不做瓶子彈飛聲
⭐挑戰達成 +10 音挑戰任務完成金幣 / 成就音

7BGM 鏡

🎵 遊戲 BGM(5 關共用)

5 關共用一個遊戲 BGM(不分機關關卡)。

大廳 BGM — v2.6 取消(2026-07-02):大廳不需要 BGM。

📌 BGM 走向待決
風格方向(保齡球館氛圍 / 流行 / 8-bit)由 TM + 鏡在 6 月場景定案後對齊。

🖼️ UI 規格

15 個畫面 · 元件庫 · 命名對照 · Figma 設計稿 · 流程
v0.12 更新 元件庫獨立成一區 + 戰鬥畫面拆 3 個狀態 + 教學頁拆 3 頁 + 藍牙拆「搜尋中/已連線」2 個畫面
視覺 亞哈(row 133/137,HUD+字卡 5/18~5/29 / row 138 Lobby 5/25~6/12)
大廳程式 Jason(row 134,5/18 起先用 TM 素材拼裝)
戰鬥程式 兔子(row 135,5/18 起先用 TM 素材拼裝)
Figma 解析度 1920×1080 橫向(每個元素的寬×高尺寸由 TM 5/22 交付)

1Figma 設計稿 亞哈

亞哈設計稿主頁面。版面草圖 v0.12 已落地(15 個畫面 + 獨立元件庫),亞哈 HUD+字卡 5/18~5/29(r133/r137)+ Lobby/結算/教學 5/25~6/12(r138)接視覺設計。TM 5/22 完整交付 Figma 素材給程式(每個元素的寬×高尺寸)。

JSG11 保齡球(主設計頁)
檔案編號:Kra16tMbARMXT2mp5QVPDc · 頁面節點編號:15099:3041
✅ 版面草圖 v0.12 已落地(15 個畫面 + 元件庫獨立)— 亞哈 5/18 接視覺設計(HUD+字卡優先)
開啟 Figma →

📐 畫面規格(v0.12)

  • 解析度:1920×1080 橫向(保齡球場景偏寬橫向)
  • 15 個畫面(戰鬥畫面 × 3 + 字卡截圖 × 1 + 教學頁 × 3 + 藍牙畫面 × 2 + 其餘 6)
  • 畫面名稱改用短名(大廳 / 戰鬥畫面 / 關卡選擇 / 結算 / 離開遊戲 ...),不再用長前綴
  • 藍牙拆 2 個獨立畫面(搜尋中 + 已連線)
  • 獨立元件庫區塊(節點編號 15461:237)
  • 頁面名稱:JSG11_保齡球

🔗 其他資源

📌 v0.12 重點變更(2026-05-18 反向同步)
① 元件庫獨立成一區(節點編號 15461:237)— 30 個元件改一次全畫面同步
② 戰鬥畫面拆 3 個狀態:基本(節點 15245:25)/ 選位置(節點 15522:738,兩個青色三角箭頭)/ 瞄準(節點 15522:858,大青色直立箭頭)— 對應投擲流程「①旋手腕選位 → ②看時機推出」兩段操作
③ 教學頁拆 3 頁:選擇位置 / 丟出保齡球 / 曲球控制(與冰壺「先選位、再推出」分鏡一致)
④ 藍牙拆 2 個獨立畫面:搜尋中(未連線)+ 已連線(手環圖示依裝置型號切換:Jmate1 / Jmate2 / Jmotion)
⑤ 畫面改名:主選單 → 大廳、關卡選擇(舊長名)→ 關卡選擇(短名)、戰鬥暫停 → 離開遊戲
⑥ 離開遊戲文案改:「是否回到大廳?」→「離開時分數不會記錄/確定回到開始畫面?」+ 否(紅)/ 是(綠)
⑦ 新增 8 個元件:載入畫面 / 機關徽章(5 型)/ 選位置箭頭 / 瞄準箭頭 / 分數區塊 / 玩家名稱 / 解鎖分數紙條 / 橘金色確認按鈕
⑧ 主選單半透明蒙版全彈窗套用:模式選擇 / 關卡選擇 / 結算 / 藍牙 × 2 / 教學 × 3 / 離開遊戲,全部彈窗畫面都加半透明黑色背景。
📌 v0.11 變更(2026-05-14,作為 v0.12 基底)
① 藍牙雙狀態畫面(v0.12 已改為拆 2 個獨立畫面)
② 排行榜 → 紀錄改名
③ 模式選擇補雙人模式 鎖定按鈕(畫面 v1.0 上線、程式功能 v1.x 才實裝)
④ 關卡選擇右上「關卡解鎖條件:N 分」標籤(門檻依關卡遞增:24 / 48 / 68 / 88 / 96)
設計稿節點編號同步回 references/figma-map.md。

1.1元件庫 亞哈Jason/兔子

v0.12 新增:所有按鈕 / 卡片 / 戰鬥畫面元素 / 徽章 / 對話框 / 教學 / 結算 / 紀錄 / 藍牙都改為「主元件 + 複製品」做法,畫面內全部用複製品拼裝。主元件改視覺一次 → 全畫面複製品自動同步(亞哈 6/1 接視覺只需改主元件)。程式拼裝依複製品節點編號取座標、命名繼承主元件結構。

📌 元件使用約定(v0.12 拍板)
① 畫面內禁止直接畫原生方框 / 文字 取代元件複製品(除畫面標題、註解外)
② 主元件改視覺 → 全畫面複製品自動同步
③ 元件庫節點編號:15461:237,完整節點對照見 references/figma-map.md

元件清單(30 個,⭐ NEW 8 個)

類別元件名稱節點編號樣式變化用途
按鈕圖示按鈕15461:1678 種:返回 / 暫停 / 上一頁 / 下一頁 / 回首頁 / 問號 / 略過 / 關閉通用「只有圖示」按鈕。暫停 icon 在戰鬥 HUD instance 137×81 → v0.28 起放大 1.54 倍 → 211×125(DEC-JSG11-040/041,master 尺寸不變,純 instance override)。v0.34(2026-07-24):5 個互動教學關卡 frame 的暫停 instance 依 v2.4 全平台規約「教學內暫停改略過」移除,原地改放略過鈕(底版沿用冰壺 Black_btn 黑底+略過白字,403×92,右緣對齊原暫停鈕位置);正式關卡的暫停鈕不變
通用按鈕15470:914 種:是(綠)/ 否(紅)/ 關閉(米)/ 確認(橘金 320×90)⭐ NEW離開遊戲 / 結算 / 關卡選擇 / 藍牙 主要動作按鈕
大廳按鈕15461:1323 種:教學 / 紀錄 / 回首頁大廳右下膠囊按鈕
模式按鈕15461:1082 種:鎖定 / 解鎖模式選擇三個按鈕
裝置按鈕15461:1762 種:一般 / 選中藍牙裝置列表
分頁按鈕15477:2602 種:目前頁 / 其他頁紀錄頁 1P / 2P 分頁切換
卡片關卡卡片15461:361 variant:純底卡關卡選擇 5 張卡片。v0.15.8(2026-05-22):master 縮為唯一純白底卡(StageId/StageName placeholder 文字 hidden)。Current variant 已刪除(「當前可玩」被動標記從 BW-061 一併移除)、Locked variant 已刪除(v0.15.1)。所有狀態組合在關卡選擇 frame 內疊:已過關 = 純底卡(2026-07-07 起不再疊金星,見 DEC-JSG11-035)/ 鎖定 = 底卡 + 黑 50% dim + Badge/Lock / 玩家當前選中 = 底卡 + Frame/CardSelection cyan 框。2026-06-05:卡片上的機關 icon 已移除(Badge/Mechanism component 整組刪除),機關呈現改走遊戲內 3D 模型 / VFX,UI 卡片不再疊機關 icon
戰鬥字卡15461:95—已刪除 — 改用實機字卡截圖 17103:2
狀態提示字卡(共用容器)15461:94—已刪除 — 共用容器隨 BattleHUD 一併移除
徽章機關徽章 ⭐ NEW15529:3075 種:無機關 / 障礙瓶 / 風 / 黑洞 / 地雷關卡卡片上的機關圖示
挑戰達成徽章15461:181—關卡過關金星 — 2026-07-07 移除(DEC-JSG11-035,玩法測試回饋易誤認為難易度標示)
鎖頭徽章15461:187—模式選擇 / 關卡選擇 鎖頭
戰鬥畫面分數區塊 ⭐ NEW15587:2—左上「分數:{現在分數} / {過關門檻}」單行顯示。v0.31 起移除關卡編號(DEC-JSG11-044)。instance 尺寸 435×81 → v0.28 起放大 1.54 倍 → 670×125(DEC-JSG11-040/041,戰鬥 HUD 3 態 + 結算/離開遊戲背景 HUD 皆套用)
挑戰任務面板15461:219—右側挑戰任務面板,文案「加分挑戰:XXX(+N 分)」(v0.26 起尾巴補加分數,DEC-JSG11-039)。instance 尺寸 304×79、文字 28px → v0.28 起放大 1.54 倍 → 468×122、文字 43px(DEC-JSG11-040/041)
球數區塊15461:191—右上球數 3/10。instance 尺寸 215×61 → v0.28 起放大 1.54 倍 → 331×94(DEC-JSG11-040/041)
選位置箭頭 ⭐ NEW15522:849—選位置青色三角箭頭(181×180)
瞄準箭頭 ⭐ NEW15522:892—瞄準大黑色直線箭頭(108×396)
玩家名稱 ⭐ NEW15470:752 種位置:左(1P)/ 右(2P)雙人模式戰鬥畫面玩家名稱(v1.x 啟用)
出手回饋面板 ⭐ v1.6 NEW18752:2 / 18752:3 / 18752:4—左下顯示「上一球」的力道與旋轉(420×244,起點 40,786)。左側力道圓環(外徑 132、環寬 18、黃色由 12 點鐘順時針)+環心百分比數字 38px;右側旋轉橫條(196×26,中間有零點刻度,橘色由中心往左=左旋/往右=右旋,左右同色不分色)+方向文字「左旋/右旋/直球」。1P/2P/教學共用同一顆、同一個座標(DEC-JSG11-049,2026-07-28)。2026-07-29 拆成 3 個素材:底版 ThrowFeedback_bg(420×244,含兩條軌道,不含填色)+ PowerRing_fill(132×132 完整黃環)+ SpinBar_fill(98×26 半邊橘條),會動的兩條填色各自獨立給程式驅動;原本合在一起的那顆元件已刪除。2026-08-17 結案:這張就是正式素材(DEC-JSG11-061)—— 原本掛「待美術換皮」,但盤點後 JSG11 與 JSG09 冰壺都沒有可沿用的現成件(冰壺的力道框是圓形 206×205,套不進矩形面板),而現有這張的斜紋(亮條 17px/間距 56px)與圓角規格已和其他 HUD 面板一致,TM 拍板直接採用、不再排美術工項。也不能套分數區塊的黑底斜紋素材,那張是 435×81 的寬膠囊圖,拉進這個方框會變形
對話框 / 大廳離開對話框底框15461:227—離開對話框白底圓角面板。v0.15.1(2026-05-20):master 內移除原嵌入的 Yes/No 按鈕,只剩白底圓角;按鈕由 Btn/Common Yes/No instance 拼裝
解鎖分數紙條 ⭐ NEW15573:107—下一關解鎖分數紙條面板(560×120)
卡片選擇框 ⭐ v0.15 NEW15634:341—關卡卡片選擇框(340×610,6px 青色邊框 + 4 角金光點 + 24px 外發光)— BW-068
藍牙連線狀態區15470:994 種:Jmate1 (15899:302) / Jmate2 (15470:95) / Jmotion (15899:305) / 未連線 (15470:96)。連線後依裝置名稱前綴自動切換對應圖示左側 1P 狀態區
裝置列表底框15547:2—主面板深灰底 + 8px 橘色裝飾框
載入載入畫面 ⭐ NEW15470:106—1920×1080 完整載入畫面(JSG BOWLING + 進度條)
紀錄排行榜列15470:1193 態:黑灰列 Default(其他玩家)/ 米色列 CurrentUserInList(自己出現在榜內)/ 黃色列 CurrentUser(底部固定,分數欄為玩家歷史最高分)排行榜每一行(v0.15.1 後玩家自己分數只保留最高分,由黃色列呈現)
排行榜面板15547:4—排行榜深灰底面板(1720×818)
教學教學頁15470:159—教學頁白底大圓角容器(含 ‹ › 切頁鈕 + 影片區)
結算結算列15470:130—結算面板單列
結算詳情面板15547:6—結算 4 列圓角白底面板(原 1000×500,2026-07-07 起 instance 放大 1.2x → 1476×660,見 DEC-JSG11-033;2026-07-08 起 4 列文字字級 38.4px → 50px + 分隔線整體下移 4px,面板尺寸不變,見 DEC-JSG11-038)。2026-08-17 起雙人結算共用同一張底版(Result_2P instance 1620×724 @ (150, 200),原專屬件 Result/VsDetail_pnl 停用),見 DEC-JSG11-060
最高分徽章15565:2—突破最高分金色徽章(條件式顯示)。instance 15565:4 框尺寸:440×90 → v0.22 放大 1.2x → 528×108 → 2026-07-08 再放大 1.27x → 671×137(DEC-JSG11-038,以自身中心放大)
🎨 Figma 元件 PNG 對照
每個元件樣式變化已獨立匯出至 output/JSG11-bowling/figma/components/,供亞哈 6/1 接視覺時對照參考。檔名 ↔ 節點編號對照見 output/JSG11-bowling/figma/INDEX.md。

2流程圖 UI開發

App 啟動 → 大廳 → JSG11 主選單 → 模式選擇 → 關卡選擇 → 戰鬥 → 結算 → 回大廳。

大廳到戰鬥的主流程
App 啟動
登入
→
大廳
點 JSG11
→
JSG11
主選單
點擊開始 / 教學 / 紀錄
→
藍牙檢查
已連跳過
→
模式選擇
教學 / 單人 / 雙人(v1.x)
→
關卡選擇
5 卡片
→
戰鬥流程
10 球循環
→
結算
PASS / 未達標
→
回大廳
解鎖下一關 / 重打

關鍵操作流程決議

🔒 教學關卡強制進入

未進過教學關卡前,模式選擇下「單人模式按鈕鎖定」(灰階)。進入教學關卡後(無論是否過關)即解鎖單人模式。

👥 雙人模式畫面上線

JSG11 v1.0 雙人模式畫面已上線(模式選擇含按鈕、紀錄頁含 2P 分頁),程式功能 v1.x 才實裝。現階段鎖定樣式表達「教學關卡尚未完成」。

⚙️ 無設定入口

遊戲內主選單不放設定按鈕,jacfitness 設定統一在 App 大廳。

🔁 沒過關回大廳

沒過 → 回大廳重新選關(不顯示「再試一次」字眼),玩家自行決定是否重打。

324 個畫面清單 TM+AIJason/兔子

v0.14(2026-07-01)— 24 個畫面(v0.13 的 17 個畫面 + 互動式新手教學關卡 v2.4 新增 7 個:練習畫面 × 3 + 收合練習區 × 1 + 進場/完成字卡 × 2 + 打勾完成示意 × 1)。命名鎖結構:亞哈設計時用同樣命名、程式實裝時用同樣命名 → 零翻譯成本。畫面改用短名(不再用長前綴)。

1大廳 15245:2
大廳
範圍大廳
視覺亞哈
程式Jason
v0.12原長名「主選單」改為短名「大廳」(節點編號不變)
對齊 JSG10 網球:左上多國語系遊戲標題 / 右上「返回 Jacfitness 大廳」按鈕 / 中央偏下「點擊開始遊戲」綠字 / 右下 教學 + 紀錄 膠囊按鈕堆疊(共 3 型)
2戰鬥畫面(基本)15245:25
戰鬥畫面 基本
範圍戰鬥
視覺亞哈
程式兔子
v0.12戰鬥畫面拆 3 個狀態,此為「基本」狀態
v0.26挑戰面板文案尾巴補加分數:「加分挑戰:不洗溝」→「加分挑戰:不洗溝(+30 分)」,5 關依序 +10/+20/+30/+40/+50 分(DEC-JSG11-039,2026-07-08,多國 ID 57006~57010)
v0.27~v0.28TM 反饋「HUD 太小」→ ScoreBlock/ScoreItem/Btn/Icon/ChallengeTask 整體放大,累計 1.54 倍(435×81→670×125 / 215×61→331×94 / 137×81→211×125 / 304×79→468×122,文字 28px→43px),套用到戰鬥 HUD 3 態 + 結算/離開遊戲背景 HUD + 5 個互動教學關卡(DEC-JSG11-040、DEC-JSG11-041,2026-07-08)
v0.31移除關卡編號,分數區塊格式改單行「分數:{現在分數} / {過關門檻}」(DEC-JSG11-044,2026-07-09)
v0.36左下新增出手回饋面板(起點 40,786)顯示「上一球」的力道與旋轉,常駐不消失(DEC-JSG11-049,2026-07-28,說明見總覽頁「出手回饋」)
v0.38 / v0.39面板分兩輪由 620 寬縮到 420 寬(2026-07-29,DEC-JSG11-051 / 052)——第一輪讓開球本體(原右緣壓進球道左緣約 60px,球推到最左時左邊約四成被擋);第二輪讓開站位左右箭頭(箭頭貼著球體兩側跟著移動,比球更外側,最左時跑到 x=472,484 版會蓋掉箭頭約八成)。縮的是留白不是字級:邊距與間距壓掉、旋轉條 328→196,字級一個都沒動
左上分數區塊「分數:136 / 96」/ 右上球數區塊「3/10」+ 暫停 / 右側挑戰任務面板「不洗溝(+30 分)」即時失敗(紅槓劃過 + 字體變灰 #888)/ 中央狀態提示字卡共用容器 / 左下出手回饋面板(力道圓環 + 旋轉橫條,v0.36 起)。v0.28 起面板整體放大 1.54 倍
3戰鬥畫面(選位置)15522:738 ⭐ NEW
戰鬥畫面 選位置
範圍戰鬥
視覺亞哈
程式兔子
v0.12新增 — 對應投擲流程「①旋手腕選位」
v0.36左下新增出手回饋面板 — 選位置階段正是玩家「參考上一球再決定這球怎麼調」的時候,這是常駐設計的主要用途(DEC-JSG11-049,2026-07-28)
兩個青色三角箭頭(左右兩位置)/ 分數區塊用「分數:136 / 96」格式(v0.31 起,DEC-JSG11-044)/ 左下出手回饋面板顯示上一球力道與旋轉(v0.36 起)
4戰鬥畫面(瞄準)15522:858 ⭐ NEW
戰鬥畫面 瞄準
範圍戰鬥
視覺亞哈
程式兔子
v0.12新增 — 對應投擲流程「②看時機推出」
v0.36左下新增出手回饋面板(DEC-JSG11-049,2026-07-28)
中央大青色直立長箭頭(108×396)/ 左右各 45°、6 秒擺一輪、來回擺動端點慢中間快、無震屏 / 左下出手回饋面板顯示上一球力道與旋轉(v0.36 起)
5模式選擇 15245:69
模式選擇
範圍大廳
視覺亞哈
程式Jason
v0.12加主選單半透明背景蒙版
彈窗上下列表:教學關卡 / 單人模式(鎖定)/ 雙人模式(鎖定);lock badge 圖示表達鎖定狀態(v0.16 拿掉文字提示)
6結算 15245:98
結算
範圍戰鬥
視覺亞哈
程式兔子
v0.12加半透明背景 + 繼續按鈕用橘色實心確認按鈕 + 列文案改「得分 +N 分」
v0.22玩法測試回饋「結算畫面字太小」「HighScore字樣不明顯」→ 面板 + 標題 + 4 列分數文字 + HighScore 徽章 + 繼續鈕整體放大 1.2 倍(DEC-JSG11-033,2026-07-07)
v0.25RD 實機二次微調回饋 → 4 列分數文字字級 38.4px → 50px;分隔線整體下移 4px;HighScore 徽章再放大 1.27 倍(528×108 → 671×137,以自身中心放大,依 RD 截圖比例估算)(DEC-JSG11-038,2026-07-08)
「Result」金色大字 + 條件式最高分徽章(右上,v0.25 起再放大 1.27x)+ 結算詳情面板 4 行(全倒 +80 / 未全倒 +46 / 挑戰達成 +10 / 總分 136 / 96,v0.25 起條列字級 50px、分隔線下移 4px)+ 橘色實心繼續按鈕
7關卡選擇 15245:151 ⭐ 改名 + v0.15 加選擇框
關卡選擇(玩家選關卡 2 demo)
範圍大廳
視覺亞哈
程式Jason
v0.12原長名「關卡選擇」改為短名「關卡選擇」+ 加半透明背景
v0.15新增「卡片選擇框」元件(黃綠色邊框)— 玩家點選關卡時的反饋
5 張卡片橫排顯示關卡場景圖 + 關卡 3「玩家選中」選擇框高亮 + 關卡 4, 5 鎖定(lock badge)+ 右上「關卡解鎖條件:N 分」標籤(門檻依關卡遞增)+ 底部確認按鈕。2026-06-05:卡片上機關 icon 已移除,機關呈現改走遊戲內 3D 場景圖。2026-07-07:關卡 1 已過關金星 ★ 移除(DEC-JSG11-035,易誤認為難易度標示)
8離開遊戲 15245:255 ⭐ 改名 + 改文案
離開遊戲
範圍戰鬥
視覺亞哈
程式兔子
v0.12原長名「戰鬥暫停」改為短名「離開遊戲」;文案改:「離開時分數不會記錄/確定回到開始畫面?」+ 否(紅)/ 是(綠) 通用按鈕,含戰鬥場景半透明背景蒙版
確認對話框(白底圓角面板)
9教學頁 1:選擇位置 15245:278 ⭐ NEW
教學頁 選擇位置
範圍大廳
視覺亞哈
程式Jason
v0.12動作教學從原 2 頁拆為 3 頁,此為第 1 頁
標題「選擇位置」+ 副文「手腕垂直貼地,左右轉動手腕選擇球的位置」+ 影片區(教學頁元件「▶影片區(影片之後置入)」)
10教學頁 2:丟出保齡球 15553:41 ⭐ NEW
教學頁 丟出保齡球
範圍大廳
視覺亞哈
程式Jason
v0.12動作教學第 2 頁
標題「丟出保齡球」+ 副文「手放下確認位置後,看好角度向前揮臂推出去」+ 影片區
11教學頁 3:曲球控制 15553:61 ⭐ NEW
教學頁 曲球控制
範圍大廳
視覺亞哈
程式Jason
v0.12動作教學第 3 頁
標題「曲球控制」+ 副文「推球瞬間扭動手腕,球路會跟著彎曲」+ 影片區
12戰鬥字卡(實機截圖) 17103:2 ⭐ NEW
戰鬥字卡 實機截圖
範圍戰鬥
視覺亞哈(文字)+ 綠豆(動態)
程式兔子
v0.132026-07-09 更新:配合戰鬥 HUD 放大(DEC-JSG11-040/041)+ 結算畫面二次微調(DEC-JSG11-038)重新截取 7 張字卡實機畫面
7 張字卡實機截圖(2026-07-09 重截,套用放大後 HUD):Ready(準備)/ Finish(完成)/ STRIKE!(全倒)/ GUTTER!(洗溝)/ SUCKED!(吸入)/ Challenge Clear(挑戰完成)/ New Stage(新關卡,畫面為結算頁疊字卡轉場瞬間實拍)。球道視角疊字卡特效,各字卡配色不同(Strike 綠金 / Gutter 橘紅 / Sucked 紫光 / Challenge Clear 金黃 / New Stage 木紋暖色)。
13藍牙搜尋中 15346:2 ⭐ 拆畫面
藍牙搜尋中
範圍大廳(藍牙)
視覺亞哈
程式Jason
v0.12由 v0.11「同一畫面兩狀態」改為獨立畫面
1P + 5 個 Jmate2 裝置(裝置按鈕 一般狀態)+「裝置未連線」紅字 + 確認按鈕(橘金確認)
14a藍牙已連線 — Jmate1 15928:2 ⭐ v0.12 NEW
藍牙已連線 Jmate1
範圍大廳(藍牙)
視覺亞哈
程式Jason
v0.12依裝置型號分三個 layout — Connet/StatusFrame State=Jmate1(切換左側手環插圖,非框色)
Jmate1 手環插圖(JACFIT 手環)+ 裝置列表 5 個(選中列 cyan #26C6C6 highlight)+ 連線成功文字 + 確認按鈕
14b藍牙已連線 — Jmate2 15928:27 ⭐ v0.12 NEW
藍牙已連線 Jmate2
範圍大廳(藍牙)
視覺亞哈
程式Jason
v0.12依裝置型號分三個 layout — Connet/StatusFrame State=Jmate2(切換左側手環插圖,非框色)
Jmate2 手環插圖 + 裝置列表 5 個(選中列 cyan #26C6C6 highlight)+ 連線成功文字 + 確認按鈕
14c藍牙已連線 — Jmotion 15928:52 ⭐ v0.12 NEW
藍牙已連線 Jmotion
範圍大廳(藍牙)
視覺亞哈
程式Jason
v0.12依裝置型號分三個 layout — Connet/StatusFrame State=Jmotion(切換左側手環插圖,非框色)
Jmotion 手環插圖 + 裝置列表 5 個(選中列 cyan #26C6C6 highlight)+ 連線成功文字 + 確認按鈕
15紀錄 15349:2
紀錄
範圍大廳(紀錄)
視覺亞哈
程式Jason
v0.11沿用 — 畫面由「排行榜 → 紀錄」改名
1P/2P 分頁切換 + 7 行可滑動排行;排行列三態:黑灰列=其他玩家 / 米色列=自己出現在榜內(滑動時可見自己的實際排行)/ 底部固定黃色列=自己的排行+歷史最高分(未上榜顯示「-」)。(v0.15.1 已移除「我的最高分」獨立區塊)
16挑戰達成(成功) 17153:240 ⭐ NEW
挑戰面板 成功態
範圍戰鬥(HUD)
視覺亞哈
程式兔子
對應BW-083 挑戰達成 ☑
沿用現有戰鬥 HUD +「加分挑戰:不洗溝(+30 分)」(v0.23 起原「本關挑戰」,DEC-JSG11-034;v0.26 起尾巴補加分數,DEC-JSG11-039)面板(HUD/ChallengeTask 切 State=Success 變體,v0.28 起整體放大 1.54 倍,DEC-JSG11-040/041),成功態:面板左側 ☑ 打勾(實機截圖去背素材:白框白勾,已收進變體)。
17挑戰失敗 17153:251 ⭐ NEW
挑戰面板 失敗態
範圍戰鬥(HUD)
視覺亞哈
程式兔子
對應BW-084 挑戰失敗 紅槓
沿用現有戰鬥 HUD +「加分挑戰:不洗溝(+30 分)」(v0.23 起原「本關挑戰」,DEC-JSG11-034;v0.26 起尾巴補加分數,DEC-JSG11-039)面板(HUD/ChallengeTask 切 State=Failed 變體,v0.28 起整體放大 1.54 倍,DEC-JSG11-040/041),失敗態:紅色刪除線劃過挑戰文字(已收進變體)+ 文字轉灰(#888)。無打勾。
18互動教學 — 選擇位置(展開態) 17187:266 ⭐ v2.4 NEW
互動教學階段 1 展開態
範圍戰鬥(教學關,LevelTypeId=0)
視覺TM+AI
程式Alan
對應BW-186~189
v0.39左下補上出手回饋面板(2026-07-29,DEC-JSG11-052)——教學影片面板展開時不會關閉出手回饋面板,只是被蓋住,底部約 75px(「力道」「左旋」那一帶)會從教學面板底下露出來。這跟站位箭頭/光標的規則不同:那兩個是「現在要你操作」的指引所以展開時要收,出手回饋是「上一球結果」的常駐資訊,沒有必須消失的理由
真正可操作的練習關卡(跟 9~11 號純圖文教學頁不同),沿用戰鬥 HUD 版面。左側大教學影片面板貼齊螢幕左緣(1340×830,約佔螢幕 70%/77%),內容由上至下:標題「選擇位置」→ 影片區(1260×500,尺寸標註佔位待真實影片素材)→ 內文「手腕垂直貼地,左右轉動手腕選擇球的位置」。右上角教學目標面板(重用 HUD/ChallengeTask)即時顯示計數「選擇位置 0/4」。畫面最右上角為略過鈕(v0.34 起,原暫停鈕原地替換,見下方功能說明)。
19互動教學 — 丟出保齡球(展開態) 17187:277 ⭐ v2.4 NEW
互動教學階段 2 展開態
範圍戰鬥(教學關)
視覺TM+AI
程式Alan
對應BW-186~189/191
v0.39左下補上出手回饋面板(2026-07-29,DEC-JSG11-052)——教學影片面板展開時不會關閉出手回饋面板,只是被蓋住,底部約 75px(「力道」「左旋」那一帶)會從教學面板底下露出來。這跟站位箭頭/光標的規則不同:那兩個是「現在要你操作」的指引所以展開時要收,出手回饋是「上一球結果」的常駐資訊,沒有必須消失的理由
同 18 版面結構;標題「丟出保齡球」+ 內文「手放下確認位置後,看好角度向前揮臂推出去」。教學目標面板「丟出保齡球 0/3」。Good! 即時回饋徽章緊鄰面板右側,每次完整完成「確認→推出」動作即彈出並計數 +1。
20互動教學 — 曲球控制(展開態) 17187:288 ⭐ v2.4 NEW
互動教學階段 3 展開態
範圍戰鬥(教學關)
視覺TM+AI
程式Alan
對應BW-186~189/191
v0.39左下補上出手回饋面板(2026-07-29,DEC-JSG11-052)——教學影片面板展開時不會關閉出手回饋面板,只是被蓋住,底部約 75px(「力道」「左旋」那一帶)會從教學面板底下露出來。這跟站位箭頭/光標的規則不同:那兩個是「現在要你操作」的指引所以展開時要收,出手回饋是「上一球結果」的常駐資訊,沒有必須消失的理由
同 18 版面結構;標題「曲球控制」+ 內文「推球瞬間扭動手腕,球路會跟著彎曲」。教學目標面板「曲球控制 0/3」,推出瞬間角加速度超過 dead zone 閾值即判定「有扭手腕」計數 +1,直球不計數。
21互動教學 — 收合後練習區域 17197:333 ⭐ v2.4 NEW
互動教學面板收合後練習區域
範圍戰鬥(教學關)
視覺TM+AI
程式Alan
對應BW-189/190
v0.37左下補上出手回饋面板(2026-07-29)— 教學關卡也吃同一條規則:影片面板收合時才顯示、展開時隱藏(展開的面板本來就蓋住左下角,且展開時不能操作)
影片面板展示 30 秒後自動收合(或玩家隨時按面板內嵌三角形按鈕手動收合),滑出畫面左側僅留貼齊左緣的全高直立窄條把手。收合後練習操作區域才完整可見:站位光標 VFX(發光光環套球 + 箭頭指示,僅階段 1)+ HUD/PositionArrow 左右三角形(沿用正式戰鬥選位置態同款元件)。展開態與收合態視覺互斥——面板展開時不顯示這些練習提示。
22互動教學 — 進場字卡 Ready 17216:336 ⭐ v2.4 NEW
互動教學進場字卡 Ready
範圍戰鬥(教學關)
程式Alan
對應BW-193
玩家進入教學關卡當下播放,直接沿用正式關卡既有的 WordCard_Ready 實機截圖字卡(不重畫),與正式關卡進場演出一致。
23互動教學 — 完成字卡 Finish 17216:337 ⭐ v2.4 NEW
互動教學完成字卡 Finish
範圍戰鬥(教學關)
程式Alan
對應BW-193
3 階段全部完成後播放,直接沿用正式關卡既有的 WordCard_Finish 實機截圖字卡(不重畫)。播放完直接返回大廳,教學關無結算頁、無分數。
24互動教學 — 單階段達標打勾 17216:338 ⭐ v2.4 NEW
互動教學單階段達標打勾示意
範圍戰鬥(教學關)
程式Alan
對應BW-194
v0.37左下補上出手回饋面板(2026-07-29),同上:收合態才顯示
單一階段練習達標次數(如「選擇位置 4/4」)示意:教學目標面板重用既有 HUD/ChallengeTask State=Success 變體切到打勾態,短暫停留後自動進入下一階段(影片面板重新展開、30 秒計時重置),玩家不需手動按「下一步」。

互動式新手教學關卡功能說明(v2.4,2026-07-01)

與畫面 9~11 號的純圖文教學頁不同——這是對應 Excel LevelSetting._id=0(LevelTypeId=0)的真正可操作練習關卡,讓玩家在進正式關卡前實際動手練,不只是看。詳細規格見 mechanics.md §新手教學關卡 + ui-layout.md §3.7。

🎬 教學影片面板(可收合)

每階段開始自動於畫面左側彈出大面板(貼齊螢幕左緣,約佔螢幕 70%/77%),內容由上至下:標題 → 影片區(1260×500)→ 內文。展示 30 秒後自動收合,面板內嵌三角形按鈕可隨時手動收合/展開,收合後貼齊左緣僅留直立把手。

🎯 3 階段練習目標

選擇位置 ×4 / 丟出保齡球 ×3 / 曲球控制 ×3(🟡 初版設計值,待 RD 實機測試確認)。每階段完成才自動進入下一階段,全部完成無結算直接返回大廳。

♻️ 全部重用既有元件

教學目標面板重用 HUD/ChallengeTask、進退場字卡重用 WordCard_Ready/WordCard_Finish、選位置提示重用 HUD/PositionArrow——不新增判定用元件,只新增視覺呈現用的 Tutorial/VideoPanel、Badge/Good、VFX/TutorialTargetCursor 3 個。

🔀 展開態 / 收合態視覺互斥

面板展開時佔螢幕大半,不顯示站位光標/HUD/PositionArrow 等練習提示;面板收合後練習操作區域才完整可見,玩家開始動手練習。兩者不會同時出現。

⏭️ 略過鈕(v2.4 暫停改略過,2026-07-24 補套)

教學關卡右上角不放暫停鈕,原地替換為略過鈕:底版沿用冰壺教學同款 Black_btn(黑底+「略過」白字,403×92,右緣對齊原暫停鈕位置,與右側挑戰面板黑底調性一致)。「略過」文字=多國 12409,RD 實裝時 i18n 注入、不嵌進素材。點擊後直接結束教學關卡返回大廳、不彈確認框——教學關無結算、無分數,且單人模式解鎖在「進入教學關當下」即成立,略過不影響解鎖。正式關卡右上角仍為暫停鈕,行為不變(觸發離開遊戲對話框)。

4單關循環流程 UI開發

關卡進場 → 10 球循環 → 結算。每球的 UI 反饋順序如下。

關卡進場序列(v0.8 大幅簡化)
LevelSelect 點關
Stage 號 + 機關 icon
已顯示
→
Loading
資源載入
→
Ready 字卡
單字 READY
(無 3·2·1 倒數)
→
進入投擲
第 1 球
HUD 右上常駐挑戰面板

v0.8 刪除:Stage 字卡 / 機關介紹字卡 / 挑戰任務字卡 / 3·2·1 倒數 — 玩家在 LevelSelect 已看過全部資訊,進關不重複介紹

每球循環(× 10)
1
階段 1 選位
手腕垂直旋轉 → X 站位 UI
2
階段 2 瞄準
手放下 → 箭頭自走擺動
3
推出
揮臂 → 擷取箭頭角度
4
球路
旋轉視覺 + 機關互動
5
單球結算
Strike / Gutter / Sucked 字卡 + 分數
🎬 單球循環完整演出時機流程圖(v1.1,2026-05-27 拍板 DEC-JSG11-015 / 016;2026-05-29 併入 v1.4 字卡順序)

操作 gating · 鏡頭切換 · 字卡觸發 · 挑戰 HUD icon 動態 · 黑畫面過場(純黑方案 A)

1操作階段 — 選位置 → 瞄準 ✅ 操作解封
新球初始化
(循環起點)
→
選位置 HUD 顯示
即時(setActive,無 fade)
→
選位置態
→
手放下 OnConfirm
PositionArrow punch 0.30s
→
AimArrow fade-in
+ 自走擺動 ±45° / 6s
→
瞄準態
→
揮臂 OnPush
擷取當下角度

玩家可用:旋手腕 Roll · 手放下 OnConfirm · 手上抬 OnReadjust(回階段 1)· 揮臂 OnPush

2球出手 → 球停(封鎖操作) ❌ 手環輸入封鎖 🎬 鏡頭切換
OnPush 觸發
tween.Kill + 鎖角度
→
AimArrow fade-out
0.50s InQuad
→
投擲視角不動
玩家看球往前飛
→
過截止線
→
traceCamera 跟球
無 zoom in
→
球停 + 判定
鏡頭固定
3機關 hit feedback(被擊中當下,非預警) ✨ VFX
球進黑洞吸引半徑 0.375m →
黑洞吸入 VFX球到中心消失
球進地雷半徑 →
地雷爆炸 VFX彈飛瓶子(仍可 Strike,但挑戰失敗)
球進風場 →
風場 VFX推球(既有,r131 BW-126 常駐)
障礙瓶倒下 →
hit feedback VFX綠豆 r132 補設計(無預警,被擊倒當下演)
4單球字卡(依結果 + 觸發時機) 💬 字卡

球停下後等 3 秒觀察期(若全倒可提前觸發 Strike)→ 閘門下拉動畫 + 字卡 + 分數彈出 + 挑戰面板即時演出(同步)。⚡ 標記者不等 3 秒、不等球停,觸發瞬間即出。(BW-088,v1.4 2026-05-28)

⚡ 球碰溝當下 →
Card_Gutter 字卡不等球停,碰溝瞬間即出
⚡ 球到黑洞中心消失後 →
Card_Sucked 字卡球進黑洞消失瞬間即出
球停 + 倒完所有正規瓶 →
Card_Strike 字卡球停判定後出;若同時挑戰達標 → 後接 Card_ChallengeClear(見 §5.5)
球停 + 未倒完 Open →
無字卡分數直接更新 HUD
5HUD 挑戰面板即時演出(兩種挑戰行為) ☑ 即時成功 ✗ 即時失敗
挑戰類型適用 Stage演出時機與動態
達標型
(即時成功)
Stage 1(3 次 Strike) 條件達成當下瞬間 → HUD ☑ icon + 灰字 → 此後該關 HUD 維持成功態
即時失敗型 Stage 2 不擊倒障礙瓶 / Stage 3 不碰黑洞 / Stage 4 不碰地雷 / Stage 5 不洗溝 違規條件達成當下瞬間 → HUD 紅槓 DOTween 動畫 + 灰字 → 此後該關 HUD 維持失敗態
進行中 — HUD 維持任務描述;文字過長 → 跑馬燈循環捲動(固定速度、貼底、不擋左邊、右側碰啟動按鈕停、黑底靜止只跑文字)

⚠️ Stage 1 達標型:第 10 球結束時若仍未達 3 次 Strike → 結算前演紅槓動態(fail)。其他 Stage 違規後 HUD 已失敗,剩下球次照常打完不再判定。

🆕 跑馬燈(2026-06-03 會議,DEC-JSG11-025):進行中態任務描述文字過長會撐破面板,故採水平循環捲動(無限迴圈)避免溢出。任務成功 / 失敗當下先停止捲動 → 文字復位 → 再演 ☑ / 紅槓(三段有序)。速度先設任意值,demo 後調參;「…」長度與文字上限後續微調。

5.5所有挑戰達成 → Card_ChallengeClear 字卡(即時觸發,不等 10 球)💬 字卡
⚡ 全挑戰達成瞬間 (現只 1 挑戰,故 = HUD ☑ 演出後立即;未來多挑戰時 = 最後一條達成瞬間) →
Card_ChallengeClear 獨立字卡不等第 10 球結算,當下即出。剩餘球次照常打完
6每球字卡退場後 → 黑畫面過場 → 下一球(純黑方案 A) ⬛ 黑畫面 🎬 鏡頭拉回
字卡退場 / Open 球停
每球都跑(非 10 球後)
Gutter / Sucked / Strike 退場
或 Open 球停直接接
→
黑 fade in
0.30s InQuad
→
黑停留 0.20s
鏡頭悄悄拉回投擲視角
→
黑 fade out
0.30s OutQuad
→
第 10 球

過場期間不放任何 UI 元素(無球數提示、無 Stage 編號),純黑。

否 → 回 Phase 1 重新出球 · 是 → 進 Phase 7 結算
7第 10 球結束 → 結算(補演各 Stage 未演出的挑戰判定) ☑ 補演 OK ✗ 補演 fail 💬 字卡
Stage第 10 球結束時的狀態補演動作
Stage 1 達標型 仍未達 3 strike 補演紅槓 fail(DOTween 動畫)
Stage 2~5 即時失敗型 整關都沒違規(從未紅槓) 補演 ☑ 成功(DOTween 彈出) → 若是最後一條挑戰 → 觸發 Card_ChallengeClear 字卡(§5.5 即時邏輯延伸到此)
第 10 球結束
→
HUD 挑戰
仍進行中?
→
補演挑戰判定
Stage 1 fail 或
Stage 2~5 ☑ 成功
→
Card_Finish 字卡
BW-117
→
結算頁
直接切換,無黑畫面 fade
沿用 Lobby Modal 動畫
→
破最高分?
→
HighScore 字卡
BW-119(金字 +「+X」差值)
→
New Stage 字卡
BW-118(若解鎖新關卡)

⚠️ Phase 5 處理「達成 / 失敗當下」的即時 HUD 演出;Phase 5.5 處理「全挑戰達成的瞬間」即時 ChallengeClear 字卡。 Phase 7 只處理 HUD 仍在「進行中」狀態(=該挑戰整關沒明確結論)的條目,依 Stage 類型補演成功 / 失敗動畫。
🆕 v1.4(2026-05-28):Finish → 結算不走黑畫面 fade(沿用 Lobby Modal 動畫);結算後依序判定 HighScore 字卡(BW-119,破紀錄才出)→ New Stage 字卡(BW-118,解鎖才出)。

✅ 操作解封 ❌ 操作封鎖 🎬 鏡頭 💬 字卡 ✨ VFX ⬛ 黑畫面 ☑ 挑戰成功 ✗ 挑戰失敗
🎬 鏡頭流程 v1.3(2026-05-27 拍板 — DEC-JSG11-015)
  1. OnPush 球出手 → 鏡頭停在投擲視角不動(玩家視角看球往前飛)
  2. 球過截止線 → 切到 _traceCamera 開始跟球(無 zoom in,無瓶區近景 — 原 v1.2 PinAreaCamera 已刪除)
  3. 倒瓶 / 球停 → 鏡頭固定在球停位置,等字卡演出
  4. 字卡演出完 → 黑畫面 fade in 0.30s + 黑停留 0.20s(悄悄拉回投擲視角)+ fade out 0.30s(方案 A 純黑,無 UI 提示)
  5. 選位置 HUD 顯示(即時,無 fade)→ 下一球操作解封

5命名對照 亞哈Jason/兔子

這節說明 Figma 設計稿 ↔ 美術素材 ↔ 程式內部命名的對照規則(給程式 + 美術之間做翻譯用)。本節只列給亞哈、Jason、兔子三方對齊規則用,企劃書其餘段落都用中文白話描述,不用記這些前綴。

命名空間(檔案前綴)

前綴用途白話說明
UIJSG11_畫面 / 面板UI 畫面 / 彈窗的命名,例如戰鬥畫面、模式選擇面板
Bowling_美術 / 音效 / 特效資源所有保齡球專屬的美術 / 音效 / 特效命名,例如「全倒特效」
JSG11_程式元件 / 控制器程式內部類別命名,例如瞄準箭頭控制器
bowling.多語系翻譯詞條小寫加點,例如「戰鬥畫面分數」對應一組多語系 key

元件類型前綴對照

前綴中文名稱說明
Frm_畫面區塊大區塊容器(例如頂部資訊列)
Pnl_面板 / 彈窗彈出視窗(例如暫停面板)
Btn_按鈕所有可點擊的按鈕
Lbl_文字純文字標籤(例如分數數字)
Img_圖片素材圖(例如球瓶圖片)
Ico_小圖示小型圖標(例如風的圖示)
Bdg_徽章小型標籤徽章(例如「挑戰達成」金星)
Bar_長條長條型元素(例如瞄準箭頭、進度條)
Card_卡片卡片型元素(例如關卡 1 標準關卡片)
Cnt_計數器數字計數器(例如球數計數)

狀態標記(後綴)

後綴中文意思用法範例
_State_Default預設狀態按鈕的一般樣式
_State_Disabled禁用按鈕不可點時的灰階樣式
_State_Locked鎖定關卡未解鎖的暗色 + 鎖頭樣式
_State_Current 已棄用 v0.15.8當前原「當前可玩」黃底框樣式,v0.15.8(2026-05-22)移除 — Card/Stage 縮為 1 variant 純底卡,被動標記取消,主動視覺由 Frame/CardSelection 承擔
_State_Achieved挑戰達成金星亮起樣式
_State_Failed挑戰失敗金星灰掉樣式

6戰鬥畫面佈局 亞哈兔子

遊戲中常駐的戰鬥畫面(亞哈視覺、兔子實裝)。v0.12 戰鬥畫面拆 3 個狀態:基本(共用容器顯示中)/ 選位置(左右青色三角箭頭)/ 瞄準(中央大青色直立長箭頭),對應投擲流程「選位置→丟出」兩段操作。

📌 v0.12 戰鬥畫面 3 個狀態對照
① 基本(節點編號 15245:25)— 左上分數區塊「分數:136 / 96」(v0.31 起移除關卡編號,DEC-JSG11-044)、右上球數 + 暫停、右側挑戰任務面板、中央共用容器
② 選位置(節點編號 15522:738)— 兩個青色三角箭頭(181×180),對應「①旋手腕選位」
③ 瞄準(節點編號 15522:858)— 中央大青色直立長箭頭(108×396),對應「②看時機推出」
① 基本(15245:25)
戰鬥畫面 基本
② 選位置(15522:738)
戰鬥畫面 選位置
③ 瞄準(15522:858)
戰鬥畫面 瞄準

戰鬥畫面元素清單(v0.12,對齊 Figma 戰鬥畫面 3 個狀態)

  • 分數 / 過關門檻(左上)— 單行「分數:{現在分數} / {過關門檻}」(例:「分數:136 / 96」,各關門檻不同:24/48/68/88/96)。v0.31 起移除關卡編號,戰鬥中不再顯示第幾關(DEC-JSG11-044)
  • 球數計數(右上)— 「3 / 10」
  • 挑戰任務面板(右上常駐)— 「加分挑戰:不洗溝」(v0.23 起,原「本關挑戰」,DEC-JSG11-034)+ 即時失敗變灰 + 打叉標記(v0.8 起改畫面常駐,不再用進關字卡)。文字過長時跑馬燈循環捲動(貼底 / 不擋左邊 / 碰啟動按鈕停,黑底靜止只跑文字;2026-06-03 會議)
  • 暫停按鈕(右上角)— 觸發離開遊戲對話框
  • 瞄準箭頭(球道上方)— 階段 2 自動擺動,揮臂瞬間定格
  • 狀態提示文字(球道下方)— 準備 / 完成 / 全倒 / 新關卡 / 洗溝 / 吸入 共用容器(詳見「字卡」段落)
⚠️ 不做的項目
~~力道條 / 蓄力畫面~~(無蓄力條設計)/ ~~補中字卡~~(沒有「第二球補倒所有瓶」的判定)/ ~~「已達標」提示~~(強制 10 球)/ ~~分頁指示器~~(教學頁簡化)

7結算頁佈局 亞哈兔子

結算 — Figma 實機截圖(節點編號 15245:98)
結算頁

結算頁元素清單(v0.12 反向同步 Figma)

  • 「HighScore」標題(右上區域,節點編號 15565:2)— 條件式顯示:玩家本局突破個人最高分才出現,後綴當關挑戰名(如「:不洗溝」)
  • 單一中央「結算」面板 圓角面板含 4 行:
    • Strike 得分「+N 分」(全倒貢獻分數)
    • Open 得分「+N 分」(未全倒貢獻分數)
    • 加分挑戰(v0.23 起,原「挑戰達成」,DEC-JSG11-034)「+N 分」或「Failed」
    • 總分「N / 門檻」(如 136 / 96)
  • 「繼續」按鈕(右下,使用通用按鈕的「確認」橘金樣式)— 橘色實心(v0.12 改用元件,非 v0.8 原本的金底紅邊)— 取代 v0.7「返回大廳」
  • 過門檻 → 點繼續回大廳(解鎖下一關);沒過 → 點繼續回大廳(玩家自選重打或換關,v0.14 無「再試一次」)
❌ 不做以下按鈕(v0.8 拍板)
~~下一關~~ / ~~重玩~~ / ~~再試一次~~ / ~~返回大廳(改為「繼續」)~~ — 過關或沒過都只有「繼續」按鈕回大廳重新選關,玩家自行決定是否重打。

8關卡選擇佈局 亞哈Jason

v0.12 改用短名「關卡選擇」(原長名「關卡選擇」)+ 加主選單半透明背景蒙版。5 張卡片橫排顯示關卡場景圖,上方標示「關卡解鎖條件:N 分」(門檻依關卡遞增)。2026-06-05:卡片上的機關 icon 已移除,機關呈現改走遊戲內 3D 模型 / VFX。

關卡選擇 — Figma 實機截圖(節點編號 15245:151)
關卡選擇

2 種卡片狀態(v0.15.8 — 移除「當前可玩」被動標記)

已解鎖

  • 純底卡(右下角金星徽章 2026-07-07 移除,DEC-JSG11-035:易誤認為關卡難易度標示)
  • 顯示機關圖示(左上小框)
  • 可重玩拿挑戰加分

鎖定

  • 純底卡 + 黑 50% dim rect + Badge/Lock instance
  • 無法點擊
  • 需先過前一關門檻(各關遞增:24 / 48 / 68 / 88 / 96)

玩家選中

  • 純底卡 + Frame/CardSelection(cyan 邊框 + 角光點)疊在玩家點選卡片上 → BW-067
  • 主動視覺反饋,與「當前可玩」被動標記無關
  • 頂部「關卡解鎖條件:N 分」標籤常駐(v0.11 新增,門檻依關卡遞增)
v0.15.8(2026-05-22)變更:原 BW-061「卡片狀態 — 當前可玩」(米色底 + 橘金描邊被動標記)已移除;Figma Card/Stage master 縮為 1 variant(純底卡),「當前可玩」概念取消。5 張卡片中「已解鎖未過關」共用同底卡,玩家主動視覺反饋由 Frame/CardSelection 承擔。

9畫面動畫 亞哈綠豆Jason / 兔子

全部畫面動畫走 DOTween(程式動畫套件)。本節整理彈窗、戰鬥字卡、戰鬥畫面元素自動擺動、條件彈出、按鈕小互動的「時間 / 緩動曲線 / 縮放 / 透明度」參數。2026-05-19 v0.5 拍板:瞄準箭頭擺動 左右各 7.5°(總共 15°)/ 8 秒一輪、來回擺動端點慢中間快;全倒字卡 不加震屏(v0.2 拍板沿用)。詳見原始規格 games/JSG11-bowling/ui-animation.md。

三大類動畫

  • 彈窗(9 個畫面,含半透明黑色蒙版)
  • 戰鬥字卡(共用容器 6 種 + 獨立挑戰完成 + 獨立 HighScore)
  • 戰鬥畫面元素自走 / 條件彈出(瞄準箭頭 / 選位置箭頭 / 最高分 / 載入畫面)

設計禁忌

  • 不用 Unity 內建動畫工具(程式看不懂、複雜度爆炸)
  • 不用無限循環 + 高頻動畫(例外:瞄準箭頭擺動、按鈕滑過)
  • 半透明蒙版區點擊不關閉彈窗(必須點關閉 / 確認按鈕)

分工

  • 視覺品味 / 動畫節奏 = 亞哈
  • 字卡動態 + 粒子 = 綠豆
  • 大廳畫面實裝 = Jason;戰鬥畫面實裝 = 兔子

🎬 動畫實機錄製

以下為 Unity 實機錄製的動畫效果,全部走 DOTween 程式動畫。

① 瞄準箭頭擺動v0.5 拍板

瞄準箭頭左右擺動
戰鬥畫面中,青色實心箭頭在球道上方自動來回擺動,玩家推球瞬間箭頭凍結、決定出球方向。上方 HUD 顯示關卡編號、球次與挑戰條件。
範圍:左右各 7.5°(總共 15°,繞 Z 軸)|週期:8.0 秒(半週期 4.0 秒)
節奏:InOutSine Yoyo,端點慢中間快|推球時立刻凍結停住

② 彈窗 + 半透明背景同步演出 · 9 個畫面共用

彈窗進場動畫
以「離開遊戲」彈窗示範共用進場動畫:半透明黑色蒙版覆蓋戰鬥畫面,面板從縮小彈出顯示「離開時分數不會記錄,確定回到開始畫面?」,底部「否」(白底)/「是」(黃綠底)按鈕。此動畫模式共用於 9 個畫面。
半透明背景:透明 → 60% 黑(0.25 秒 OutQuad)
面板放大:85% → 100%(0.35 秒 OutBack 帶回彈)+ 透明 → 不透明(0.25 秒)
關閉:面板先收 + 半透明背景晚 0.05 秒
📍 套彈窗進場動畫的 6 個畫面
畫面開啟關閉
模式選擇大廳 CTA選模式 / 返回
關卡選擇單人 / 教學選關確認 / 返回
藍牙搜尋偵測未連線找到裝置 / 返回
教學頁 1首次教學 / 教學鈕下一頁 / 關閉
結算10 球停下結算完繼續按鈕
離開遊戲戰鬥按暫停否 / 是
連續轉場:同層半透明背景複用,新面板在舊面板退出 50% 時進場。 離開遊戲:用戰鬥場景背景,「否」預設焦點。

③ 最高分徽章彈跳出現

結算畫面含最高分徽章
實機錄製為結算彈窗全貌:半透明黑色蒙版上顯示 Strike 得分(+150)、Open 得分、挑戰達成加分(+50)與總分(160 / 24),底部「繼續」按鈕。當玩家本局突破個人最高分時觸發 HighScore 徽章彈跳。
觸發:結算頁顯示後延遲 0.3 秒|放大:0 → 1.2 → 1.0 倍(0.60 秒 OutElastic)
浮現:透明 → 不透明(0.30 秒)

④ 大廳「點擊開始遊戲」

大廳 Tap to start 畫面
大廳完整畫面:左上角 Spin Strike Logo、球道場景背景、底部「Tap to start」文字呼吸動畫、右側 Basis / Tutorial / Record 功能選單。
呼吸:放大 1.0↔1.06 倍 + 透明度 1.0↔0.75(1.6 秒 InOutSine 來回永久)
點擊後:觸發模式選擇彈窗

📋 完整參數表

「節奏」欄是給程式抓動畫節奏用的英文名稱,括號內為白話說明。

類別動畫時間節奏起 → 終值
彈窗半透明背景 浮現 / 退場0.25 秒OutQuad / InQuad(出場慢 / 進場慢)透明度 0 ↔ 0.6
面板 放大 / 縮回0.35 秒 / 0.20 秒OutBack / InQuad(帶回彈 / 進場慢)放大比例 0.85 ↔ 1.0
面板 浮現 / 退場0.25 秒 / 0.20 秒OutQuad / InQuad透明度 0 ↔ 1
最高分徽章0.60 秒(延遲 0.3 秒)OutElastic(彈跳)放大比例 0 → 1.2 → 1.0
戰鬥畫面元素瞄準箭頭擺動8.0 秒一輪(半輪 4.0 秒)InOutSine 來回擺動 無限(端點慢、中間快)左右各 7.5°(總共 15°)
選位置箭頭確認0.30 秒OutBack 彈跳(縮放反饋)放大比例 1.0 → 1.15 → 1.0
瞄準箭頭推出後淡出0.50 秒InQuad(進場慢)透明度 1 → 0
大廳動畫「點擊開始遊戲」呼吸(永久來回)1.6 秒一輪InOutSine 來回擺動 無限放大比例 1.0 ↔ 1.06 + 透明度 1.0 ↔ 0.85
按鈕(手機點擊)所有按鈕點擊(確認 / 是 / 否 / 返回 / 暫停 ...)0.08 秒 + 0.12 秒InQuad → OutBack(縮 → 回彈)放大比例 1.0 → 0.92 → 1.0

🔧 程式共用常數(給工程師抽常數)

這段是給程式工程師抄到靜態類別用的英文常數,方便 5/29 試玩後集中調參。非工程角色可以跳過這段,前面的中文參數表已足夠理解動畫節奏。

// AimArrow(±7.5° / 8.0s / InOutSine Yoyo)
public const float AimArrowSwingHalf      = 4.00f;   // 半週期(端點→端點),總週期 8.0s
public const float AimArrowSwingAngle     = 7.5f;    // 度,±7.5°(總共 15°)
public const Ease  AimArrowSwing          = Ease.InOutSine;// 端點慢、中間快(v0.5 回歸 v0.2 ease)

// Modal 彈窗
public const float ModalDimFadeIn       = 0.25f;
public const float ModalPanelScaleIn    = 0.35f;
public const float ModalPanelScaleOut   = 0.20f;
public const Ease  ModalPanelScaleIn_E  = Ease.OutBack;     // overshoot 1.2

// HUD 字卡(Strike / NewStage / Challenge Clear)
public const float HUDCardStrikeIn      = 0.40f;     // OutBack overshoot 1.4
public const float HUDCardNewStageIn    = 0.50f;     // OutQuad,posX -200 → 0
public const float HUDCardChallengeIn   = 0.50f;     // OutBack overshoot 1.5 + rotation 360°→0°
public const float HUDCardHold          = 1.00f;     // v0.8(2026-06-24)所有字卡停留統一 1s(原 Ready/Finish/Gutter/Sucked=1.5 / Strike=1.8 / NewStage/ChallengeClear=2.0)

// HighScore(OutElastic)
public const float HighScoreBadgeDelay  = 0.30f;
public const float HighScoreBadgeScale  = 0.60f;
public const Ease  HighScoreBadge_E     = Ease.OutElastic;

📄 原始規格:games/JSG11-bowling/ui-animation.md(v0.5,2026-05-19:瞄準箭頭節奏撤回 v0.4 的雙段串接,改回「來回擺動,端點慢中間快」— 保留 v0.4 的「左右各 45° / 6 秒」;沿用 v0.3 手機點擊 + 大廳動畫 + 彈窗使用場景對照;藍牙已連線 / 教學頁 2 / 教學頁 3 不在動畫規格範圍;載入畫面不做動畫)| 同步引用點:mechanics.md §階段 2 | tech-spec.md §2 瞄準箭頭控制器 | feature-checklist.md BW-003/090/091 + §11 BW-171~183 | ui-layout.md §3.2/3.3

⚙️ 開發規格

演算法層沿用 · 含遊戲規則全部重做 · 企劃流程圖為主 · 3 張 Excel 表
演算法 ✅ 沿用 Andros 既有
遊戲規則 / 程式 / UI ❌ 全部重做
Excel 資料表 ✅ 保留 3 張
本頁定位 給 RD 看企劃流程與資料結構,實作細節自決

1程式重做範圍兔子/Jason

除演算法層外全部重做(包含遊戲規則)。本企劃書 dev panel 採「企劃流程圖 + 資料結構」導向,code 細節由 RD 自決。

保留 vs 重做邊界

✅ 演算法層 — 唯一保留

  • JPlayCurlingAlgorithm(手環 IMU → 手腕動作判讀)
  • DetectRotate(Roll 角度 → Direction)
  • PushCurling(揮臂力道計算)
  • OnPush / OnRotate / OnConfirm / OnReadjust 事件介面
  • Andros 5/15 v1 演算法交付仍有效
  • 角加速度 → forward 軸 ω(新增)

✅ Excel 資料表 — 保留

  • JSG11Bowling_LevelSetting
  • JSG11Bowling_PinSetting
  • JSG11Bowling_MechanismSetting
  • 結構參考 JSG9Curling / JSG08Golf 既有資料表
  • 詳見 §7 Excel 表

❌ 其他全部重做(含遊戲規則)

  • 遊戲規則邏輯(計分判定 / Strike 判定 / 挑戰追蹤 / 闖關解鎖)
  • 機關互動邏輯(風 / 黑洞 / 地雷 + 物理表現)
  • 主控架構 GameCore / Manager / System
  • 藍芽事件分派器(事件名沿用、實作重寫)
  • Camera Manager + 鏡頭控制
  • InteractiveObjects 球瓶物件管理
  • Game UI Component(HUD / 結算 / 暫停)
  • VFX / Audio / TimeLine 控制
  • 大廳 / 解鎖 / 任務系統 / 影片播放器

事件介面(演算法層保留設計)

事件 / API狀態JSG11 用途
DetectRotate(roll, gyro)✅ 沿用階段 1 站位 X 映射
OnRotate✅ 沿用左右旋轉事件
OnConfirm✅ 沿用手放下 → 鎖站位
OnReadjust✅ 沿用手往上抬 → 回階段 1
PushCurling✅ 沿用揮臂力道計算
OnPush(forcePercentage)✅ 沿用球出手觸發
角加速度 → forward ω⭐ 新增旋轉球路(冪函數 ^1.55,直球判定閥值 0.2)
📁 冰壺骨架位置(不沿用,僅供 RD 必要時參考玩法行為)
// Unity 路徑 — 不沿用 code,僅作設計思路對照
Unity/Assets/Hotfix/Module/UI/JSG/JSG_Curling/Battle/
  ├─ Game/         // ❌ 重做
  ├─ Component/    // ❌ 重做
  └─ System/       // ❌ 重做

Unity/Assets/Hotfix/Entity/DeviceData/Curling/
  └─ JPlayCurlingAlgorithm.cs  // ✅ 沿用(演算法層)

Unity/Assets/Hotfix/MonoBehaviour/JSG_Curling/Scripts/
  └─ Camera / VFX / Audio / TimeLine 控制  // ❌ 全部重做

Excel/JSG/JSG9CurlingSetting.xlsx
  └─ 結構參考(極簡雙 sheet)  // JSG11 改 3 張表

2投擲技術流程 Andros/兔子

演算法層沿用 Andros 既有 input pipeline + 新增階段 2 箭頭自走擺動。UI 層全部重做。

階段 1 — 站位選擇(手腕垂直 + 旋轉)
手環 IMU
Roll / Pitch / Gyro / AccelΩ
→
DetectRotate
Roll → Direction
→
SetObjectPosition
站位 X 累加
→
OnConfirm?
→
AimingArrow
DOTween 自走
階段 2 — 推球與球路(揮臂釋出 → Unity 物理)
OnPush
擷取 forcePercentage
→
擷取箭頭角度
→ forward 向量
→
讀手環角加速度
→ 旋轉量
→
AddForce + ω
球體 Rigidbody
→
球路
Unity 物理

關鍵 API 對應

// === 演算法層 ✅ 沿用 Andros 既有 ===

// 階段 1 — 旋手腕選位
DetectRotate(roll, gyro)  // Andros 演算法:roll < -45° = Left, > +20° = Right; multiplier 0/1/2

// 階段 1→2 — 手放下鎖站位
OnConfirm()  // Andros 演算法:Pitch < 0 + Gyro.z < -50000 → 觸發

// 階段 2 — 揮臂推出
PushCurling(forcePercentage)  // Andros 演算法:揮臂偵測 + 力道計算
OnPush(forcePercentage)  // 觸發瞬間 → freeze 箭頭定格 → 擷取當下角度

// (可選)重選
OnReadjust()  // Andros 演算法:Pitch > 0 + Gyro.z > +50000 → 回階段 1


// === UI / 渲染層 ❌ 全部重做(JSG11 自寫)===

// 階段 1 站位 UI(不沿用冰壺 SetObjectPosition,自寫)
JSG11_StancePositionUI.UpdateX(direction × moveDistance)  // 累加 X 位置 + 自訂上下限

// 階段 2 瞄準箭頭自走(自寫)
JSG11_AimingArrowController.StartSwing()  // DOTween 連續擺動,無鎖定動作
// 取代冰壺 SetObjectRotation() 的「手腕主動轉角度」

3鏡頭流程 v1.3兔子

JSG11_CameraManager 全部重寫(不沿用冰壺 CameraManager)。v1.3 拍板(2026-05-27 DEC-JSG11-015):刪除原 v1.2 的 _pinAreaCamera 瓶區近景,改為「OnPush 鏡頭不動 → 球過截止線才 _traceCamera 跟球(無 zoom in)→ 字卡 → 黑畫面 fade 過場拉回投擲視角」。

球出手到下一球的鏡頭切換(v1.3)
OnPush 觸發
球出手
→
投擲視角不動
玩家看球往前飛
→
過截止線?
→
_traceCamera 跟球
無 zoom in
→
球停 + 字卡
鏡頭固定
→
黑畫面 fade
0.30s + 0.20s + 0.30s
→
投擲視角解封
下一球 PositionArrow
📐 截止線位置
球道 z 軸距離,由兔子在 Unity 場景配。預設約在球道 60~70% 處(讓玩家先看球往前飛的投擲視角,過線後 _traceCamera 接管看曲球軌跡 + 倒瓶)。
⚠️ 不沿用冰壺結算頂視角
保齡球單關 10 球連續,不需要每球切結算頂視角。冰壺 _overHeadCamera 流程整段移除。
🔄 v1.3 變更(2026-05-27 DEC-JSG11-015)
  • 刪除 _pinAreaCamera(瓶區近景 zoom in 鏡頭)
  • OnPush 鏡頭不動(改為球過截止線才開始 _traceCamera 跟球)
  • 新增黑畫面 fade 過場(字卡退場 → 純黑 0.30s + 0.20s + 0.30s → 鏡頭悄悄拉回投擲視角)

4旋轉球路演算法Andros

手環角加速度 → 球體 forward 軸 angularVelocity 的連續映射。Andros 在演算法 code 內調,不另開 Excel 表。以下為 2.4 正式專案 JPlayBowlingAlgorithm.cs 實作值(2026-08-05 回填)。

// JPlayBowlingAlgorithm.cs(2.4 正式專案)
// 投擲取樣結束後執行

private const int CURVE_MIN_THRESHOLD = 200000;
private const int CURVE_MAX_THRESHOLD = 1100000;

// 1. 旋轉量映射:GyroX 擺幅 → 0~1 的 curvePower(冪函數,非線性)
private float CurvePower(float currentValue, float exponent = 1.55f) {
    float range = CURVE_MAX_THRESHOLD - CURVE_MIN_THRESHOLD;
    float linearPercentage = (currentValue - CURVE_MIN_THRESHOLD) / range;
    float clamped = Mathf.Clamp01(linearPercentage);

    // 死區:線性比例 < 0.1 直接視為無旋轉(≒ 擺幅 < 290,000)
    if (linearPercentage < 0.1f) return 0f;

    return Mathf.Pow(clamped, exponent);   // exponent 越大,前半段越平緩
}

// 2. 直球 / 曲球判定
float rangeRX     = Mathf.Abs(valXMax - valXMin);   // GyroX 擺幅
float curvePower  = CurvePower(rangeRX);

if (Math.Abs(curvePower) < 0.2) {           // ⭐ 閥值 0.05 → 0.2(原值太低,丟不出直球)
    OnPushBowling?.Invoke(forcePercentage, 0);   // 直球:旋轉量送 0
}
else if (isLeftCurve)  OnPushBowling?.Invoke(forcePercentage,  curvePower);
else if (isRightCurve) OnPushBowling?.Invoke(forcePercentage, -curvePower);
else                   OnPushBowling?.Invoke(forcePercentage, 0);

// 左旋:valXMax < 0 || (valXMax < 200000 && valXMin < -200000)
// 右旋:valXMax > 250000 && (valYMax < 0 || valYMax > 250000)
// → 客戶端接 OnPushBowling(force, spin) 套到球體 forward 軸 angularVelocity

設計原則

  • 連續映射,非隨機抽選
  • 無離散等級(不是 5 種球路)
  • 無 UI 提示(玩家從球行為學)
  • 不扭手腕 → ω ≈ 0 → 球直走
  • 扭得越大 → ω 越大 → 軌跡彎得越多
  • 低於閥值一律當直球(旋轉量送 0)

收斂狀態

  • ✅ 映射曲線 — 冪函數 ^1.55
  • ✅ 不靈敏區 — 擺幅 < 290,000 無旋轉
  • ✅ 直球判定閥值 — 0.05 → 0.2(原值太低丟不出直球)
  • ⬜ 上限值(避免暴衝)仍待定 — BW-011
  • QC 必測:「靜止手腕投擲走直線」

5計分流程圖 Jason

計分規則重新撰寫。本段為企劃流程,RD 依此實作(Component 名稱與切分自決)。

單球計分判定流程
球停止
該球結算觸發
→
統計倒下瓶
只算正規瓶
→
正規瓶
全倒?
→
Yes →
Strike
+15 分(10+5)
No →
Open
倒幾瓶 = 幾分

判定規則

結果條件得分關鍵規則
Open正規瓶沒倒完倒幾瓶 = 幾分—
Strike正規瓶全倒15(10+5)只看正規瓶,地雷彈飛瓶也算倒下
挑戰binary 達成+10~+50(各關遞增)計入過關門檻
⚠️ 重要判定細節
  • Strike 判定只看正規瓶:障礙瓶 / 地雷彈飛瓶倒下不影響邏輯
  • Stage 4 地雷彈飛瓶算倒下:仍可 Strike,但挑戰失敗(限制違規 → 失去 +40)
  • 無 Spare
  • 無連擊獎勵(連續 Strike 各自 +5,不額外加碼)
  • 強制 10 球(提前達標也要打完)
全關計分流程(10 球 + 挑戰加分)
第 10 球結束
所有球停止
→
累加 10 球分數
Open + Strike
→
挑戰達成?
→
+N 加分
+10~+50 各關
→
≥ 門檻?
→
PASS
解鎖下一關
📐 滿分 / 門檻計算
基礎滿分 = 10 球 × (正規瓶 + 5) = 150 · 挑戰加分 +10/+20/+30/+40/+50(各關遞增) · 門檻 24/48/68/88/96(ScoreThresholdForNormal)

6三機關互動流程 兔子/Jason

三機關位置固定,由 Unity 場景的 SceneObjectManager 依關卡的 SceneObjectID 開關對應物件。參數目前寫死在程式裡(風場推力 8 / 黑洞吸力 50 / 地雷爆炸推力 400,皆在 BowlingObjectCollisionMonoCompoment)— MechanismSetting Excel 表依 2026-05-15 決議未交付,因為單一強度直接改程式比改表快。本段為企劃流程,RD 依此實作。

v1.6 規劃:機關位置改為開局隨機、整局固定(候選位置與物理約束見 §5 機關座標參考,功能項見功能表 §15 BW-221~226)。
2026-08-03 拍板分工:企劃端只出座標,企劃表怎麼擴增由 RD 自行規劃。22 組候選座標已完整列在 §5,要進 BowlingStageSetting 加欄位、另開一張表、還是先寫死在程式等實測定案,都由實際要讀它的人決定 — 企劃端不預先替 RD 定義資料層 schema。(前例:2026-05 企劃端自行設計的 3 張表最終一張都沒被採用,見 §7。)
已排入甘特圖開發組 r201,負責人與時程由開發二組自行認領。

🕳️ Stage 3 黑洞

黑洞互動流程
球接近
黑洞
距離 < r
→
依距離曲線
拉向中心
TrapValue[0/1]
→
被吸入?
→ Yes
該球作廢
0 分
→
挑戰失敗
失去 +30
規則要點:不影響球瓶(瓶子不會被吸);被吸入該球 0 分;位置固定每次同位(v1.x 現況)。

💣 Stage 4 地雷

地雷互動流程
球觸發
地雷
範圍偵測
→
已引爆?
→ No
引爆 + 標記
一次性
→
爆炸力
炸飛正規瓶
TrapValue[0/1]
→
正規瓶
全倒?
→ Yes
Strike +15
但挑戰失敗
規則要點:地雷彈飛瓶算正規倒下,仍可 Strike;但觸發地雷 = 挑戰失敗(失去 +40);地雷一次性消耗(觸發後該球不再生效,下一球復原);位置固定每次同位(v1.x 現況)。

💨 Stage 5 風吹

風場互動流程
球進入
風場區域
範圍偵測
→
讀取風向 + 強度
TrapValue[0/1]
→
球速度
加側向分量
物理推球
→
球進溝?
→ Yes
挑戰失敗
失去 +50
規則要點:玩家可主動曲球抗風 / 順風;不影響球瓶位置;位置固定每次同位(v1.x 現況,v1.6 提案改開局隨機)。

挑戰任務追蹤

Stage挑戰判定方式失敗時機
13 次 Strike結算統計結算時 Strike < 3
2不擊倒障礙瓶即時失敗任一障礙瓶倒下
3不要碰到黑洞即時失敗任一球被吸
4不要碰到地雷即時失敗任一球引爆
5不洗溝即時失敗任一球進溝

7企劃表 — 以 RD 實裝為準 RD

2026-08-03 對照 Client repo 後全面改寫。RD 實際只維護一張 BowlingStageSetting(Jacfitness_Client/Excel/JSGBowlingSetting.xlsx,2.4 分支,最後更新 2026-07-28)。企劃端當初提的 3 張表從未交付,本節以 RD 那張為準。

⚠️ 2026-08-03 修正
本節舊版寫「Excel 表(3 張)· 來源 Jacfitness_Client/Excel/JSG/」,但來源那邊只有一張表。舊版列出的 LevelSetting / PinSetting / MechanismSetting 是 2026-05 的企劃提案稿,其中 MechanismSetting 已於 2026-05-15 決議不交付,另外兩張也一直沒進 RD 的 Excel。舊提案的三筆機關係數與程式實際值全部不符(風 5.0↔10、黑洞 20.0+反平方曲線↔固定力 50、地雷 15.0↔400),且「曲線類型」「是否連鎖」這兩個欄位語意在程式裡不存在。舊內容移到本節最後的摺疊區保留脈絡。
📥
JSGBowlingSetting.xlsx
RD 實際使用的檔案 · 單一工作表 BowlingStageSetting · 來源:Jacfitness_Client/Excel/
下載 Excel

📊 BowlingStageSetting — 13 欄

欄中文欄名欄位名型別說明
C(校對用流水號)_idint關卡編號。0=教學關、1~5=五關
D#註解——程式不讀,給人看的
E場景名稱SceneNamestring六列都是 scenejsgbowling
F背景音樂MusicIdsint[]六列都是 232
G一般模式過關分數門檻ScoreThresholdForNormalint0 / 24 / 48 / 68 / 88 / 0
H機關IDSceneObjectIDint指向 Unity 場景物件,不是機關表。−1 無/1 障礙瓶/2 風/3 黑洞/4 地雷
I挑戰任務ChallengeMissionint只有 3 種:0 Strike 次數/1 碰到機關/2 洗溝
J挑戰任務條件ChallengeConditionint0 大於/1 小於
K挑戰任務條件次數ChallengeMissionCountint與 J 合用,見下方說明
L挑戰任務條件分數ChallengeMissionPointint挑戰加分 10 / 20 / 30 / 40 / 50
M過關解鎖關卡UnlockLevelint[]−1 = 不解鎖下一關
N關卡 scroller 內容多國StageScrollerContentlong57001~57005
O遊戲中 UI 任務內容多國UIBattleMissionContentlong57006~57010

六列實際資料

_id關卡門檻機關ID挑戰任務條件次數加分解鎖多國 ID
0教學0−1———0−1—
1標準24−10 Strike0 大於210257001 / 57006
2障礙物481 障礙瓶1 碰機關1 小於120357002 / 57007
3風吹682 風2 洗溝1 小於130457003 / 57008
4黑洞883 黑洞1 碰機關1 小於140557004 / 57009
5地雷04 地雷1 碰機關1 小於150−157005 / 57010
挑戰條件怎麼讀:條件與次數要合起來看。Stage 1 是「Strike 次數大於 2」= 3 次以上,跟企劃書寫的「3 次 Strike」一致(表上填 2 不是 3)。Stage 2~5 是「碰機關/洗溝次數小於 1」= 一次都不能碰。

企劃提案 → RD 實裝 逐欄對照

企劃當初提的RD 實際的差在哪
LevelTypeId(0 教學 / 1 一般)沒有這欄教學關直接用 _id=0 那一列表示,不另設類別欄
PinComposition(瓶種組成陣列)沒有這欄瓶陣寫死在程式 SpawnPins():固定 10 顆正規三角陣。障礙瓶是場景物件
MechanismIds int[]SceneObjectID int從「機關表 ID 陣列」變成「場景物件單一 ID」→ 一關只能有一種機關
UnlockNextLevelScoreScoreThresholdForNormal只是改名
UnlockNextLevelID intUnlockLevel int[]改名+改成陣列
ChallengeType(6 種:無/Strike/不碰障礙瓶/不洗溝/不碰黑洞/不碰地雷)ChallengeMission(3 種:Strike 次數/碰到機關/洗溝)RD 的設計更簡潔:黑洞、地雷、障礙瓶統一成「碰到機關」,因為 SceneObjectID 已經決定這關是哪種機關,不必再分
ChallengeThreshold(單一門檻值)ChallengeMissionCount + ChallengeCondition拆成「次數+大於/小於」兩欄,比單一門檻靈活
(企劃表沒有)SceneName/MusicIds/ChallengeMissionPoint/兩組多國 IDRD 多出來的:場景、BGM、挑戰加分、關卡卡片與 HUD 任務文字的多國 ID

🔧 不在表裡、寫在程式的東西

以下都不能靠改 Excel 調整,TM 要動這些數值必須發需求給 RD 改程式或改 Unity 場景。

項目目前的值位置
風場推力8(ForceMode.Force,持續施加)BowlingObjectCollisionMonoCompoment.c_windZoneForce
黑洞吸力50(固定值向心力,不是衰減曲線)_blackHoleDrawFroce
地雷爆炸推力400(ForceMode.Impulse)_minsExplodeFroce,可用 debug 指令 SMP 即時調
機關位置與作用半徑見 §5Unity 場景 SceneObjectManager
球瓶陣列10 顆、間距 0.3、4 排BowlingBattleLogicCompoment.SpawnPins()
障礙瓶數量1 顆Unity 場景物件 ObstaclepPinPin01
球速上限8 m/sJSGBowlingPlayerComponent.ConstMaxBallLaunchSpeed
站位可移動範圍±0.5 m_constGroundHalfWidth
每關球數10 球_const_OneGameRound

📦 歷史提案:3 張表的原始設計(未交付,僅存脈絡)

以下內容已不是現況。這是 2026-05 企劃端提的 3 張表設計,RD 從未採用;其中的機關係數(風 5.0/黑洞 20.0 反平方/地雷 15.0 連鎖)與程式實際值不符,請勿照著實作。保留是為了追溯當初為什麼這樣設計。

下方摺疊區為當年提案的逐欄白話說明,內容停在 2026-05,僅供追溯。

🟢 通用結構 — 每張表前 6 列是什麼?

這是 Jacfit Server 端的 Excel 規範格式(JSG09/JSG10 都同一套):

列內容給誰看
Row 1AppType.ClientH / AppType.LobbyServer tag — 這張表餵給哪個 App
Row 3中文欄位名(關卡編號…)TM / 企劃
Row 4英文欄位名(_id…)RD 程式對應
Row 5資料型別(int / long / double / int[])限制能填什麼
Row 6列舉值說明(1=Regular 2=Obstacle…)共同對照
Row 7+真正的資料程式會讀

注意:改表時只能改 Row 7 起的資料列,前 6 列是規範不能動。

📊 Sheet 1 · LevelSetting — 9 欄逐欄解釋
欄位意義目前值
關卡編號
_id
關卡唯一 ID。0 = 教學關、1~5 = Stage 1~50~5
#註解程式不會讀,純備註欄。給人看的關卡說明「Stage 1 標準」…
關卡類別
LevelTypeId
0 = 教學、1 = 一般。Client 判斷要不要走教學流程教學=0、其他=1
瓶種組成
PinComposition
用 PinSetting._id 組成的陣列,列出場上要擺哪些瓶。一個數字 = 一顆瓶Stage 1:1,1,1,1,1,1,1,1,1,1
Stage 2:1×10, 2(v1.x 實際未使用,障礙瓶走場景物件)
機關ID
MechanismIds
指定這關套哪些機關,0 = 無機關Stage 3=1(風)
Stage 4=2(黑洞)
Stage 5=3(地雷)
解鎖下關分數
UnlockNextLevelScore
拿到幾分才能解鎖下一關。-1 = 最後一關24 / 48 / 68 / 88 / 96(各關遞增)
Stage 5 = -1
解鎖關卡ID
UnlockNextLevelID
達標後解鎖的下一關 _id1→2→3→4→5
挑戰類型
ChallengeType
0 無 / 1 StrikeCount / 2 NoObstaclePin / 3 NoGutter / 4 NoBlackHole / 5 NoLandmine對應 levels.md 每關「+N 加分條件」
挑戰門檻值
ChallengeThreshold
配合挑戰類型用的數值。例:Stage 1「3 次 Strike」→ 3Stage 1=3、其餘=0

💡 影片不入此表:機關規則影片改用 Unity 素材直接嵌入,併入教學頁(ui-layout §2.5)一起做 — 教學頁本來就有翻頁 UI,多加 N 頁機關介紹直接放影片,不需要 Excel schema 也不需要 RD 寫條件分支。

📊 Sheet 2 · PinSetting — 5 欄逐欄解釋
欄位意義目前值
瓶種編號
_id
給 LevelSetting.PinComposition 對照用1(正規)、2(障礙)
#註解程式不讀,備註用「正規瓶」「障礙瓶(跟正規瓶一起重置)」
瓶類型
PinType
1 = Regular(正規瓶)
2 = Obstacle(障礙瓶)
1、2
分數
Score
倒下一顆得幾分正規=1
障礙=0(碰倒不給分、反而挑戰失敗)
重量
Mass
物理引擎參數(kg),影響碰撞反應正規=1.6
障礙=2.0(重一點、難倒)

💡 Strike 判定不在這張表:「該球倒完所有正規瓶」算 Strike,跟障礙瓶無關 — 這個邏輯寫在程式裡(雙保險)。

📊 Sheet 3 · MechanismSetting — TrapValue 陣列詳解
欄位意義目前值
機關編號
_id
給 LevelSetting.MechanismIds 對照用1、2、3
#註解這欄很重要 — 把 TrapValue 陣列每個位置的意義寫明白詳下表
機關類型
MechanismType
1=Wind / 2=BlackHole / 3=Landmine1、2、3
機關係數
TrapValue
double[] 陣列,意義依機關類型而不同(省欄位的設計)詳下表

TrapValue 陣列詳解(同欄位、不同機關意義不同):

機關TrapValue第 1 個值第 2 個值
風 Wind5.0, 0.0強度 = 5.0週期秒 = 0.0 → 0 表「固定風」
黑洞 BlackHole20.0, 1.0峰值力 = 20.0曲線類型 = 1(反平方衰減)
地雷 Landmine15.0, 1.0爆炸 impulse = 15.0是否連鎖 = 1(會連環爆)

📐 陣列數值的物理意義(玩家會感覺到什麼)

🌬 風 Wind = [強度, 週期秒]

  • 強度 5.0:球進風場時側向受力大小(Unity 物理單位 Newton)。數字越大球被吹得越歪 — 5.0 = 中等難度,玩家感覺得到但仍可用旋轉抗衡
  • 週期秒 0.0:風向變化的時間。0 = 固定不變方向(適合 v1.0 學習門檻);如果填 3.0 表示「每 3 秒換向一次」,難度大幅上升 — 留給 v1.x 微調用

🕳 黑洞 BlackHole = [峰值力, 曲線類型]

  • 峰值力 20.0:在黑洞中心點時的最大吸引力(球被吸入的力道)— 比風強很多,因為要做到「離夠近就直接被吃掉」的爽快感
  • 曲線類型 1:吸引力隨距離衰減的數學模型。0 = 線性衰減(離越遠等比例變弱);1 = 反平方衰減(離 2 倍距離吸力只剩 1/4)— 用 1 比較符合真實物理黑洞,且讓玩家「貼著邊緣繞」變成可行策略

💣 地雷 Landmine = [爆炸 impulse, 是否連鎖]

  • 爆炸 impulse 15.0:被踩到時瞬間推力(Newton·sec)。比黑洞小,因為地雷是「踩到就炸」一次性事件,不需要持續吸力
  • 是否連鎖 1:0 = 單顆爆,1 = 炸到的範圍會引爆隔壁地雷形成連環爆 — 1 視覺效果爽,但對玩家挑戰失敗判定更嚴格(一踩全爆,沒救)

💡 為什麼用陣列不分欄位?
仿 JSG08 高爾夫 SceneObject.TrapValue 設計;不同機關需要的參數數量不同,陣列彈性最高(未來新增「移動牆」可能需要 3~4 個參數,陣列直接擴充不用改 schema)。代價是必須靠 #註解 欄寫清楚每個位置的意義,否則沒人看得懂陣列裡的數字代表什麼。

📋 完整功能表

227 項 · 16 模組 · 同步 Google Sheet
同步目標 1STspfoH-H76...
Tab JSG11-bowling
狀態圖示 ⬜ 未開始 / 🟡 開發中 / 🟢 已完成 / 🔵 測試中 / ✅ 驗收通過 / ❌ 阻塞
227
總項目
16
模組
46
⬜ 未開始
0
🟡 開發中
1
✅ 驗收通過
📌 拆行原則
每項只記 1 個原子功能。狀態欄由 RD / QC 在 Google Sheet 上填,再 sync 回 KB SSoT (feature-checklist.md) → HTML 自動同步生成。
1. 投擲系統(Andros 動作演算法 row 117 + 兔子 功能製作 row 118) (24 項)
#模組功能負責狀態備註
BW-001投擲基礎階段 1 — 手腕 Roll 偵測 → 球道 X 站位映射Andros🟢沿用冰壺 DetectRotate + OnRotate + SetObjectPosition。站位上下限參考冰壺 _constLimitPositionX
BW-002投擲基礎階段 1→2 — 手放下確認(OnConfirm 鎖定站位)Andros🟢沿用冰壺 OnConfirm(Pitch<0 + Gyro.z<-50000)
BW-003投擲基礎階段 2 — 瞄準箭頭自動擺動(DOTween 連續擺動,無鎖定動作;±7.5°(總共 15°)/ 8s 週期 InOutSine Yoyo,端點慢、中間快)兔子🟢v1.2 新增。取代冰壺 SetObjectRotation();擺動參數實機調校後定案(±7.5°/8s 週期)
BW-004投擲基礎階段 2 — 揮臂力道計算Andros🟢沿用冰壺 PushCurling + G_Sensor / Gyro_Sensor 邏輯
BW-005投擲基礎階段 2 — 推出瞬間擷取箭頭角度為球初始 forward 向量兔子🟢OnPush 觸發時鎖定 AimingArrow 當下角度
BW-006投擲基礎重選 — 手往上抬觸發 OnReadjust 回到階段 1(可選)Andros🟢沿用冰壺 OnReadjust(Pitch>0 + Gyro.z>+50000)— 依 UX 決定是否開放
BW-007旋轉球路手環角加速度讀取Andros🟢input source 已確認 5/11
BW-008旋轉球路接收手環旋轉輸入Andros🟢白話:手腕扭動偵測
BW-009旋轉球路手腕轉動量 → 球旋轉量(對應曲線)Andros🟢曲線已定:冪函數 ^1.55,輸入為 GyroX 擺幅(`\
BW-010旋轉球路手腕未扭 → 球走直線(不靈敏區)Andros🟢兩層門檻:① 演算法內死區 GyroX 擺幅 < 290000 一律無旋轉 ② 直球判定閥值 0.05 → 0.2(原值太低,玩家丟不出直球)。QC 必測「靜止手腕→直線」
BW-011旋轉球路球旋轉速度上限(避免暴衝)兔子🟢—
BW-012投擲功能球瓶倒下判定 — 角度閾值Jason🟢—
BW-013投擲功能球瓶倒下判定 — 旋轉速度閾值Jason🟢—
BW-014投擲功能球旋轉控制元件實裝兔子🟢5/18 接 Andros v1
BW-015投擲功能球的直線基礎軌跡兔子🟢—
BW-016投擲功能球速強制覆寫(防止橫向位移殘留)兔子🟢—
BW-017投擲功能球的旋轉量影響球路彎曲程度兔子🟢—
BW-018投擲功能球出手特效 trigger兔子🟢對接綠豆 VFX
BW-019投擲功能強制 10 球流程兔子🟢提前達標也要打完
BW-020投擲功能球的回吐機制(重置板上下移動)兔子🟢不抓球,內部重置;重置板下拉即 BW-088 的閘門動畫(同一物件),字卡演出前觸發
BW-021鏡頭球出手 → 投擲視角不動(玩家視角看球往前飛,v1.3 變更:不立即跟球)兔子🟢5/27 拍板(v1.3):OnPush 後鏡頭停在投擲視角,等球過截止線才切
BW-022鏡頭過截止線 → _traceCamera 開始跟球(無 zoom in,無瓶區近景)兔子🟢5/27 改寫(v1.3):原瓶區近景鏡頭(PinAreaCamera)刪除;沿用冰壺 TraceCameraChangeOverHeadCamera 切換機制但目標改 _traceCamera(無 zoom in)
BW-023鏡頭倒瓶結束 / 球停下 → 字卡演出 → 黑畫面 fade 過場拉回投擲視角 → 選位置 HUD 顯示解封(僅非最後一球)兔子🟢v1.3+v1.4(5/28):純黑 fade in 0.30s+黑停留 0.20s+fade out 0.30s。v1.4 補:最後一球(Finish 後)不走黑畫面,直接切結算(見 BW-089)
BW-024鏡頭追球停止線 — _traceCamera 跟球至設定 Z 軸位置時停止追球(鏡頭停留,球繼續滾入結算判定)兔子🟢5/28 會議新增(v1.4):補對 BW-022「開始跟球線」缺對應的「停止跟球線」
2. 計分系統(row 119 Jason) (14 項)
#模組功能負責狀態備註
BW-025基礎計分Open 計分(倒幾瓶 = 幾分)Jason🟢—
BW-026基礎計分Strike 計分(15 分 = 10 + 5)Jason🟢—
BW-027基礎計分Strike 判定 — 僅以正規瓶為準Jason🟢—
BW-028基礎計分Strike 判定 — 排除障礙瓶Jason🟢Stage 2 障礙瓶倒下不影響
BW-029基礎計分Strike 判定 — 排除地雷彈飛瓶Jason🟢Stage 4 地雷彈飛仍算 Strike 但挑戰失敗(2026-09-01 重排前為 Stage 5)
BW-030基礎計分UI 顯示絕對分數(不顯示百分比)兔子🟢—
BW-031挑戰任務Stage 1 挑戰 — 3 次 Strike(結算統計)Jason🟢—
BW-032挑戰任務Stage 2 挑戰 — 不擊倒障礙瓶(即時失敗)Jason🟢—
BW-033挑戰任務Stage 5 挑戰 — 不洗溝(即時失敗)Jason🟢2026-09-01 重排:原 Stage 3,加分改 +50
BW-034挑戰任務Stage 3 挑戰 — 不要碰到黑洞(即時失敗)Jason🟢2026-09-01 重排:原 Stage 4,加分改 +30
BW-035挑戰任務Stage 4 挑戰 — 不要碰到地雷(即時失敗)Jason🟢2026-09-01 重排:原 Stage 5,加分改 +40
BW-036挑戰任務ChallengeTracker — 即時失敗 APIJason🟢—
BW-037挑戰任務ChallengeTracker — 結算判定 APIJason🟢—
BW-038失敗處理限制違規 → 改加分制(違規不扣分,失去該關挑戰加分 +10~+50 各關遞增)Jason🟢—
3. 5 關設計(2026-09-01 重排:黑洞 → Stage 3、地雷 → Stage 4、風吹 → Stage 5) (13 項)
#模組功能負責狀態備註
BW-039Stage 1 標準10 正規三角陣配置Jason🟢—
BW-040Stage 1 標準挑戰任務:3 次 StrikeJason🟢—
BW-041Stage 2 障礙物障礙瓶 × 1 佈局(球道中段 z −6.756)Jason🟢—
BW-042Stage 2 障礙物障礙瓶倒下跟正規瓶一起重置邏輯Jason🟢—
BW-043Stage 2 障礙物挑戰任務:不擊倒障礙瓶Jason🟢—
BW-044Stage 5 風吹風場機關(位置固定)兔子🟢—
BW-045Stage 5 風吹挑戰任務:不洗溝兔子🟢—
BW-046Stage 3 黑洞黑洞機關(位置固定)Jason🟢—
BW-047Stage 3 黑洞挑戰任務:不要碰到黑洞Jason🟢—
BW-048Stage 4 地雷地雷機關(位置固定)Jason🟢—
BW-049Stage 4 地雷地雷彈飛瓶物理Jason🟢—
BW-050Stage 4 地雷挑戰任務:不要碰到地雷Jason🟢—
BW-051闖關系統關卡解鎖機制(過各關門檻 24/48/68/88/96 → 下一關開放,未過 → 回大廳,玩家自由重選)兔子🟢—
4. UI - Lobby(亞哈視覺 v2.2 r137~138 + Jason 程式 v2.2 r139) (24 項)
#模組功能負責狀態備註
BW-052主選單點擊開始按鈕亞哈 / Jason🟢原 PLAY 按鈕
BW-053主選單教學按鈕亞哈 / Jason🟢—
BW-054主選單紀錄按鈕(v0.11 改名,原排行按鈕)亞哈 / Jason🟢—
BW-055主選單主視覺背景(環型/弧型)亞哈 / Jason🟢5/10 美術會決議
BW-056主選單Btn_BackToJacfitness — 右上 home icon,返回 Jacfitness App 大廳亞哈 / Jason🟢v0.9 新增;對齊 JSG10 網球主選單樣式
BW-057模式選擇單人模式按鈕(點擊 → 接關卡選擇 → 進入遊戲)亞哈 / Jason🟢v0.11:雙人模式按鈕亦放在模式選擇,UI 上線 / RD 功能延後 v1.x(見下方雙人模式條目)
BW-058模式選擇教學關卡按鈕 + 首次強制 / 解鎖邏輯(未進過教學關卡前,模式選擇只能選教學;進入教學關卡後無論是否過關即解鎖單人模式)亞哈 / Jason🟢獨立教學關卡視為一個模式入口,沿用 JSG09/JSG10 互動式教學關卡精神
BW-059模式選擇雙人模式按鈕(lock 樣式 — UI v1.0 上線 / RD 功能延後 v1.x)亞哈 / Jason🟢v0.11 新增;v0.16 拿掉 hint 文字,僅靠 lock badge 圖示表達鎖定狀態
BW-060關卡選擇5 卡片橫排佈局亞哈 / Jason🟢—
BW-061關卡選擇卡片狀態 — 已過關亞哈 / Jason🟢—
BW-062關卡選擇卡片狀態 — 鎖定亞哈 / Jason🟢v0.15.1 拆界:Card/Stage 已縮為 2 態(Unlocked / Current),Locked variant 移除(純底卡與 Unlocked 重複);鎖定樣式由 Unlocked instance+黑 50% dim rect+Badge/Lock instance 在 frame 內拼裝
BW-063關卡選擇卡片內容 — 機關 icon亞哈 / Jason🟢6/5 取消:卡片上的機關 icon 移除,Badge/Mechanism component(5 型)整組刪除(Figma+雲端 Drive+Unity bundle);機關呈現改走遊戲內 3D 模型/VFX,UI 卡片不再疊機關 icon
BW-064關卡選擇卡片內容 — 挑戰達成標記亞哈 / Jason❌v0.15.1 拆界:Card/Stage master 不含金星,由 Badge/ChallengeAchieved instance 疊在已通關卡片右上。7/7 拍板砍掉:玩法測試回饋星號易誤認為關卡難易度標示,移除 Stage frame 內兩個 Badge/ChallengeAchieved instance(15727:8 隱藏殘留/15727:20 第二關可見),BW 編號保留不重排
BW-065關卡選擇下一關解鎖分數標籤 — 右上獨立顯示「下一關解鎖分數 96 分」亞哈 / Jason🟢v0.11 由卡片內提示改為右上獨立常駐標籤
BW-066關卡選擇「確認」按鈕 — 當玩家選擇某一關時,確認按鈕才會出現(條件式顯示,未選關時隱藏)亞哈 / Jason🟢v0.15 改條件式出現
BW-067關卡選擇卡片選擇框 — 玩家點選某張關卡卡片時顯示選中狀態(選中視覺反饋,配合 BW-067 確認按鈕出現流程)亞哈 / Jason🟢v0.15 新增
BW-068教學頁Tutorial_01_SelectPosition — 動作教學頁 1「選擇位置」(手腕貼地左右轉動選球道站位)亞哈 / Jason🟢v0.12 frame 改名,原「兩階段投擲」拆 3 頁
BW-069教學頁Tutorial_02_ThrowBall — 動作教學頁 2「丟出保齡球」(手放下確認位置 + 看角度揮臂推出)亞哈 / Jason🟢v0.12 frame 拆出,原合在 BW-068 內
BW-070教學頁Tutorial_03_CurveBall — 動作教學頁 3「曲球控制」(推球瞬間扭手腕,球路彎曲)亞哈 / Jason🟢v0.12 拆出第 3 頁(nodeId 15553:61);對齊 BW-009 旋轉球路
BW-071教學頁上一頁按鈕亞哈 / Jason🟢—
BW-072教學頁下一頁按鈕亞哈 / Jason🟢—
BW-073紀錄頁 (Record)紀錄頁完整功能 — 1P/2P tab 切換(2P 內容 RD v1.x 才實裝資料源) + 可滑動排行榜 + 玩家自己若在榜內,滑動時可看到自己的實際排行並以米色列區分 + 底部固定黃色自己的排行列(未上榜顯示「-」+ ID + 玩家歷史最高分)+ CP0 待決:各關獨立 vs 統一亞哈 / Jason🟢6/4 補充:Record/RankingRow 三態為 Default / CurrentUserInList(米)/ CurrentUser(黃);component 皆不含文字,排名/名稱/分數由 layout/程式注入。v0.15.1 移除「我的最高分」獨立顯示;外觀以 Figma 為準
BW-074藍牙連線藍牙連線完整功能 — 裝置列表(最多 5 個)+ 兩 frame 切換(Connet_Searching 未連線 / Connet_Connected 已連線)+ 偵測到目標裝置自動切態 + cyan highlight 選中裝置 + 連線狀態白字 / 紅字提示 + 連線成功指引(⚠️ 2026-08-21 平台級改字:多國 41019 由「請將裝置配戴於右手腕」改成「連線成功,輕敲裝置確認綠燈顯示」,41029 同步;照抓 41019 即可,見 _shared/bluetooth.md);連線成功後 Connet/StatusFrame 依裝置名稱前綴切換圖示(Jmate1 / Jmate2 / Jmotion)亞哈 / Jason🟢v0.15 由原 BW-076~080 合併。外觀(面板色/sticky tag/手環圖示 3 variant/LED 亮燈)以 Figma 為準:Connet/StatusFrame 4 variant(Jmate1 15899:302/Jmate2 15470:95/Jmotion 15899:305/Unconnected 15470:96)+Connet/DeviceList_bg+Btn/Device
BW-075藍牙連線繼續按鈕(連線成功後可點 → 進入下一步)亞哈 / Jason🟢功能項;外觀以 Figma 為準
5. UI - 戰鬥(亞哈視覺 v2.2 r137~138 + 兔子 程式 v2.2 r140) (26 項)
#模組功能負責狀態備註
BW-076進場Ready 字卡(單字 READY,無 3·2·1 倒數)— 每關只播 1 次(Loading 完場景 + BGM 起後),不是每球亞哈 / 兔子🟢v0.8 簡化;觸發時機 5/27 會議拍板補完
BW-077HUD當前分數(左上)亞哈 / 兔子🟢—
BW-078HUD過關門檻顯示亞哈 / 兔子🟢—
BW-079HUD球數計數(右上)亞哈 / 兔子🟢—
BW-080HUDStage 標記亞哈 / 兔子🟢—
BW-081挑戰面板面板視覺 3 態 — 進行中(顯示任務描述)/ 成功(☑ icon + 灰字)/ 失敗(紅槓 + 灰字)亞哈 / 兔子🟢5/27 修正:☑ icon 沿用 JSG05 棒球教學打勾風格;進行中=顯示任務描述文字本身
BW-082挑戰面板即時失敗型(Stage 2~5):違規條件達成當下瞬間演紅槓 DOTween 動畫 + 灰字(不震動 / 不配音)亞哈 / 兔子🟢5/27 改寫:適用 Stage 2 障礙瓶/Stage 3 黑洞/Stage 4 地雷/Stage 5 洗溝(2026-09-01 重排後);動畫參數詳企劃書
BW-083挑戰面板達標型即時成功(Stage 1 至少 3 strike):條件達成當下瞬間 → ☑ icon DOTween 彈出 + 灰字亞哈 / 兔子🟢5/27 修正:原「整關 10 球結算完+未違規才出」改為「累計 strike 達 3 的那一球結算完即出」
BW-084挑戰面板達標型補演 fail(Stage 1):第 10 球結束時若仍未達 3 strike → 結算前演紅槓 DOTween 動畫 + 灰字亞哈 / 兔子🟢5/27 新增:達標型挑戰特有的「結算前補演 fail」邏輯
BW-085結算字卡Card_ChallengeClear 字卡 — 所有挑戰達成的瞬間即出(不等第 10 球結算頁)亞哈, 綠豆 / 兔子🟢5/27 修正:原「結算頁觸發」改為「最後一條挑戰達成瞬間即出」。現只 1 挑戰=HUD ☑ 演出後立即;未來多挑戰=最後一條達成瞬間
BW-086操作 gatingOnPush 觸發瞬間 → 球停 → 字卡 → 黑畫面過場期間,手環輸入全部封鎖;選位置 HUD 顯示才解封兔子🟢5/27 新增:JSG11_BattleInputGate 統一 gate
BW-087過場演出字卡退場後 → 純黑 fade in 0.30s + 黑停留 0.20s(鏡頭悄悄拉回投擲視角)+ fade out 0.30s兔子🟢5/27 新增:方案 A 純黑,無球數提示或 Stage 編號。5/28 補:僅適用非最後一球,最後一球見 BW-089
BW-088結算 gating球停下後等 3 秒 → 閘門下拉動畫 → 字卡 + 分數 + 挑戰面板同步演出兔子🟢5/28 會議新增(v1.4):統一所有觸發路徑(碰判定點/進溝/Strike 即時/球低速判定);Animator 由飯茄(場景)確認
BW-089結算流程最後一球字卡序列 — Finish → 直接切結算頁(無黑畫面 fade)→ HighScore(破紀錄才出)→ NewStage(解鎖才出);結算頁進退場沿用 Lobby Modal 動畫設定(dim 0→0.6 / panel scale 0.85→1.0 OutBack)兔子🟢5/28 會議新增(v1.4):覆蓋原 BW-023+BW-087 在最後一球的黑畫面 fade;動畫參考 BW-178 Lobby Modal
BW-090投擲 UI瞄準箭頭自走擺動視覺(±7.5°(總共 15°)/ 8s 週期 InOutSine Yoyo,端點慢、中間快)亞哈 / 兔子🟢參數實機調校後定案(±7.5°/8s);動畫細節詳企劃書
BW-091單球字卡Strike 字卡(OutBack 進場 + punchScale 0.1;不加震屏 2026-05-18 拍板)— 若挑戰達標,後接 Challenge Clear 字卡(BW-085)亞哈 / 兔子🟢5/28 補(v1.4):補對播放順序「Strike → Challenge Clear」;動畫細節詳企劃書
BW-092LeaveGame 視窗LeaveGame 確認對話框視覺(白底圓角 Dialog/LeaveGame_bg + 文案「離開時分數不會記錄/確定回到開始畫面?」+ 否(紅)/ 是(綠)Btn/Common Yes/No + GameSceneBehind_dim)亞哈 / 兔子🟢v0.12 改名(原 UIJSG11_Battle_Pause)+文案改;沿用共用暫停視窗容器。⚠️ v2.7 起作廢 — 屆時改用公版三鈕暫停彈窗(BW-227/DEC-JSG11-057),本列規格只在 v2.7 改版前有效。5/20 拆界:Dialog/LeaveGame_bg master 內不含 Yes/No 按鈕,按鈕由 Btn/Common Yes/No instance 拼裝
BW-093LeaveGame 視窗否(紅)/ 繼續遊戲(恢復球次/分數/挑戰狀態)兔子🟢v0.12 改按鈕語意
BW-094LeaveGame 視窗是(綠)/ 回大廳(當局放棄,不計分)兔子🟢v0.12 改按鈕語意
BW-095結算頁Result header — gold 大字(不論過關 / 沒過均顯示 Result)亞哈 / 兔子🟢v0.8 取代 PASS 狀態文字
BW-096結算頁該關總分亞哈 / 兔子🟢—
BW-097結算頁總分顯示 N / 96(單一中央 Pnl_ResultDetail 內第 4 行)亞哈 / 兔子🟢v0.8 取代 PASS / 未過訊息
BW-098結算頁Strike 統計亞哈 / 兔子🟢—
BW-099結算頁Open 統計亞哈 / 兔子🟢—
BW-100結算頁挑戰結果(Clear +10 / Failed)— Pnl_ResultDetail 內第 3 行亞哈 / 兔子🟢v0.8 合併原 BW-093 達成徽章 + BW-094 失敗顯示
BW-101結算頁「繼續」按鈕 — 結算頁唯一按鈕(v0.8 取代「返回大廳」)亞哈 / 兔子🟢右下金底紅邊;功能仍是回大廳,UX 文字更友善
6. 美術素材(v2.2 r127~r132 場景+球瓶+機關三階段,**2026-05-21 階段 2/3 提前啟動**) (14 項)

階段 1 場景 / 背景(v2.2 r127,**初稿 5/21 入庫**,持續迭代到 8/M)

#模組功能負責狀態備註
BW-102階段1場景保齡球館場景 — 環型/弧型主視覺(初稿 ✅ 2026-05-21 入庫:大廳 / 遊戲畫面 / Loading 三張)Jason🟢構圖+色相 OK,材質 / 燈光細化期到 8/M

階段 2 球瓶(v2.2 r128~129,**2026-05-21 提前啟動** — 球道列已刪)

#模組功能負責狀態備註
BW-103階段2球瓶球道模型Jason🟢—
BW-104階段2球瓶空氣牆 — 球道兩側溝外緣(不可見 collider,防球意外飛出場景);高度涵蓋球可能彈起最大值Jason🟢5/28 會議新增(v1.4):對應地雷彈飛/風場吹偏等極端情境
BW-105階段2球瓶球道支援彎曲軌跡渲染(依旋轉量)Jason🟢—
BW-106階段2球瓶正規球瓶模型Jason🟢—
BW-107階段2球瓶一般球模型兔子🟢—
BW-108階段2球瓶球體旋轉視覺 — 連續映射尾跡兔子🟢—
BW-109階段2球瓶球體旋轉視覺 — 旋轉貼圖兔子🟢—

階段 3 障礙物 / 機關視覺(v2.2 r130~132,**2026-05-21 提前啟動**:機關模型完成後接機關 VFX)

#模組功能負責狀態備註
BW-110階段3障礙物障礙瓶 — 模型(視覺明顯區分正規瓶)Jason🟢—
BW-111階段3障礙物風場視覺(風線 + 風向指示 + 影響範圍可視化,不做落葉)兔子🟢—
BW-112階段3障礙物黑洞視覺(旋渦動畫 + 邊緣扭曲 + 影響半徑可視化)Jason🟢—
BW-113階段3障礙物地雷視覺 — 外殼Jason🟢—
BW-114階段3障礙物地雷視覺 — 警示燈Jason🟢—
BW-115階段3障礙物地雷視覺 — 引爆 VFX 介接Jason🟢—
7. 特效 VFX(v2.2 分佈:機關環境/事件 r131~132、字卡動態 r134、球路特效 r135~136 — 綠豆) (19 項)
#模組功能負責狀態備註
BW-116通用 VFXReady 字卡兔子, 亞哈, 綠豆🟢—
BW-117通用 VFXFinish 字卡 — 最後一球結束後播放,播完直接切結算(無黑畫面 fade)兔子, 亞哈, 綠豆🟢5/28 會議補(v1.4):與 BW-089 配合
BW-118通用 VFXNew Stage 進場字卡 — 在 HighScore 字卡(BW-119)後播放,僅解鎖新關卡時觸發兔子, 亞哈, 綠豆🟢5/28 會議補(v1.4):補對結算字卡序列位置。7/3 補:副標文案=多國 ID 57011「第 {0} 關 — {1} 解鎖」/en「Stage {0} — {1} Unlocked」(LanguageSetting.xlsx 57001~58000 JSG11 區間),排版參考已加到 Figma WordCard_NewStage(17102:2)— 新增 Txt_NewStage_Subtitle(17256:324)+RD 註記層 Note_NewStage_Subtitle_ForRD(17256:325)
BW-119結算字卡HighScore 字卡 — 結算頁切入後,若該關打破玩家歷史最高分則彈出(金字 + 徽章 + +X 提示)兔子, 亞哈, 綠豆🟢5/28 會議新增(v1.4):播放序列=Finish → 結算 → HighScore → NewStage
BW-120通用 VFX投擲方向箭頭 VFX — 2026-05-21 釐清非 VFX:UI 做圖(亞哈)+ RD 做動態(兔子 / Andros),由 BW-001 / BW-003 / BW-083 覆蓋兔子, 亞哈🟢—
BW-121球與球路球路 Trail 視覺 v2.0(顏色 = OnPush 轉速二元:< 100% 藍一般 Trail / = 100% 橘螺旋丸;長度 = 球體移動速度線性,低於閾值消失;球體透明度 = 轉速線性,越慢越透明(僅橘色適用,藍色僅有 trail — 2026-07-13 確認);準備階段全隱藏;詳 DEC-JSG11-020)兔子, 綠豆🟢—
BW-122結算字卡Strike VFX — 彩帶 — 砍掉(2026-06-22):見 DEC-JSG11-029兔子, 綠豆❌—
BW-123結算字卡Strike VFX — 閃光 — 砍掉(2026-06-22):見 DEC-JSG11-029兔子, 綠豆❌—
BW-124結算字卡Strike VFX — 字卡(動態,r134 字卡動態階段 6/1~6/12 綠豆 / 設計 r133 5/18~5/29 亞哈)兔子, 亞哈, 綠豆🟢—
BW-125機關 VFX障礙瓶倒下警示 VFX — 紅色閃光Jason, 綠豆🟢—
BW-126機關 VFX風場 VFX兔子, 綠豆🟢—
BW-127機關 VFX洗溝 VFX — 「Gutter!」字卡兔子, 亞哈, 綠豆🟢碰溝即彈字卡 → 下一球(球次照算,挑戰即時失敗 → 失去 +50 — 洗溝挑戰自 2026-09-01 起屬 Stage 5,加分跟關卡位置走)
BW-128機關 VFX洗溝 VFX — 警示閃光Jason, 綠豆🟢—
BW-129機關 VFX黑洞 VFX — 旋渦動畫Jason, 綠豆🟢—
BW-130機關 VFX黑洞 VFX — 球被吸入扭曲效果 — 砍掉(2026-06-22):見 DEC-JSG11-029Jason, 綠豆❌—
BW-131機關 VFX黑洞 VFX — 「Sucked!」字卡兔子, 亞哈, 綠豆🟢—
BW-132機關 VFX地雷 VFX — 警示燈閃爍Jason, 綠豆🟢—
BW-133機關 VFX地雷 VFX — 爆炸特效Jason, 綠豆🟢2026-05-15 簡化(原「引爆爆炸光圈」+ 已砍「瓶子被彈飛尾跡」)
BW-134結算 VFX挑戰達成 +10 VFX(金色徽章 + 「Challenge Clear +10」字卡)兔子, 亞哈, 綠豆🟢—
8. 音效 SFX(v2.2 r141~142 鏡) (15 項)
#模組功能負責狀態備註
BW-135通用 SFXReady 提示音兔子, 鏡🟢—
BW-136通用 SFXFinish 提示音兔子, 鏡🟢取代過關 PASS 音 / 過關慶祝光效
BW-137通用 SFXNew Stage 進場字卡音兔子, 鏡🟢對應 BW-117 字卡,也作為解鎖下一關回饋音
BW-138通用 SFX球出手音兔子, 鏡🟢—
BW-139通用 SFX球滾動音兔子, 鏡🟢—
BW-140撞瓶撞瓶聲(單一音檔)兔子, 鏡🟢大/小力撞擊合 1
BW-141撞瓶球瓶倒下音Jason, 鏡🟢—
BW-142StrikeStrike 音效(單一音檔)兔子, 鏡🟢—
BW-143機關 SFX倒入溝 gutter 音Jason, 鏡🟢對應 BW-126 Gutter 字卡音,Stage 5 挑戰失敗
BW-144機關 SFX障礙瓶倒下警示音Jason, 鏡🟢Stage 2
BW-145機關 SFX風場 — 風吹聲兔子, 鏡🟢Stage 5(風吹聲已足夠,球偏移聲於 v0.11.1 已砍)
BW-146機關 SFX黑洞 — 吸力聲Jason, 鏡🟢Stage 3
BW-147機關 SFX黑洞 — 吸入音效Jason, 鏡🟢—
BW-148機關 SFX地雷 — 引爆聲Jason, 鏡🟢Stage 4
BW-149結算 SFX挑戰達成 +10 音(金幣/成就)兔子, 鏡🟢—
9. BGM(v2.2 r143 鏡) (2 項)
#模組功能負責狀態備註
BW-150BGM大廳 BGMJason, 鏡❌7/2 拍板砍掉:大廳不需要 BGM
BW-151BGM遊戲 BGM(5 關共用)Jason, 鏡⬜Alpha 用冰壺 BGM 佔位,正式版待 v2.5
10. 整合 / QC(row 135 素材實裝 + row 136 CP) (20 項)

素材實裝(row 135 程式側)

#模組功能負責狀態備註
BW-152素材實裝美術場景素材實裝Jason, 兔子🟢—
BW-153素材實裝音效素材實裝Jason, 兔子🟢—
BW-154素材實裝特效素材實裝Jason, 兔子🟢—
BW-155素材實裝UI 素材實裝Jason, 兔子🟢—

Excel 表(RD 數值設定表,讓 TM/策劃調參數不用動 code)

#模組功能負責狀態備註
BW-156Excel 表JSG11Bowling_LevelSetting待 RD🟢關卡表:StageId / LevelTypeId(0教學 1一般)/ 瓶種組成 int[] / 機關 ID int[] / 解鎖下關分數 / 解鎖關卡 ID / 挑戰類型 enum / 挑戰門檻值
BW-157Excel 表JSG11Bowling_PinSetting待 RD🟢瓶種表(仿 JSG9 ObjectSetting):PinId / 註解 / PinType(Normal/Obstacle)/ 分數 / 重量
BW-158Excel 表JSG11Bowling_MechanismSetting待 RD🟢機關表(仿 JSG08 TrapValue):MechanismId / 註解 / TrapValue: double[]。陣列含義 — 風:[強度, 週期秒];黑洞:[峰值力, 曲線類型 0線性 1反平方];地雷:[爆炸 impulse, 是否連鎖 0/1]

中斷恢復

#模組功能負責狀態備註
BW-159中斷恢復藍牙斷線偵測(沿用 shared/bluetooth)待 RD🟢—
BW-160中斷恢復藍牙斷線 — 重投當球 vs 整關重來判定待 RD🟢—

多語系

#模組功能負責狀態備註
BW-161多語系多語系 key — 5 關名稱Jason🟢—
BW-162多語系多語系 key — 挑戰任務描述Jason🟢—
BW-163多語系多語系 key — UI 文字Jason🟢—

QC 必測項目

#模組功能負責狀態備註
BW-164QC 必測靜止手腕投擲走直線兔子🟢—
BW-165QC 必測5 關門檻平衡兔子, Jason⬜—
BW-166QC 必測挑戰任務即時失敗判定Jason🟢—
BW-167QC 必測障礙瓶倒下跟正規瓶一起重置邏輯QC⬜—
BW-168QC 必測地雷彈飛 Strike 判定QC⬜—
BW-169QC 必測5 關全通關流程兔子, Jason⬜—
BW-170QC 必測各 Stage 重玩流程兔子, Jason⬜—

CP

#模組功能負責狀態備註
BW-171CPCP 一次驗收 @ 7/7(row 136)小曹⬜—
11. UI 動畫實裝(v0.14 新增 / v0.15 重整)— 對齊 ui-layout v0.12 + ui-animation v0.5 (14 項)

Lobby 動畫(亞哈視覺 + Jason 程式)

#模組功能負責狀態備註
BW-172載入畫面Loading/Screen 1920×1080 完整載入畫面(JSG BOWLING + 進度條)亞哈 / Jason🟢v0.12 新增 component(nodeId 15470:106);拍板不做動畫(純切場景+fillAmount 真實進度回呼)
BW-173Lobby CTA「點擊開始遊戲」呼吸動畫(scale 1.0↔1.06 + alpha 1.0↔0.85,1.6s InOutSine Yoyo 永久循環)Jason🟢動畫參數:token LobbyCtaBreathePeriod=1.60f;細節詳企劃書
BW-174Lobby 進場Lobby 進場 stagger 序列(bg fade-in 0.3s + logo 0.4s + CTA 0.35s + 右下三膠囊 stagger 0.08s/個 )Jason🟢動畫序列:token LobbyBg/Logo/Cta/BtnStagger;細節詳企劃書
BW-175Tab 切換Tab 切換動畫 — 被選 Tab 輕彈一下(縮放),底色跟著換,底線指示器橫向滑過去(0.30s),內容區淡出入換頁Jason🟢套用 Record 1P/2P+Tutorial Prev/Next;動畫參數(punch 1.0→1.08→1.0、OutCubic posX)詳企劃書
BW-176Btn tap 反饋全遊戲按鈕點擊回饋 — 所有按鈕點下去縮到 92% 後彈回,讓玩家感覺有按到(適用:一般按鈕、圖示按鈕、Lobby 三膠囊、已解鎖模式按鈕);手機 tap-only 無 hover(v0.3 拍板)Jason, 兔子🟢token BtnPressDown/Up(scale 1.0→0.92→1.0/0.08s InQuad+0.12s OutBack)
BW-177Lobby 動畫Lobby Modal 連續轉場 — Lobby → ModeSelect → Stage 同 dim 層複用,新 panel 在舊 panel 出 50% 時提早 0.1s 銜接進場Jason🟢轉場動畫序列詳企劃書
BW-178Lobby 動畫Lobby Modal 開閉動畫 — ModeSelect / Stage / Connet_Searching / Tutorial_01 四個 Lobby modal 通用進退場(dim alpha 0→0.6 / 0.25s + panel scale 0.85→1.0 0.35s OutBack + alpha 0→1 0.25s)+ 關閉反向亞哈 / Jason🟢由原 BW-181 拆出 Lobby 部分;動畫 token ModalDim/Panel*,細節詳企劃書

戰鬥動畫 / HUD 元件(亞哈視覺 + 兔子程式 + 綠豆字卡)

#模組功能負責狀態備註
BW-179ScoreBlock 整合元件HUD/ScoreBlock(左上整合分數 + 目標)取代 BW-084/085/087 散項實裝亞哈 / 兔子🟢v0.12 新增 component(nodeId 15587:2);原分數/目標視覺仍保留但實裝為單一 component。6/5 起 HUD 動態元件不嵌字:ScoreBlock/ScoreItem/ChallengeTask/UnlockHint master 不含文字(純底卡),分數/目標/挑戰文字由 layout/程式於執行期注入。7/9 拍板:移除 Stage 編號顯示,格式改單行「分數:{現在分數} / {過關門檻}」
BW-180戰鬥 Modal戰鬥 Modal 開閉動畫 — Result / LeaveGame 兩個戰鬥內 modal 通用進退場(dim alpha 0→0.6 / 0.25s + panel scale 0.85→1.0 0.35s OutBack + alpha 0→1 0.25s)+ 關閉反向亞哈 / 兔子🟢由原 BW-181 拆出戰鬥部分;動畫 token ModalDim/Panel*,細節詳企劃書
BW-181HUD 字卡進退場Card/StatusHint 共用容器 6 種狀態進退場(Ready/Finish/Strike/NewStage/Gutter/Sucked,OutBack 進場 + InQuad 退場,Strike 加 punchScale 0.1 / NewStage 滑入 + 上下白線 / Gutter 紅閃 / Sucked shake)綠豆 / 兔子🟢token HUDCardStandard/Strike/NewStage*,細節詳企劃書;對接 BW-116~118/122~124/127/131 字卡
BW-182Stage→Battle 轉場選關卡點「確認」後畫面流程:① Loading(純進度條,不做動畫)→ ② 進戰鬥後 HUD 各元件錯開依序淡入升起(左上分數、挑戰面板、本球計分)→ ③ 出現「Ready」字卡 → ④ 選投球位置 HUD 直接顯示(即時,不做淡入)兔子🟢完整序列詳企劃書(stagger:ScoreBlock/ChallengeTask/ScoreItem fade-in+posY)
BW-183挑戰面板進行中態文字跑馬燈 — 任務描述過長時水平循環捲動(無限迴圈、固定速度 ChallengeMarqueeSpeed px/s、貼底、不擋左邊、右側碰啟動按鈕停、黑底靜止只跑文字);任務成功/失敗時停止→文字復位→再演 ☑/紅槓(三段有序)兔子🟢6/3 會議新增:速度先設任意值 demo 後調;動畫 token 詳企劃書

炸彈瓶 + 字卡節奏調整(v1.2,2026-06-24)

#模組功能負責狀態備註
BW-184炸彈瓶炸彈瓶擊中後立即在原位刷新(mid-ball 即時復位,不等球結束)— 不計分、不影響 Strike 判定;Stage 4 × 1 顆(2026-09-01 重排前為 Stage 5)兔子🟢6/24 全確認:挑戰條件=無獨立挑戰;VFX=沿用地雷爆炸效果;視覺設計=正規瓶改色。位置待 RD 定
BW-185HUD 字卡所有字卡停留時間統一改 1.0s(原 Ready/Finish/Gutter/Sucked=1.5s、Strike=1.8s、NewStage/ChallengeClear=2.0s)— 綠豆調整 DOTween token HUDCardHold綠豆🟢6/24 新增(v0.8);適用字卡清單詳企劃書
12. 互動式新手教學關卡(v2.4 新增,2026-07-01 拍板,DEC-JSG11-030 / DEC-JSG11-031) (11 項)
#模組功能負責狀態備註
BW-186互動教學關卡JSG11_TutorialStageController 整體流程 — 3 階段(選擇位置/丟出保齡球/曲球控制)依序推進,全完成後無結算直接返回大廳Alan⬜新增總控模組;_id=0 不佔 5 關闖關序列、不影響任何解鎖
BW-187互動教學關卡3 階段練習目標次數(選擇位置 ×4 / 丟出保齡球 ×3 / 曲球控制 ×3)Alan⬜數值為初版設計值(🟡 待 RD 實機測試後與 TM 確認),硬編程式不開 Excel 欄位
BW-188互動教學關卡重用 HUD/ChallengeTask(16600:268)顯示即時計數 {動作} {N}/{M},達標播既有 Success ☑ 動畫Alan⬜不新增 variant——沿用既有三態元件,僅改文字內容格式;不使用 Failed 態
BW-189互動教學關卡Tutorial/VideoPanel 左側大教學影片面板 — 貼齊螢幕左緣、30 秒自動收合 + 面板內嵌三角形按鈕隨時手動收合/展開,內容標題/影片/內文三層堆疊Alan⬜Figma wireframe 已建並依 7/1 六輪回饋修訂(17186:270,2 variants:Expanded 17186:266 1340×830〔對照 IMG_6840 參考截圖放大〕+內嵌收合按鈕〔方向指左〕/Collapsed 17186:268 40×830 全高直立窄條〔側邊分頁把手樣式〕),素材 TutoriaStage_bg.png 拉伸嵌 fill;獨立收合態示意 frame TutorialStage_01_VideoPanelCollapsed(17197:333);JSG11_TutorialVideoPanelController 程式待做。2026-07-22:TutoriaStage_bg.png/TSNextUpper_btn.png 確認為正式素材,已推上 Jacfitness_Art 2.4 分支 JSG11/UI/Tutorial/
BW-190互動教學關卡站位光標 VFX + HUD/PositionArrow(僅階段 1,只在教學影片面板收合後顯示,4 個目標依序出現,命中後下一個目標接續)Alan⬜Figma 元件已建 VFX/TutorialTargetCursor(17199:307),素材為使用者提供的真實光標圖(光環.png,282×352);疊在球體位置上方(光環套球+箭頭上指)。7/1 修正:PositionArrow+光標從展開態 frame 移除,改放進收合態 TutorialStage_01_VideoPanelCollapsed frame(17197:349/17197:350+17209:307),因為展開態畫面被教學面板佔滿看不到練習區域
BW-191互動教學關卡Good! 即時回饋徽章(階段 2/3,動作判定成功時彈出,素材 Good.png)Alan⬜Figma 元件已建 Badge/Good(17186:271);DOTween 彈出動畫(scale 0→1.1→1.0 + 0.6s 淡出)待 Alan 實裝。2026-07-22:Good.png 確認為正式素材,已推上 Jacfitness_Art 2.4 分支 JSG11/UI/Tutorial/
BW-192互動教學關卡Figma wireframe 骨架 — 3 個 TutorialStage_01/02/03 frame(clone HUD_Base + 疊新元件)Alan⬜7/1 已建(17187:266/17187:277/17187:288);沿用戰鬥 HUD grey 底,實機場景背景/光標最終視覺待後續補上
BW-193互動教學關卡進場字卡 WordCard_Ready / 完成字卡 WordCard_FinishAlan⬜7/1 新增:沿用正式關卡既有實機截圖素材(BattleCards 17103:2 內 17096:2/17097:2),不重畫;Figma wireframe demo frame TutorialStage_00_Ready(17216:336)/TutorialStage_04_Finish(17216:337)已建;播放時機=Ready 於教學關進場時、Finish 於 3 階段練習全部完成時
BW-194互動教學關卡單一階段練習達標打勾示意(HUD/ChallengeTask 切 State=Success + 計數文字滿額,如「選擇位置 4/4」)Alan⬜7/1 新增:Figma wireframe demo frame TutorialStage_01_ChallengeComplete(17216:338)已建;沿用既有 Success 變體,不新增元件
BW-195互動教學關卡Figma 圖層命名清理(user 手動拼貼素材後盤點結構)Alan⬜7/1:spec_教學圖文/動畫 → TutorialVideoBox_spec (layout)、收合示意 frame 光標圖層加註 (manual placement) 標明未同步元件,避免誤判為壞掉的 instance
BW-196互動教學關卡右上角略過鈕(v2.4 暫停改略過)— 底版沿用冰壺 Black_btn 黑底+「略過」白字(多國 12409 注入、不嵌素材),點擊直接結束教學關卡返回大廳(不彈確認框;教學關無分數,單人模式解鎖不受影響)Alan⬜7/24 新增:Figma 5 個教學 frame(17187:266/17187:277/17187:288/17197:333/17216:338)原暫停鈕已原地替換為略過鈕(403×92,右緣對齊原暫停鈕、y=50);素材同冰壺教學略過鈕 Black_btn;正式關卡右上角暫停鈕不動;行為比照 v2.4 各遊戲教學略過鈕(2026-06-16 定案,企劃書互動教學功能說明有圖)
13. 雙人模式(v1.6 新增,2026-07-27 拍板) (17 項)
#模組功能負責狀態備註
BW-197雙人模式模式選擇的「雙人模式」鈕解鎖可點(拿掉鎖頭圖示)蝸牛⬜常態解鎖,不綁教學關卡進度;單人模式的「首次要先進教學」邏輯不變。2026-08-03 由兔子改派蝸牛(甘特圖開發組 r195,8/17~8/28)
BW-198雙人模式雙人藍牙連線可連上兩台手環(layout 不講究,能連就好)蝸牛⬜2026-08-03 與 RD 討論後改版:正式版沿用 Jacfitness 公版藍牙,但這一版還是要做得起來,否則 2P 遊戲本身的功能沒辦法測。所以只求功能通、畫面不用照任何設計稿。遊戲內既有的單人連線畫面不動。⚠️ QC 不在這一版測,連線改到保齡球實際上架的那一版驗收(甘特圖開發組 r196 蝸牛 8/17~8/28;驗收在維護組 v2.7 r143)
BW-199雙人模式關卡選擇在雙人模式下,可選關卡依單人模式已解鎖的關卡為準(未解鎖的仍鎖住、不能選),右上「關卡解鎖條件」紙條隱藏蝸牛⬜2026-08-03 改(原訂 5 關全開,卡片一律亮起):卡片的鎖/亮狀態直接讀單人模式的解鎖存檔,雙人不需要另一套判定。雙人只讀不寫 — 打過關不會推進單人解鎖進度、不計過關門檻、不出現「New Stage」字卡。負責人由兔子改派蝸牛(甘特圖開發組 r195,8/17~8/28)
BW-200雙人模式輪流控制 — 每球換人、每人 5 球,第 10 球結束進結算兔子⬜每球獨立重置全瓶(與單人相同),換人不需保留瓶況
BW-201雙人模式手環輸入依當前回合綁定對應玩家,非當前回合玩家的輸入忽略兔子⬜沿用單人既有的輸入封鎖時機(字卡演出到黑畫面過場期間全封鎖)
BW-202雙人模式雙方分數各自獨立累積(Strike / Open 計分規則與單人相同)兔子⬜分數只顯示絕對數字,雙人沒有過關門檻分母
BW-203雙人模式加分挑戰雙方同一項、各自獨立判定成敗,+N 分計入各自總分兔子⬜挑戰項目取當關設定,兩人打同一關即同一項
BW-204雙人模式戰鬥 HUD 左上雙列記分板(1P 上 / 2P 下,670×125,間距 12,起點 40,54)蝸牛⬜Figma 元件 HUD/PlayerScoreRow(18332:360),1P 黃 pill / 2P 橘 pill;暱稱逾 7 個全形字直接裁切、不加刪節號(2026-09-01 照實裝定案)——暱稱文字框 270×50、36px GenSenRounded-B、Horizontal Overflow=Wrap+Vertical Overflow=Truncate,是版位寬度切的不是字數判斷,半形英數約可容 15 字;輸入端(藍牙多人連線頁)CharacterLimit=0 沒有長度上限,維持現狀不加。素材(2026-08-05 交付 Jacfitness_Art 1.6_JSG11Bowling2P 分支):pill 用 JSG11/UI/HUD/ScorePlayer/1P_PlayerTag.png、2P_PlayerTag.png(108×73,列內位置 44,26);底卡直接沿用同目錄上層的 JSG11/UI/HUD/ScoreBlock_bg.png(同一張圖拉成 670×125,沒有另外出圖)。同分支舊的 1P_PlayerName.png / 2P_PlayerName.png 已刪除,那是舊設計不要用
BW-205雙人模式當前回合那一列全彩、等待中那一列整列淡化至 50% 透明蝸牛⬜淡化對象是整列(pill+暱稱+分數一起),不是單獨某個字變透明
BW-206雙人模式右上球數區改顯示輪次「3/5」蝸牛⬜純數字、無前綴,與單人「10/10」同格式,不需要新增多國 ID;元件尺寸位置與單人相同
BW-207雙人模式右側加分挑戰面板隨回合切換內容(0.2 秒淡入淡出),文案前面加「1P/2P」蝸牛⬜面板位置尺寸與單人相同;切換時要一併還原該玩家當下的進行中/成功/失敗狀態
BW-208雙人模式換人提示「Your Turn」全螢幕特效字卡在黑畫面過場結束、控制權交給該玩家的當下疊在遊戲畫面上播放蝸牛⬜2026-08-10 改版:原橘色橫幅取消,改用全螢幕特效字卡。黑畫面參數不動(停留維持 0.20 秒);字卡與選位置 HUD 同時出現,淡入 0.15+停 0.60+淡出 0.25 共 1 秒,全程不封鎖輸入,玩家可立即操作故不增加等待時間。字卡疊在 HUD 之上、暫停鈕之下。大字「Your Turn」與下方金色光帶直接沿用冰壺的既有素材與特效動畫,1P 跟 2P 用同一張、美術不用另外做,位置以現行實機為準(企劃不另外指定座標)。沒有底版、不做任何 Figma 元件(原本的 HUD/TurnBanner_bg 元件已刪掉)。2026-08-21 依 RD 實裝更新規格:小字幕放 1920×1080 座標 (480, 722) 尺寸 960×130(水平+垂直置中,中心點 960 / 787),80px 粗體白字,字型 GenSenRounded-B(Font Style 維持 Normal,不要另外勾 Bold,偽粗體會讓描邊糊掉),一定要加黑色 8 方向描邊 5px(OutlineWith8Direction,Effect Distance 5 / 5、Use Graphic Alpha 打勾),沒有描邊白字疊在亮球道上會看不清楚 —— 原本寫的「56px + 黑色投影 0/4/12 55%」作廢。文字框掛 Content Size Fitter 讓寬度隨字串自適應。小字幕不能再往上(會壓到實機光帶 y≈712),也不能再往左(左下出手回饋面板右緣到 x=460,現在只剩 20px 餘裕,這行字不能再變長)。小字幕文字走 LanguageSetting.xlsx 多國 ID 57031(1P)/57032(2P),內容「PLAYER 1 · BALL {0} OF 5」,{0} 帶入該玩家自己打到第幾球(1~5);中文欄與英文欄是同一句英文,不用做語系判斷。不顯示暱稱
BW-209雙人模式結算雙欄對比面板(1P vs 2P 四列:Strike 得分/Open 得分/加分挑戰/總分)兔子⬜2026-08-17 改版:不另做雙人專屬底版,直接沿用單人結算底版素材 JSG11/UI/Result/ResultDetail_bg.png(1230×550,等比拉伸、不切九宮格)。面板由 1620×700 置於 (150, 260) 改為 1620×724 置於 (150, 200) —— 寬度不變、高度依素材比例 2.2364 調整避免拉變形,整體上移 60px,面板底邊 924 與鈕列(BW-211)頂邊 985 之間留 61px(原本只有 25px 太擠)。內容欄位座標不動。總分列只顯示分數不顯示門檻。Figma 元件改用 Result/ResultDetail_pnl(15547:6)。原 Result/VsDetail_pnl(18333:357)元件與素材皆已刪除,VsDetail_bg.png 已不在美術分支上
BW-210雙人模式結算勝方徽章(1P WIN!/2P WIN!/DRAW)+ 勝方那一欄整欄黃色高亮兔子⬜勝方整欄高亮底為 Figma 元件 Result/WinnerColumn_highlight(18396:460,340×450 黃色 22% 圓角 8),擺位隨勝方切換(1P 勝放左欄/2P 勝放右欄),平手時兩欄都不放;勝方文字為無底色純文字(100px 金字 #F2BF33)不做元件、由程式繪製,字體/字級/顏色規格見企劃書雙人模式章節
BW-211雙人模式結算鈕列雙人版三顆:回藍牙列表/再次挑戰/選擇其他關卡兔子⬜第 3 顆與單人不同(單人是「下一關」)。原本規劃的第 4 顆「分享」已於 2026-09-01 取消(社群產品停止),不用做。Figma 元件 ResultButtons/JSG11_2P(18339:426)
BW-212雙人模式離開遊戲對話框雙人版文案「離開後本局對戰不會記錄/確定回到開始畫面?」 — 不做,沿用 1P 文案❌2026-08-03 TM 拍板取消:離開遊戲對話框在雙人完全沿用單人那一句「離開時分數不會記錄/確定回到開始畫面?」,不另外寫雙人版文案 —— 意思一樣、玩家看得懂,多一句文案就多一組多國 ID 要維護。畫面、按鈕(否/是)本來就沿用單人同一個對話框,所以這一項變成零改動
BW-213雙人模式紀錄畫面雙人分頁串接資料 — 這一版不做(暫緩,非取消)❌2026-08-03 與 RD 討論後暫緩:紀錄的資料格式要等大廳統一改版那一版的「多人資料結構整合」完成,格式相符的話,保齡球實際上架那一版併入時直接套用,不必先做一份會被丟掉的。⚠️ QC 不在這一版測,改到上架那一版驗收(甘特圖開發組 r202 已標「異動」並清空日期;驗收在維護組 v2.7 r143)。雙人成績不寫入單人排行與個人最高分(此原則不變)
14. 出手回饋面板 — 力道 / 旋轉(v1.6 追加,2026-07-28 拍板,DEC-JSG11-049) (7 項)
#模組功能負責狀態備註
BW-214出手回饋力道與旋轉的數值定義(力道 0~100% 的分母、旋轉條滿格值)由演算法端定義並交付Andros⬜2026-07-28 TM 確認力道百分比做得到,可行性沒問題,缺的是定義:滿格值到底對應什麼(出手速度還是手腕加速度峰值?)。旋轉滿格值=角加速度轉旋轉量的映射曲線上限值,本來就在待決清單裡。UI 與程式可先用假資料開發,但驗收力道 % 的正確性需要這兩個值
BW-215出手回饋戰鬥 HUD 左下顯示出手回饋面板(420×244,起點 40,786),左側力道圓環+中間百分比數字,右側旋轉橫條+方向文字蝸牛⬜面板拆成 3 個素材(2026-07-29):底版 ThrowFeedback_bg(Figma 18752:2,420×244,含兩條軌道與中心刻度線,不含任何填色,整張貼不切片)/力道環填色 PowerRing_fill(18752:3,132×132,完整 360 度黃環,用 Image Type=Filled、Fill Method=Radial 360、Origin=Top、Clockwise 打勾,fillAmount 給力道百分比)/旋轉條填色 SpinBar_fill(18752:4,98×26,只有半邊,中心端方角外端圓角,pivot 貼在旋轉條中心往外拉長 0~98,左旋時 scaleX 設 -1 鏡射同一張圖,不另出左右兩張)。圓環外徑 132、環寬 18、黃色由 12 點鐘位置順時針增長;百分比數字 38px 置於圓環正中央(44px 會頂到圓環內緣)。旋轉橫條 196×26,中心有一條白色刻度線,橘色由中心往左長=左旋、往右長=右旋,左右同一個顏色不分色。方向文字三選一:左旋/右旋/直球。素材已交付(2026-07-29):Jacfitness_Art repo 1.6_JSG11Bowling2P 分支(從 2.4 開),路徑 JSG11/UI/HUD/,3 個檔加 .meta 都推上去了。.meta 已設好九宮格邊界避免拉伸變形:底版 36/36/36/36(護 r34 圓角+5px 內框)、旋轉條 0/0/14/0(只護會被拉伸的外端圓角)、力道環 0/0/0/0 刻意不切(走 Filled/Radial360,切了圓環會爛)。2026-08-17 起這張就是正式素材、不再等美術換皮(DEC-JSG11-061)—— 現行斜紋與圓角規格已與其他 HUD 面板一致,唯一差別是本面板為不透明底(ChallengeTask_bg 為 alpha 229 半透明),TM 拍板接受、不改。⚠️ 2026-07-29 面板分兩輪由 620 寬縮到 420:第一輪 620→484 讓開球本體(原右緣壓進球道左緣 60px,球推到最左會被擋掉約 40%);第二輪 484→420 讓開站位箭頭(箭頭貼著球兩側跟著移動,最左時跑到 x 472,比球更外側,484 版會蓋掉箭頭 84%)。兩輪都只砍留白不縮字級,字級維持不變
BW-216出手回饋面板顯示的一律是「上一球」的值,出手瞬間更新後常駐不消失,直到下一球出手才換蝸牛⬜該玩家本關第一次出手之前不顯示(還沒有上一球)。不要做成球停就消失 — 玩家看得到它的那幾秒正好在盯著球滾,留到下次選位置時才有參考價值
BW-217出手回饋出手瞬間圓環由 0 增長到目標值 0.4 秒(後段減速),百分比數字同步跳動計數,旋轉條同時由中心往兩側展開蝸牛⬜全程不封鎖玩家操作(冰壺是投完鎖畫面轉 3 秒,保齡球一局 10 球不能這樣做,會多等 30 秒)。常駐期間面板完全靜止,不做呼吸或閃爍
BW-218出手回饋雙人模式:面板位置尺寸與單人完全相同不做兩份,但顯示的必須是當前回合玩家自己的上一球,換人時 0.2 秒淡入淡出切換,標籤前面加「1P」/「2P」再空一個半形空格(中間不要放間隔點,例:「1P 上一球」)蝸牛⬜絕對不能顯示對手的值,兩人各存一份。該玩家還沒投過第一球的回合就隱藏面板。切換方式與加分挑戰面板相同
BW-219出手回饋教學關卡:影片面板展開時不關閉本面板(只是被教學面板蓋住,底部會露出來),收合後完整可見蝸牛⬜不要做展開/收合的顯示切換(2026-07-29 改):面板一直在,只是被教學影片面板蓋住 —— z-order 排在教學面板下面就好。教學面板底緣在 y=955、本面板下緣在 1030,所以展開時底部約 75px(「力道」「左旋」那一帶)會露出來,這是預期的不是 bug。跟站位箭頭與光標的規則不同:那兩個是「現在要你操作」的指引,展開時不能操作所以要收;這個面板是「上一球結果」的常駐資訊,沒有必須消失的理由。教學第 3 站「曲球控制」靠這個面板讓玩家看到自己扭手腕真的把球轉出去了
BW-220出手回饋多國語系新增 6 個字串:上一球/力道/旋轉/左旋/右旋/直球小曹✅ID 57025~57030,2026-07-28 已寫入 LanguageSetting.xlsx 並標紅底待 RD 搬進 Client。⚠️ 號段不是原訂的 57018~57023——那 6 顆全被佔用(57018 總分、57019~57024 教學關卡三站標題/內文),照原號寫會蓋掉教學文案;JSG11 區塊實際最後一筆是 57024 不是 57017。「1P 」「2P 」前綴(含一個半形空格)由程式在字串前面直接串,不另外開 ID;力道的百分比數字是純數字加百分比符號也不需要 ID
15. 機關隨機位置(v1.6 追加,2026-08-03 拍板 — 負責人與時程待開發二組自行認領,甘特圖開發組 r201) (6 項)
#模組功能負責狀態備註
BW-221機關隨機機關位置改為每次開局隨機抽一次,抽完整局 10 球固定不變兔子⬜不是每球重抽。雙人是每球換人、共用同一條球道,每球重抽會讓 1P 跟 2P 遇到的機關位置不一樣,變成比運氣
BW-222機關隨機障礙瓶與地雷各 5 個候選位置(兩關共用同一組座標)兔子⬜5 個點排成 V 字:正中央配最靠近球瓶那一檔、左右 0.20 公尺配中間檔、左右 0.40 公尺配最遠檔。越靠中線越難閃,但越遠離球瓶、球被打偏後跑得越開,這樣配對 5 個位置的難度才會接近
BW-223機關隨機黑洞 6 個候選位置(左右兩檔 × 三個縱深)兔子⬜橫向只能左右各一檔、不能放中線 — 黑洞吸引半徑 0.375 公尺、球道半寬只有 0.6 公尺,放中間等於必吸。另一側要固定留一條約 0.48 公尺寬的安全通道
BW-224機關隨機風場 6 種變化(三個縱深 × 吹向左/右)兔子⬜風場左右位置不用動 — 它的作用區本來就橫向蓋滿整條球道,移動左右玩家無感。吹向換邊=把風場物件轉 180 度
BW-225機關隨機隨機擺位後要同步更新機關自己記的重置座標兔子⬜障礙瓶被撞倒、地雷被引爆後會重置回「開場當下記下的位置」。若隨機擺位發生在記錄之後,重置就會把機關送回舊座標。另外障礙瓶的父物件本身帶偏移,設座標要用世界座標不是本地座標
BW-226機關隨機連續兩局不重複抽到同一組位置兔子⬜記住上一局抽到的編號,重抽到同一個就再抽一次
16. 暫停頁改公版(**v2.7 才做**,2026-08-04 拍板 DEC-JSG11-057) (1 項)
#模組功能負責狀態備註
BW-227暫停頁暫停頁改用平台公版三鈕彈窗(回藍牙列表/再次挑戰/回主選單),取代現行「離開時分數不會記錄/確定回到開始畫面?」的否/是兩鈕確認框待 RD⬜v2.7 才做,v1.6 不動。公版素材=深色標題列(標題「暫停」+右上 ✕ 關閉鈕,✕=關掉視窗繼續遊戲)+白底面板警示文案+三顆粉色按鈕浮在面板下方;三鈕文案走多國共用 ID 41039/41040/41051,標題 41049。行為不變:彈窗開啟時所有時間判定與物理凍結;按三鈕之一都算當局放棄(不計分、不解鎖)。保齡球專屬皮膚 Pause_v25 不採用(全平台取消客製暫停頁)。v2.7 改完後 BW-092 的 LeaveGame 規格作廢
🔗 Google Sheet 同步
同步腳本:見 KB CLAUDE.md 外部資源章節。
欄位:A 編號 / B 模組 / C 功能 / D 狀態 / E 負責 RD / F 美術負責 / G 預計階段 / H 完成日期 / I 備註
JSG11 保齡球 — 完整企劃書
製作:TM 小曹 · 受眾:美術(場景 / VFX / SFX)/ UI / 開發組
SSoT 原始碼:games/JSG11-bowling/ · 視圖由 Agent 自動編譯