JSG11 保齡球
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)。
使用 Andros 演算法
DetectRotate(✅ 沿用)+ JSG11_StancePositionUI(❌ 自寫),roll 角度越大,multiplier 越大(站位變化越快)。OnConfirm 事件 → 鎖定站位 → 進入「推球準備」狀態。新增 取代冰壺
SetObjectRotation() 的手腕主動轉角度。PushCurling → OnPush(forcePercentage)。推出瞬間擷取當下箭頭角度作為球的初始 forward 向量。
OnReadjust → 回到階段 1 重選。依 UX 決定是否開放。_traceCamera 開始跟球(無 zoom in、無瓶區近景)→ 倒瓶 / 球停鏡頭固定。不沿用冰壺 OverHeadCamera 結算頂視角流程。
🎬 字卡播放順序(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 頁「單球循環流程」。
4計分系統
| 結果 | 條件 | 得分 | 備註 |
|---|---|---|---|
| Open | 沒倒完所有正規瓶 | 倒幾瓶 = 幾分 | — |
| Strike | 1 球倒完所有正規瓶 | 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 球,提前達標也要打完
55 關闖關架構
解鎖:打贏本關門檻 → 下一關開放。沒過門檻 → 回大廳重新選關(不退關、不 game over、不顯示 Try Again)。
TM 已於 Unity 場景中調整各 stage 機關位置,下圖為球道上視圖(Game 視角)。實際座標以 Unity scene 為準,RD 接手時直接量測。
6旋轉球路系統(全局)
全部 5 關每一球都套用,旋轉量由玩家手腕動作決定 — 非隨機抽選、無 UI 提示。
機制
- Input:手環偵測角加速度(玩家手腕扭動方向與強度)
- 映射:角加速度值 → 球體
transform.forward軸的angularVelocity - 表現:Unity 物理引擎依此產生軌跡彎曲(連續量、無離散等級)
- 自然狀態:不扭手腕 → 角加速度近零 → 球直走
設計意圖
- 旋轉完全由玩家技術決定,不再用「隨機抽 5 種」
- 重玩價值來自操控精進(練熟後能曲球避機關)
- 與機關產生策略張力(曲球繞過障礙 vs 被動接受結果)
Owner:Andros
旋轉視覺映射(連續 + 透明度線性,Trail 藍/橘二元)
| 轉速狀態 | 球體視覺(旋轉 + 透明度) | 球路 Trail(顏色) |
|---|---|---|
| 不扭手腕(角加速度近零) | 幾乎不旋轉、球直走;準備階段 Trail 全隱藏 | 無 |
| 轉速 < 100%(一般) | 球體旋轉 + 透明度依轉速線性(越慢越透明 → 消失) | 藍色一般 Trail(長度依移動速度) |
| 轉速 = 100%(滿轉 / 螺旋丸) | 球體不透明、高速旋轉 | 橘色螺旋丸 Trail |
顏色為藍 / 橘二元(非級距);軌跡彎曲、透明度、Trail 長度才是連續量。對應確認表 BW-108~109(旋轉 + 透明度)、BW-121(Trail 二元,DEC-JSG11-020)。
7團隊分工
| 角色 | 負責範圍 | 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/17(Alpha 用冰壺 BGM 佔位、正式 2 首待 v2.5) | 132 |
| 小曹(TM) | 規格 / 排程 / CP 驗收 + Figma 素材交付(5/18~5/22)+ Demo 5/15 後在 Figma 標球道/球瓶尺寸 | 115 / 137 |
8時程
關鍵節點
| 日期 | 事件 | 負責 |
|---|---|---|
| 5/15 (五) | CP0 規格定錨會議(昨天沒開) | 三方對齊(TM / 美術 / UI) |
| 5/15 (五) | Andros 演算法 v1 交付(單點關鍵路徑) | Andros |
| 5/15 (五) | Demo 完成(球道/球瓶尺寸今天定案) | RD + TM |
| 5/18 | 兔子實裝(接 Andros v1,先用 TM Figma 素材拼裝) | 兔子 |
| 5/18 ~ 5/22 | TM 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/17 | 鏡 BGM 完成(Alpha 範圍) — 只測 BGM 可否播放,先用冰壺 BGM 佔位;正式 2 首待 v2.5 | 鏡 |
| 6 月底 | 素材實裝完成 | Jason / 兔子 |
| 7/7 | CP 一次驗收(5 關 + 旋轉 + 三機關 + UI + VFX + SFX + BGM)— 多 1 週緩衝給音效 | 小曹 |
| 7/B ~ 7/M | Alpha(含外整) | QC |
🎨 美術交付
1風格框架 美術
給美術組的初始 brief — 場景風格以美術組提供之 ref 為主。
🎯 整體調性
- 圓潤造型、誇張比例
- 與 JSG 系列其他遊戲(冰壺 / 高爾夫)調性一致
- 偏向復古暖色保齡球館(不要太硬派、不要賽博龐克)
- 單一牆面主視覺、不做轉場
📐 場景原則
- 環型 / 弧型主視覺(5/10 美術會決議)
- 不超過單一牆面、鏡頭無破綻
- 不需動態鏡頭切換場景
- 球道與主視覺可分離製作(球道長度依 Andros v1 實測再定)
🎭 角色 / 動畫
- 無角色
- 無投擲動畫(全物理路線)
- 球 / 瓶 / 機關互動全交給 Unity 物理引擎
- 美術唯一交付:模型 + 材質 + 物理參數(mass / collider / 摩擦 / restitution)
🎬 視覺重點
- 球體旋轉視覺連續變化(旋轉量大 = 尾跡明顯)
- 正規瓶 vs 障礙瓶視覺要明顯區分
- 機關影響範圍可視化(風線 / 旋渦 / 警示燈)
- Strike 字卡視覺強烈(+5 加乘要爽)
後續新增 ref 由美術組直接傳給 TM(不需上傳到本 repo)。
2美術交付清單 美術
依甘特圖 row 126~131 三階段拆分。請美術組依時程交付,TM 會在每階段結束做匯流檢查。
場景三階段(row 127~129)
• 大廳背景(場景的相機角度,不另做)
• Loading 圖(場景截圖)
• 2026-05-21 初稿 3 張已交付(構圖+色相 OK,見 §3 預覽)
• 持續迭代到 8/M(v2.5),細化材質 / 燈光 / 反射
• 正規瓶模型(白底紅頸)+ 障礙瓶
• 一般球模型 + 旋轉視覺
• 依 Andros v1(5/15)+ Demo 實測尺寸定案
• 不等場景細化即可起跑
• 風場(風線 + 風向 + 範圍可視化)
• 黑洞(旋渦 + 邊緣扭曲)
• 地雷(外殼 + 警示燈)
• 機關模型完成後 → 機關 VFX → SFX
UI / VFX / SFX / BGM 介入時程(2026-05-22 v2.5 美術 4 列日期校正)
• 不卡場景細化,5/29 前先收
• 接 TM wireframe 後啟動
• Lobby / 結算 / 教學另接 5/25~6/12(r138)
5/29 前 BW-129 黑洞旋渦(機關環境 r131)
6/1~6/12 BW-124 Strike 字卡(動態,r134)
+ BW-133 地雷爆炸(機關事件 r132)
→ BW-134 挑戰達成 +10
•
• 場景元素上 git 後即可開工
• BW-120 投擲箭頭已移出 VFX(→ UI+RD)
• 機關 VFX 完成後啟動
• 撞瓶聲合 1(不分大 / 小力)
• 大廳 BGM × 1(正式版待 v2.5)
• 遊戲 BGM × 1(5 關共用,正式版待 v2.5)
• 風格方向 TM 與鏡 v2.5 場景定案後對齊
• 正式 2 首交付:待 v2.5 再做,避免場景未定就提前白工
3場景規格 美術
📸 場景初稿(飯茄 · 2026-05-21 入庫)
三張 1920×1080 概念圖 — 構圖、色相、燈光氛圍方向 OK,可繼續迭代到 8/M(v2.5 以前),期間細化材質 / 燈光 / 反射 / 細節擺設。
📁 原始檔:output/JSG11-bowling/art-references/scenes/ · 對應 BW-102(階段 1 主視覺)
場景原則(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 5) / 一般球(紅橘大理石紋)— 造型 / 材質方向 OK,可繼續迭代反射 / 其餘球皮。
📁 原始檔: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 5) |
黑色 與正規瓶明顯區分 |
Stage 5 被爆炸彈飛 | 獨立飛行軌跡 + 落地物理(AddExplosionForce) |
| 一般球 | 標準保齡球(無強化球) | 5 關通用 | Rigidbody + 旋轉視覺(連續變化尾跡) |
5VFX 特效綠豆
字卡分工:文字(字型 / 排版)= 亞哈,動態(入退場 / 動畫 / 粒子)= 綠豆,觸發時機(容器切狀態)= 兔子。
📇 戰鬥字卡(戰鬥字卡集合 · 8 型 + 共用容器,共 9 張,v0.12 改名)
共用容器(「狀態提示字卡」元件)承載 6 種狀態(準備 / 完成 / 全倒 / 新關卡 / 洗溝 / 吸入),挑戰完成字卡與 High Score 字卡(2026-05-28 新增)為獨立結算特效。
關卡選擇 → 載入 → 準備(無倒數 3·2·1)
取代過關「PASS」音 / 光效
主標「New Stage」/ 副標「關卡 X — 關名 解鎖」
觸發即時挑戰失敗(剩餘球不再判定)
觸發即時挑戰失敗(該球 0 分)
關卡 1(結算統計達 3 次全倒)/ 關卡 2~5(10 球結束未觸發失敗條件)
由程式(兔子)按時機切狀態
序列:Finish → 結算頁 → HighScore → NewStage
🎱 球與球路 VFX

球體旋轉動畫 + 透明度依轉速線性(100% → 不透明,越慢越透明 → 消失)

顏色:轉速 < 100% 藍一般 / = 100% 橘螺旋丸
長度:移動速度線性(低於閾值消失)
🌀 機關環境 VFX(非字卡)

觸發即時挑戰失敗

風場本身可常駐顯示

字卡 SUCKED! 另外觸發(見上)

6SFX 音效(15 項)鏡
| 優先 | 音效 | 觸發時機 | 備註 |
|---|---|---|---|
| ⭐⭐⭐ | Ready / Finish 提示音 | 關卡開始 / 結束 | Finish 兼任過關收尾音 |
| ⭐⭐⭐ | New Stage 進場字卡音 | BW-118 字卡彈出 | 也作為解鎖下一關回饋音 |
| ⭐⭐⭐ | 球出手音 | 釋放瞬間 | — |
| ⭐⭐⭐ | 球滾動音 | 球在球道上 | — |
| ⭐⭐⭐ | 撞瓶聲(單一音檔) | 球撞擊球瓶 | 不分大 / 小力 |
| ⭐⭐⭐ | 球瓶倒下音 | 瓶倒地 | — |
| ⭐⭐⭐ | Strike 音效(單一音檔) | 1 球倒完 | 歡呼 + 提示音合 1 |
| ⭐⭐ | 倒入溝 gutter 音 | 球出界(Stage 3 挑戰失敗) | 失敗反饋 |
| ⭐⭐ | 障礙瓶倒下警示音 | Stage 2 擊倒障礙瓶 | 與正規瓶倒下要不同 |
| ⭐⭐ | 風場 — 風吹聲 | Stage 3 球進風場 | 風吹聲已足夠,球偏移聲 v0.11.1 已砍 |
| ⭐⭐ | 黑洞 — 吸力聲 | Stage 4 球被吸入 | — |
| ⭐⭐ | 黑洞 — 吸入音效 | — | — |
| ⭐⭐ | 地雷 — 引爆聲 | Stage 5 觸發地雷 | 不做瓶子彈飛聲 |
| ⭐ | 挑戰達成 +10 音 | 挑戰任務完成 | 金幣 / 成就音 |
7BGM 鏡
🎵 大廳 BGM
關卡選擇 / 主畫面播放。建議偏向輕快 / 保齡球館氛圍。
🎵 遊戲 BGM(5 關共用)
5 關共用一個遊戲 BGM(不分機關關卡)。
🖼️ UI 規格
1Figma 設計稿 亞哈
亞哈設計稿主頁面。版面草圖 v0.12 已落地(15 個畫面 + 獨立元件庫),亞哈 HUD+字卡 5/18~5/29(r133/r137)+ Lobby/結算/教學 5/25~6/12(r138)接視覺設計。TM 5/22 完整交付 Figma 素材給程式(每個元素的寬×高尺寸)。
📐 畫面規格(v0.12)
- 解析度:1920×1080 橫向(保齡球場景偏寬橫向)
- 15 個畫面(戰鬥畫面 × 3 + 教學頁 × 3 + 藍牙畫面 × 2 + 其餘 7)
- 畫面名稱改用短名(大廳 / 戰鬥畫面 / 關卡選擇 / 結算 / 離開遊戲 ...),不再用長前綴
- 藍牙拆 2 個獨立畫面(搜尋中 + 已連線)
- 獨立元件庫區塊(節點編號
15461:237) - 頁面名稱:
JSG11_保齡球
🔗 其他資源
- Figma 外層流程(pL3ojpKePQmPg0oenQC8Ef)
- FigJam 流程圖(FWSLe1AIFb2uJ3k1XrGgcT)
- 節點對照表:
references/figma-map.md
15461:237)— 30 個元件改一次全畫面同步② 戰鬥畫面拆 3 個狀態:基本(節點
15245:25)/ 選位置(節點 15522:738,兩個橘色三角箭頭)/ 瞄準(節點 15522:858,大黑色直立箭頭)— 對應投擲流程「①旋手腕選位 → ②看時機推出」兩段操作③ 教學頁拆 3 頁:選擇位置 / 丟出保齡球 / 曲球控制(與冰壺「先選位、再推出」分鏡一致)
④ 藍牙拆 2 個獨立畫面:搜尋中(未連線)+ 已連線(手環圖示依裝置型號切換:Jmate1 / Jmate2 / Jmotion)
⑤ 畫面改名:主選單 → 大廳、關卡選擇(舊長名)→ 關卡選擇(短名)、戰鬥暫停 → 離開遊戲
⑥ 離開遊戲文案改:「是否回到大廳?」→「離開時分數不會記錄/確定回到開始畫面?」+ 否(紅)/ 是(綠)
⑦ 新增 8 個元件:載入畫面 / 機關徽章(5 型)/ 選位置箭頭 / 瞄準箭頭 / 分數區塊 / 玩家名稱 / 解鎖分數紙條 / 橘金色確認按鈕
⑧ 主選單半透明蒙版全彈窗套用:模式選擇 / 關卡選擇 / 結算 / 藍牙 × 2 / 教學 × 3 / 離開遊戲,全部彈窗畫面都加半透明黑色背景。
② 排行榜 → 紀錄改名
③ 模式選擇補雙人模式 鎖定按鈕(畫面 v1.0 上線、程式功能 v1.x 才實裝)
④ 關卡選擇右上「下一關解鎖分數 96 分」標籤
設計稿節點編號同步回
references/figma-map.md。
1.1元件庫 亞哈Jason/兔子
v0.12 新增:所有按鈕 / 卡片 / 戰鬥畫面元素 / 徽章 / 對話框 / 教學 / 結算 / 紀錄 / 藍牙都改為「主元件 + 複製品」做法,畫面內全部用複製品拼裝。主元件改視覺一次 → 全畫面複製品自動同步(亞哈 6/1 接視覺只需改主元件)。程式拼裝依複製品節點編號取座標、命名繼承主元件結構。
② 主元件改視覺 → 全畫面複製品自動同步
③ 元件庫節點編號:
15461:237,完整節點對照見 references/figma-map.md
元件清單(30 個,⭐ NEW 8 個)
| 類別 | 元件名稱 | 節點編號 | 樣式變化 | 用途 |
|---|---|---|---|---|
| 按鈕 | 圖示按鈕 | 15461:167 | 8 種:返回 / 暫停 / 上一頁 / 下一頁 / 回首頁 / 問號 / 略過 / 關閉 | 通用「只有圖示」按鈕 |
| 通用按鈕 | 15470:91 | 4 種:是(綠)/ 否(紅)/ 關閉(米)/ 確認(橘金 320×90)⭐ NEW | 離開遊戲 / 結算 / 關卡選擇 / 藍牙 主要動作按鈕 | |
| 大廳按鈕 | 15461:132 | 3 種:教學 / 紀錄 / 回首頁 | 大廳右下膠囊按鈕 | |
| 模式按鈕 | 15461:108 | 2 種:鎖定 / 解鎖 | 模式選擇三個按鈕 | |
| 裝置按鈕 | 15461:176 | 2 種:一般 / 選中 | 藍牙裝置列表 | |
| 分頁按鈕 | 15477:260 | 2 種:目前頁 / 其他頁 | 紀錄頁 1P / 2P 分頁切換 | |
| 卡片 | 關卡卡片 | 15461:36 | 1 variant:純底卡 | 關卡選擇 5 張卡片。v0.15.8(2026-05-22):master 縮為唯一純白底卡(StageId/StageName placeholder 文字 hidden)。Current variant 已刪除(「當前可玩」被動標記從 BW-061 一併移除)、Locked variant 已刪除(v0.15.1)。所有狀態組合在關卡選擇 frame 內疊:已過關 = 底卡 + 金星 / 鎖定 = 底卡 + 黑 50% dim + Badge/Lock / 玩家當前選中 = 底卡 + Frame/CardSelection cyan 框。2026-06-05:卡片上的機關 icon 已移除(Badge/Mechanism component 整組刪除),機關呈現改走遊戲內 3D 模型 / VFX,UI 卡片不再疊機關 icon |
| 戰鬥字卡 | 15461:95 | 8 種:準備 / 全倒 / 洗溝 / 完成 / 新關卡 / 吸入 / 挑戰完成 / HighScore | 共用容器承載 6 種 + 挑戰完成 / HighScore 獨立(共 9 張) | |
| 狀態提示字卡(共用容器) | 15461:94 | — | 各種戰鬥字卡共用底框 | |
| 徽章 | 機關徽章 ⭐ NEW | 15529:307 | 5 種:無機關 / 障礙瓶 / 風 / 黑洞 / 地雷 | 關卡卡片上的機關圖示 |
| 挑戰達成徽章 | 15461:181 | — | 關卡過關金星 | |
| 鎖頭徽章 | 15461:187 | — | 模式選擇 / 關卡選擇 鎖頭 | |
| 戰鬥畫面 | 分數區塊 ⭐ NEW | 15587:2 | — | 左上整合「關卡 + 分數 + 目標」 |
| 挑戰任務面板 | 15461:219 | — | 右側挑戰任務面板 | |
| 球數區塊 | 15461:191 | — | 右上球數 3/10 | |
| 選位置箭頭 ⭐ NEW | 15522:849 | — | 選位置橘色三角箭頭(181×180) | |
| 瞄準箭頭 ⭐ NEW | 15522:892 | — | 瞄準大黑色直線箭頭(108×396) | |
| 玩家名稱 ⭐ NEW | 15470:75 | 2 種位置:左(1P)/ 右(2P) | 雙人模式戰鬥畫面玩家名稱(v1.x 啟用) | |
| 對話框 / 大廳 | 離開對話框底框 | 15461:227 | — | 離開對話框白底圓角面板。v0.15.1(2026-05-20):master 內移除原嵌入的 Yes/No 按鈕,只剩白底圓角;按鈕由 Btn/Common Yes/No instance 拼裝 |
| 解鎖分數紙條 ⭐ NEW | 15573:107 | — | 下一關解鎖分數紙條面板(560×120) | |
| 卡片選擇框 ⭐ v0.15 NEW | 15634:341 | — | 關卡卡片選擇框(340×610,6px 青色邊框 + 4 角金光點 + 24px 外發光)— BW-068 | |
| 藍牙 | 連線狀態區 | 15470:99 | 4 種:Jmate1 (15899:302) / Jmate2 (15470:95) / Jmotion (15899:305) / 未連線 (15470:96)。連線後依裝置名稱前綴自動切換對應圖示 | 左側 1P 狀態區 |
| 裝置列表底框 | 15547:2 | — | 主面板深灰底 + 8px 橘色裝飾框 | |
| 載入 | 載入畫面 ⭐ NEW | 15470:106 | — | 1920×1080 完整載入畫面(JSG BOWLING + 進度條) |
| 紀錄 | 排行榜列 | 15470:119 | 3 態:黑灰列 Default(其他玩家)/ 米色列 CurrentUserInList(自己出現在榜內)/ 黃色列 CurrentUser(底部固定,分數欄為玩家歷史最高分) | 排行榜每一行(v0.15.1 後玩家自己分數只保留最高分,由黃色列呈現) |
| 排行榜面板 | 15547:4 | — | 排行榜深灰底面板(1720×818) | |
| 教學 | 教學頁 | 15470:159 | — | 教學頁白底大圓角容器(含 ‹ › 切頁鈕 + 影片區) |
| 結算 | 結算列 | 15470:130 | — | 結算面板單列 |
| 結算詳情面板 | 15547:6 | — | 結算 4 列圓角白底面板(1000×500) | |
| 最高分徽章 | 15565:2 | — | 突破最高分金色徽章(條件式顯示) |
output/JSG11-bowling/figma/components/,供亞哈 6/1 接視覺時對照參考。檔名 ↔ 節點編號對照見 output/JSG11-bowling/figma/INDEX.md。
2流程圖 UI開發
App 啟動 → 大廳 → JSG11 主選單 → 模式選擇 → 關卡選擇 → 戰鬥 → 結算 → 回大廳。
主選單
關鍵操作流程決議
🔒 教學關卡強制進入
未進過教學關卡前,模式選擇下「單人模式按鈕鎖定」(灰階)。進入教學關卡後(無論是否過關)即解鎖單人模式。
👥 雙人模式畫面上線
JSG11 v1.0 雙人模式畫面已上線(模式選擇含按鈕、紀錄頁含 2P 分頁),程式功能 v1.x 才實裝。現階段鎖定樣式表達「教學關卡尚未完成」。
⚙️ 無設定入口
遊戲內主選單不放設定按鈕,jacfitness 設定統一在 App 大廳。
🔁 沒過關回大廳
沒過 → 回大廳重新選關(不顯示「再試一次」字眼),玩家自行決定是否重打。
315 個畫面清單 亞哈Jason/兔子
v0.12 — 15 個畫面(戰鬥畫面 × 3 + 教學頁 × 3 + 藍牙畫面 × 2 + 其餘 7)。命名鎖結構:亞哈設計時用同樣命名、程式實裝時用同樣命名 → 零翻譯成本。畫面改用短名(不再用長前綴)。
Connet/StatusFrame State=Jmate1(切換左側手環插圖,非框色)
Connet/StatusFrame State=Jmate2(切換左側手環插圖,非框色)
Connet/StatusFrame State=Jmotion(切換左側手環插圖,非框色)
4單關循環流程 UI開發
關卡進場 → 10 球循環 → 結算。每球的 UI 反饋順序如下。
已顯示
(無 3·2·1 倒數)
HUD 右上常駐挑戰面板
v0.8 刪除:Stage 字卡 / 機關介紹字卡 / 挑戰任務字卡 / 3·2·1 倒數 — 玩家在 LevelSelect 已看過全部資訊,進關不重複介紹
操作 gating · 鏡頭切換 · 字卡觸發 · 挑戰 HUD icon 動態 · 黑畫面過場(純黑方案 A)
玩家可用:旋手腕 Roll · 手放下 OnConfirm · 手上抬 OnReadjust(回階段 1)· 揮臂 OnPush
球停下後等 3 秒觀察期(若全倒可提前觸發 Strike)→ 閘門下拉動畫 + 字卡 + 分數彈出 + 挑戰面板即時演出(同步)。⚡ 標記者不等 3 秒、不等球停,觸發瞬間即出。(BW-088,v1.4 2026-05-28)
| 挑戰類型 | 適用 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 後調參;「…」長度與文字上限後續微調。
Gutter / Sucked / Strike 退場
或 Open 球停直接接
過場期間不放任何 UI 元素(無球數提示、無 Stage 編號),純黑。
| Stage | 第 10 球結束時的狀態 | 補演動作 |
|---|---|---|
| Stage 1 達標型 | 仍未達 3 strike | 補演紅槓 fail(DOTween 動畫) |
| Stage 2~5 即時失敗型 | 整關都沒違規(從未紅槓) | 補演 ☑ 成功(DOTween 彈出) → 若是最後一條挑戰 → 觸發 Card_ChallengeClear 字卡(§5.5 即時邏輯延伸到此) |
仍進行中?
Stage 2~5 ☑ 成功
沿用 Lobby Modal 動畫
⚠️ 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,解鎖才出)。
- OnPush 球出手 → 鏡頭停在投擲視角不動(玩家視角看球往前飛)
- 球過截止線 → 切到
_traceCamera開始跟球(無 zoom in,無瓶區近景 —原 v1.2 PinAreaCamera 已刪除) - 倒瓶 / 球停 → 鏡頭固定在球停位置,等字卡演出
- 字卡演出完 → 黑畫面 fade in 0.30s + 黑停留 0.20s(悄悄拉回投擲視角)+ fade out 0.30s(方案 A 純黑,無 UI 提示)
- 選位置 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(2026-05-22)移除 — Card/Stage 縮為 1 variant 純底卡,被動標記取消,主動視覺由 Frame/CardSelection 承擔 | |
_State_Achieved | 挑戰達成 | 金星亮起樣式 |
_State_Failed | 挑戰失敗 | 金星灰掉樣式 |
6戰鬥畫面佈局 亞哈兔子
遊戲中常駐的戰鬥畫面(亞哈視覺、兔子實裝)。v0.12 戰鬥畫面拆 3 個狀態:基本(共用容器顯示中)/ 選位置(左右橘色三角箭頭)/ 瞄準(中央大黑色直立長箭頭),對應投擲流程「選位置→丟出」兩段操作。實際視覺設計待亞哈 6/1~6/12 交付,兔子 5/18 起先用 TM Figma 素材拼裝。
15245:25)— 左上分數區塊「關卡 3 / 136 / 目標 96」、右上球數 + 暫停、右側挑戰任務面板、中央共用容器② 選位置(節點編號
15522:738)— 兩個橘色三角箭頭(181×180),對應「①旋手腕選位」③ 瞄準(節點編號
15522:858)— 中央大黑色直立長箭頭(108×396),對應「②看時機推出」
戰鬥畫面元素清單(v0.12,對齊 Figma 戰鬥畫面 3 個狀態)
- 當前分數(左上)— 絕對數字(例:136)
- 過關門檻(左上分數旁)— 「過 N」(各關不同:24/48/68/88/96)
- 球數計數(右上)— 「3 / 10」
- 關卡標記(右上球數旁)— 「Stage 3」純文字
- 挑戰任務面板(右上常駐)— 「本關挑戰:不洗溝」+ 即時失敗變灰 + 打叉標記(v0.8 起改畫面常駐,不再用進關字卡)。文字過長時跑馬燈循環捲動(貼底 / 不擋左邊 / 碰啟動按鈕停,黑底靜止只跑文字;2026-06-03 會議)
- 暫停按鈕(右上角)— 觸發離開遊戲對話框
- 瞄準箭頭(球道上方)— 階段 2 自動擺動,揮臂瞬間定格
- 狀態提示文字(球道下方)— 準備 / 完成 / 全倒 / 新關卡 / 洗溝 / 吸入 共用容器(詳見「字卡」段落)
7結算頁佈局 亞哈兔子
結算頁元素清單(v0.12 反向同步 Figma)
- 標題「Result」金色大字(取代 v0.7「過關」狀態文字 — 不論過關 / 沒過都顯示 Result)
- 最高分徽章(右上偏移處,節點編號 15565:2)— 條件式顯示:玩家本局突破個人最高分才出現
- 單一中央「結算詳情面板」 圓角面板含 4 行(v0.12 改文案):
- 全倒得分「+N 分」(v0.12 改:原「全倒次數 × N」→ 顯示貢獻分數而非次數)
- 未全倒得分「+N 分」(v0.12 改:原「未全倒次數 × N」)
- 挑戰達成「+10 分」或「Failed」(v0.12 改:原「達成 +10」→ 與全倒 / 未全倒統一單位)
- 總分「N / 96」
- 「繼續」按鈕(右下,使用通用按鈕的「確認」橘金樣式)— 橘色實心(v0.12 改用元件,非 v0.8 原本的金底紅邊)— 取代 v0.7「返回大廳」
- 過門檻 → 點繼續回大廳(解鎖下一關);沒過 → 點繼續回大廳(玩家自選重打或換關,v0.14 無「再試一次」)
8關卡選擇佈局 亞哈Jason
v0.12 改用短名「關卡選擇」(原長名「關卡選擇」)+ 加主選單半透明背景蒙版。機關圖示改用「機關徽章」元件(5 型主元件),亞哈改主元件一次即全 5 卡片同步。
2 種卡片狀態(v0.15.8 — 移除「當前可玩」被動標記)
已挑戰達成
- 純底卡 + 右下角金星徽章(
Badge/ChallengeAchievedinstance) - 顯示機關圖示(左上小框)
- 可重玩拿挑戰加分
鎖定
- 純底卡 + 黑 50% dim rect +
Badge/Lockinstance - 無法點擊
- 需先過前一關 96 分
玩家選中
- 純底卡 +
Frame/CardSelection(cyan 邊框 + 角光點)疊在玩家點選卡片上 → BW-067 - 主動視覺反饋,與「當前可玩」被動標記無關
- 頂部「下一關解鎖分數 96 分」標籤常駐(v0.11 新增)
Card/Stage master 縮為 1 variant(純底卡),「當前可玩」概念取消。5 張卡片中「已解鎖未過關」共用同底卡,玩家主動視覺反饋由 Frame/CardSelection 承擔。
9畫面動畫 亞哈綠豆Jason / 兔子
全部畫面動畫走 DOTween(程式動畫套件)。本節整理彈窗、戰鬥字卡、戰鬥畫面元素自動擺動、條件彈出、按鈕小互動的「時間 / 緩動曲線 / 縮放 / 透明度」參數。2026-05-19 v0.5 拍板:瞄準箭頭擺動 左右各 45° / 6 秒一輪、來回擺動端點慢中間快(撤回 v0.4 雙段串接,因視覺有「中間定格」感;保留 v0.4 角度 / 週期);全倒字卡 不加震屏(v0.2 拍板沿用)。詳見原始規格 games/JSG11-bowling/ui-animation.md。
三大類動畫
- 彈窗(9 個畫面,含半透明黑色蒙版)
- 戰鬥字卡(共用容器 6 種 + 獨立挑戰完成 + 獨立 HighScore)
- 戰鬥畫面元素自走 / 條件彈出(瞄準箭頭 / 選位置箭頭 / 最高分 / 載入畫面)
設計禁忌
- 不用 Unity 內建動畫工具(程式看不懂、複雜度爆炸)
- 不用無限循環 + 高頻動畫(例外:瞄準箭頭擺動、按鈕滑過)
- 半透明蒙版區點擊不關閉彈窗(必須點關閉 / 確認按鈕)
分工
- 視覺品味 / 動畫節奏 = 亞哈
- 字卡動態 + 粒子 = 綠豆
- 大廳畫面實裝 = Jason;戰鬥畫面實裝 = 兔子
🎬 即時預覽 — 6 種動畫
用網頁動畫模擬遊戲內動畫節奏。瞄準箭頭為無限循環自動播放,其餘點「重播」觸發。按鈕小互動將滑鼠移到按鈕上即可觸發。
① 瞄準箭頭擺動v0.5 拍板
週期:6.0 秒(半週期 3.0 秒)
擺動節奏:來回擺動,端點慢中間快
推球時:立刻凍結停住
② 彈窗 + 半透明背景同步演出 · 9 個畫面共用
面板放大:85% → 100%(0.35 秒 帶輕微回彈)
面板浮現:透明 → 不透明(0.25 秒)
關閉:面板先收 + 半透明背景晚 0.05 秒
| 畫面 | 開啟觸發 | 關閉觸發 |
|---|---|---|
| 模式選擇 | 大廳「點擊開始遊戲」 | 選任一模式 / 返回 |
| 關卡選擇 | 模式選擇「單人模式」「教學關卡」 | 選關 + 確認 / 返回 |
| 藍牙搜尋中 | 進入單人/雙人偵測未連線 | 偵測到目標裝置 / 返回 |
| 教學頁 1 | 首次教學關卡 / 大廳「教學」 | 下一頁 / 關閉 |
| 結算 | 第 10 球停下 + 結算完 | 繼續按鈕 |
| 離開遊戲 | 戰鬥中按暫停圖示 | 否(繼續)/ 是(回大廳) |
離開遊戲特例:用戰鬥場景半透明背景,「否」按鈕設預設焦點。
③ 最高分徽章彈跳出現
放大:0 → 1.2 倍 → 1.0 倍(0.60 秒 彈跳)
浮現:透明 → 不透明(0.30 秒)
條件:玩家本局突破個人最高分
④ 大廳「點擊開始遊戲」綠字無框
呼吸:放大 1.0↔1.06 倍 + 透明度 1.0↔0.75(1.6 秒 來回擺動永久)
點擊後:觸發模式選擇彈窗
📋 完整參數表
「節奏」欄是給程式抓動畫節奏用的英文名稱,括號內為白話說明。
| 類別 | 動畫 | 時間 | 節奏 | 起 → 終值 |
|---|---|---|---|---|
| 彈窗 | 半透明背景 浮現 / 退場 | 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 | |
| 戰鬥畫面元素 | 瞄準箭頭擺動 | 6.0 秒一輪(半輪 3.0 秒) | InOutSine 來回擺動 無限(端點慢、中間快) | 左右各 45°(v0.5 拍板:保留 v0.4 角度週期,撤回 v0.4 雙段串接,改回 v0.2 節奏) |
| 選位置箭頭確認 | 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(v0.5 拍板 2026-05-19:±45° / 6.0s / InOutSine Yoyo — 撤回 v0.4 雙段串接) public const float AimArrowSwingHalf = 3.00f; // 半週期(端點→端點),總週期 6.0s public const float AimArrowSwingAngle = 45.0f; // 度,±45° 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
⚙️ 開發規格
1程式重做範圍兔子/Jason
除演算法層外全部重做(包含遊戲規則)。本企劃書 dev panel 採「企劃流程圖 + 資料結構」導向,code 細節由 RD 自決。
保留 vs 重做邊界
✅ 演算法層 — 唯一保留
- JPlayCurlingAlgorithm(手環 IMU → 手腕動作判讀)
DetectRotate(Roll 角度 → Direction)PushCurling(揮臂力道計算)OnPush/OnRotate/OnConfirm/OnReadjust事件介面- Andros 5/15 v1 演算法交付仍有效
- 角加速度 → forward 軸 ω(新增)
✅ Excel 資料表 — 保留
JSG11Bowling_LevelSettingJSG11Bowling_PinSettingJSG11Bowling_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 ω | ⭐ 新增 | 旋轉球路(Andros 收斂映射曲線) |
📁 冰壺骨架位置(不沿用,僅供 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 層全部重做。
關鍵 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 過場拉回投擲視角」。
_traceCamera 接管看曲球軌跡 + 倒瓶)。
_overHeadCamera 流程整段移除。
- 刪除
_pinAreaCamera(瓶區近景 zoom in 鏡頭) - OnPush 鏡頭不動(改為球過截止線才開始
_traceCamera跟球) - 新增黑畫面 fade 過場(字卡退場 → 純黑 0.30s + 0.20s + 0.30s → 鏡頭悄悄拉回投擲視角)
4旋轉球路演算法Andros
手環角加速度 → 球體 forward 軸 angularVelocity 的連續映射。Andros 在演算法 code 內調,不另開 Excel 表。
// JSG11_BallSpinController // 投擲瞬間(OnPush 觸發時)執行 public void ApplySpin(Rigidbody ball) { // 1. 讀手環角加速度(Andros 提供) float angularAccel = wristband.GetAngularAcceleration(); // 2. 依映射曲線換算為球體 forward 軸 angularVelocity // 映射方式:線性 / 分段 / 上限值 — Andros 收斂中 float omega = MapToAngularVelocity(angularAccel); // 3. 套用到球體 transform.forward(向前軸 / Z 軸) ball.angularVelocity = ball.transform.forward * omega; // → Unity 物理引擎依此產生軌跡彎曲(連續量,無離散等級) }
設計原則
- 連續映射,非隨機抽選
- 無離散等級(不是 5 種球路)
- 無 UI 提示(玩家從球行為學)
- 不扭手腕 → ω ≈ 0 → 球直走
- 扭得越大 → ω 越大 → 軌跡彎得越多
待 Andros 收斂
- 映射曲線(線性 / 分段 / 對數)
- 上限值(避免暴衝)
- 不靈敏區(避免手抖誤觸)
- QC 必測:「靜止手腕投擲走直線」
5計分流程圖 Jason
計分規則重新撰寫。本段為企劃流程,RD 依此實作(Component 名稱與切分自決)。
全倒?
判定規則
| 結果 | 條件 | 得分 | 關鍵規則 |
|---|---|---|---|
| Open | 正規瓶沒倒完 | 倒幾瓶 = 幾分 | — |
| Strike | 正規瓶全倒 | 15(10+5) | 只看正規瓶,地雷彈飛瓶也算倒下 |
| 挑戰 | binary 達成 | +10~+50(各關遞增) | 計入過關門檻 |
- Strike 判定只看正規瓶:障礙瓶 / 地雷彈飛瓶倒下不影響邏輯
- Stage 5 地雷彈飛瓶算倒下:仍可 Strike,但挑戰失敗(限制違規 → 失去 +50)
- 無 Spare
- 無連擊獎勵(連續 Strike 各自 +5,不額外加碼)
- 強制 10 球(提前達標也要打完)
基礎滿分 = 10 球 × (正規瓶 + 5) = 150 · 挑戰加分 +10/+20/+30/+40/+50(各關遞增) · 門檻 24/48/68/88/96(ScoreThresholdForNormal)
6三機關互動流程 兔子/Jason
三機關位置固定(Unity 場景管理)。參數寫入 JSG11Bowling_MechanismSetting 的 TrapValue: double[](詳見 §7)。本段為企劃流程,RD 依此實作。
💨 Stage 3 風吹
風場區域
加側向分量
🕳️ Stage 4 黑洞
黑洞
拉向中心
💣 Stage 5 地雷
地雷
炸飛正規瓶
全倒?
挑戰任務追蹤
| Stage | 挑戰 | 判定方式 | 失敗時機 |
|---|---|---|---|
| 1 | 至少 3 次 Strike | 結算統計 | 結算時 Strike < 3 |
| 2 | 不擊倒任何障礙瓶 | 即時失敗 | 任一障礙瓶倒下 |
| 3 | 不洗溝 | 即時失敗 | 任一球進溝 |
| 4 | 不要碰到黑洞 | 即時失敗 | 任一球被吸 |
| 5 | 不要碰到地雷 | 即時失敗 | 任一球引爆 |
7Excel 表(3 張)RD
參考 JSG9Curling / JSG08Golf 既有結構。多語系 key / 美術資源 / 機關位置 / 滿分計算 / 球手感 — 皆不寫進企劃表。
Jacfitness_Client/Excel/JSG/📊 JSG11Bowling_LevelSetting
對應 levels.md 每一列。挑戰合進此表(不另開)。
Id: long LevelTypeId: int (0=教學 1=一般) PinComposition: int[] // → PinSetting.Id MechanismIds: int[] // → MechanismSetting.Id(可空) UnlockNextLevelScore: int UnlockNextLevelID: int ChallengeType: enum // StrikeCount/NoObstaclePin/ // NoGutter/NoBlackHole/NoLandmine ChallengeThreshold: int // 3/0/0/0/0
影片不入表:機關規則影片改用 Unity 素材嵌入,併入教學頁(ui-layout §2.5)一起做
📊 JSG11Bowling_PinSetting
仿 JSG9 ObjectSetting,極簡。Strike 判定靠 PinType 程式判斷。
Id: int PinType: enum // Regular / Obstacle Score: int // 1 / 0 Mass: double
📊 JSG11Bowling_MechanismSetting
仿 JSG08 TrapValue。陣列含義依 MechanismType 不同。
Id: int MechanismType: enum // Wind / BlackHole / Landmine TrapValue: double[] // 風: [強度, 週期秒] // 黑洞: [峰值力, 曲線類型] // 0=線性 1=反平方 // 地雷: [爆炸 impulse, 連鎖 0/1]
📖 欄位逐欄白話解釋(TM / 老闆視角)
上方 3 張卡片是給 RD 的 schema 摘要,本段是給 TM、老闆、新進 RD 的白話欄位字典。完整版見 KB games/JSG11-bowling/excel-schema.md。
🟢 通用結構 — 每張表前 6 列是什麼?
這是 Jacfit Server 端的 Excel 規範格式(JSG09/JSG10 都同一套):
| 列 | 內容 | 給誰看 |
|---|---|---|
Row 1 | AppType.ClientH / AppType.Lobby | Server 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~5 | 0~5 |
| #註解 | 程式不會讀,純備註欄。給人看的關卡說明 | 「Stage 1 標準」… |
關卡類別LevelTypeId | 0 = 教學、1 = 一般。Client 判斷要不要走教學流程 | 教學=0、其他=1 |
瓶種組成PinComposition | 用 PinSetting._id 組成的陣列,列出場上要擺哪些瓶。一個數字 = 一顆瓶 | Stage 1:1,1,1,1,1,1,1,1,1,1Stage 2: 1×10, 2,2,2 |
機關IDMechanismIds | 指定這關套哪些機關,0 = 無機關 | Stage 3=1(風) Stage 4=2(黑洞) Stage 5=3(地雷) |
解鎖下關分數UnlockNextLevelScore | 拿到幾分才能解鎖下一關。-1 = 最後一關 | 24 / 48 / 68 / 88 / 96(各關遞增) Stage 5 = -1 |
解鎖關卡IDUnlockNextLevelID | 達標後解鎖的下一關 _id | 1→2→3→4→5 |
挑戰類型ChallengeType | 0 無 / 1 StrikeCount / 2 NoObstaclePin / 3 NoGutter / 4 NoBlackHole / 5 NoLandmine | 對應 levels.md 每關「+N 加分條件」 |
挑戰門檻值ChallengeThreshold | 配合挑戰類型用的數值。例:Stage 1「至少 3 次 Strike」→ 3 | Stage 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=Landmine | 1、2、3 |
機關係數TrapValue | double[] 陣列,意義依機關類型而不同(省欄位的設計) | 詳下表 |
TrapValue 陣列詳解(同欄位、不同機關意義不同):
| 機關 | TrapValue | 第 1 個值 | 第 2 個值 |
|---|---|---|---|
| 風 Wind | 5.0, 0.0 | 強度 = 5.0 | 週期秒 = 0.0 → 0 表「固定風」 |
| 黑洞 BlackHole | 20.0, 1.0 | 峰值力 = 20.0 | 曲線類型 = 1(反平方衰減) |
| 地雷 Landmine | 15.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)。代價是必須靠 #註解 欄寫清楚每個位置的意義,否則沒人看得懂陣列裡的數字代表什麼。
📋 完整功能表
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 連續擺動,無鎖定動作;±45° / 6s 週期 InOutSine Yoyo,端點慢、中間快) | 兔子 | 🟢 | v1.2 新增。取代冰壺 SetObjectRotation()。參數 2026-05-19 v0.5 拍板(保留 v0.4 ±45°/6s 角度週期,撤回 v0.4 OutSine+InSine 雙段串接 — 視覺有「中間定格」感,改回 v0.2 ease),詳 ui-animation.md §3.2 |
| 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 | 🟢 | 線性/分段待 Andros 收斂 |
| BW-010 | 旋轉球路 | 手腕未扭 → 球走直線(不靈敏區) | Andros | 🟢 | 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 變更:不立即跟球) | 兔子 | 🟢 | v1.3 拍板(2026-05-27 DEC-JSG11-015):OnPush 後鏡頭停在投擲視角,等球過截止線才切 |
| BW-022 | 鏡頭 | 過截止線 → _traceCamera 開始跟球(無 zoom in,無瓶區近景) | 兔子 | 🟢 | v1.3 改寫(2026-05-27 DEC-JSG11-015):~~原 PinAreaCamera 瓶區近景刪除~~,沿用冰壺 TraceCameraChangeOverHeadCamera 切換機制但目標改 _traceCamera(無 zoom in) |
| BW-023 | 鏡頭 | 倒瓶結束 / 球停下 → 字卡演出 → 黑畫面 fade 過場拉回投擲視角 → 選位置 HUD 顯示解封(僅非最後一球) | 兔子 | 🟢 | v1.3 + v1.4(2026-05-28):純黑 fade in 0.30s + 黑停留 0.20s + fade out 0.30s。v1.4 補:最後一球(Finish 後)不走黑畫面,直接切結算(見 BW-089) |
| BW-024 | 鏡頭 | 追球停止線 — _traceCamera 跟球至設定 Z 軸位置時停止追球(鏡頭停留,球繼續滾入結算判定) | 兔子 | 🟢 | v1.4 新增(2026-05-28 會議):補對 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 5 地雷彈飛仍算 Strike 但挑戰失敗 |
| BW-030 | 基礎計分 | UI 顯示絕對分數(不顯示百分比) | 兔子 | 🟢 | — |
| BW-031 | 挑戰任務 | Stage 1 挑戰 — 至少 3 次 Strike(結算統計) | Jason | 🟢 | — |
| BW-032 | 挑戰任務 | Stage 2 挑戰 — 不擊倒障礙瓶(即時失敗) | Jason | 🟢 | — |
| BW-033 | 挑戰任務 | Stage 3 挑戰 — 不洗溝(即時失敗) | Jason | 🟢 | — |
| BW-034 | 挑戰任務 | Stage 4 挑戰 — 不要碰到黑洞(即時失敗) | Jason | 🟢 | — |
| BW-035 | 挑戰任務 | Stage 5 挑戰 — 不要碰到地雷(即時失敗) | Jason | 🟢 | — |
| BW-036 | 挑戰任務 | ChallengeTracker — 即時失敗 API | Jason | 🟢 | — |
| BW-037 | 挑戰任務 | ChallengeTracker — 結算判定 API | Jason | 🟢 | — |
| BW-038 | 失敗處理 | 限制違規 → 改加分制(違規不扣分,失去該關挑戰加分 +10~+50 各關遞增) | Jason | 🟢 | — |
3. 5 關設計(Stage 3/4/5 負責 RD 待討論先空著) (13 項)
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-039 | Stage 1 標準 | 10 正規三角陣配置 | Jason | 🟢 | — |
| BW-040 | Stage 1 標準 | 挑戰任務:至少 3 次 Strike | Jason | 🟢 | — |
| BW-041 | Stage 2 障礙物 | 3 障礙瓶前排佈局 | Jason | 🟢 | — |
| BW-042 | Stage 2 障礙物 | 障礙瓶倒下跟正規瓶一起重置邏輯 | Jason | 🟢 | — |
| BW-043 | Stage 2 障礙物 | 挑戰任務:不擊倒障礙瓶 | Jason | 🟢 | — |
| BW-044 | Stage 3 風吹 | 風場機關(位置固定) | 兔子 | 🟢 | — |
| BW-045 | Stage 3 風吹 | 挑戰任務:不洗溝 | 兔子 | 🟢 | — |
| BW-046 | Stage 4 黑洞 | 黑洞機關(位置固定) | Jason | 🟢 | — |
| BW-047 | Stage 4 黑洞 | 挑戰任務:不要碰到黑洞 | Jason | 🟢 | — |
| BW-048 | Stage 5 地雷 | 地雷機關(位置固定) | Jason | 🟢 | — |
| BW-049 | Stage 5 地雷 | 地雷彈飛瓶物理 | Jason | 🟢 | — |
| BW-050 | Stage 5 地雷 | 挑戰任務:不要碰到地雷 | 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 | 🟢 | 2026-06-05 取消:卡片上的機關 icon 移除,Badge/Mechanism component(5 型)整組刪除(Figma + 雲端 Drive + Unity bundle)。機關呈現改走遊戲內 3D 模型 / VFX,UI 卡片不再疊機關 icon。(原 v0.15.1 拆界:Card/Stage master 不含機關 icon、由 Badge/Mechanism instance 疊) |
| BW-064 | 關卡選擇 | 卡片內容 — 挑戰達成標記 | 亞哈 / Jason | 🟢 | v0.15.1 拆界:Card/Stage master 不含金星;由 Badge/ChallengeAchieved instance 疊在 Stage frame 已通關卡片右下 |
| 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);v0.15 從 §11 移入教學頁區塊。對齊 BW-009 旋轉球路 |
| BW-071 | 教學頁 | 上一頁按鈕 | 亞哈 / Jason | 🟢 | — |
| BW-072 | 教學頁 | 下一頁按鈕 | 亞哈 / Jason | 🟢 | — |
| BW-073 | 紀錄頁 (Record) | 紀錄頁完整功能 — 1P/2P tab 切換(2P 內容 RD v1.x 才實裝資料源) + 可滑動排行榜 + 玩家自己若在榜內,滑動時可看到自己的實際排行並以米色列區分 + 底部固定黃色自己的排行列(未上榜顯示「-」+ ID + 玩家歷史最高分)+ CP0 待決:各關獨立 vs 統一 | 亞哈 / Jason | 🟢 | 2026-06-04 補充:Record/RankingRow 三態為 Default / CurrentUserInList(米)/ CurrentUser(黃);component 皆不含文字,排名/名稱/分數由 layout/程式注入。v0.15.1 移除「我的最高分」獨立顯示。外觀詳 ui-layout.md §2.7 |
| BW-074 | 藍牙連線 | 藍牙連線完整功能 — 裝置列表(最多 5 個)+ 兩 frame 切換(Connet_Searching 未連線 / Connet_Connected 已連線)+ 偵測到目標裝置自動切態 + cyan highlight 選中裝置 + 連線狀態白字 / 紅字提示 + 「請將裝置配戴於右手腕」配戴指引;連線成功後 Connet/StatusFrame 依裝置名稱前綴切換圖示(Jmate1 / Jmate2 / Jmotion) | 亞哈 / Jason | 🟢 | v0.15 由 BW-076~080 合併。外觀(面板色 / sticky tag / 手環圖示 3 variant / LED 亮燈)詳 ui-layout.md §2.8 Connet 兩 frame + v0.12 Component(Connet/StatusFrame 4 variant:Jmate1 15899:302 / Jmate2 15470:95 / Jmotion 15899:305 / Unconnected 15470:96 / Connet/DeviceList_bg / Btn/Device) |
| BW-075 | 藍牙連線 | 繼續按鈕(連線成功後可點 → 進入下一步) | 亞哈 / Jason | 🟢 | 功能項;外觀詳 ui-layout.md |
5. UI - 戰鬥(亞哈視覺 v2.2 r137~138 + 兔子 程式 v2.2 r140) (26 項)
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-076 | 進場 | Ready 字卡(單字 READY,無 3·2·1 倒數)— 每關只播 1 次(Loading 完場景 + BGM 起後),不是每球 | 亞哈 / 兔子 | 🟢 | v0.8 簡化 + v0.6 觸發補完(2026-05-27 DEC-JSG11-016) |
| BW-077 | HUD | 當前分數(左上) | 亞哈 / 兔子 | 🟢 | — |
| BW-078 | HUD | 過關門檻顯示 | 亞哈 / 兔子 | 🟢 | — |
| BW-079 | HUD | 球數計數(右上) | 亞哈 / 兔子 | 🟢 | — |
| BW-080 | HUD | Stage 標記 | 亞哈 / 兔子 | 🟢 | — |
| BW-081 | 挑戰面板 | 面板視覺 3 態 — 進行中(顯示任務描述)/ 成功(☑ icon + 灰字)/ 失敗(紅槓 + 灰字) | 亞哈 / 兔子 | 🟢 | v0.6.1 修正(2026-05-27 DEC-JSG11-016a):☑ icon 沿用 JSG05 棒球教學打勾風格;進行中 = 顯示任務描述文字本身 |
| BW-082 | 挑戰面板 | 即時失敗型(Stage 2~5):違規條件達成當下瞬間演紅槓 DOTween 動畫 + 灰字(不震動 / 不配音) | 亞哈 / 兔子 | 🟢 | v0.6.1 改寫(DEC-JSG11-016a):適用 Stage 2 障礙瓶 / Stage 3 洗溝 / Stage 4 黑洞 / Stage 5 地雷。動畫參數 token 詳 ui-animation.md §5 |
| BW-083 | 挑戰面板 | 達標型即時成功(Stage 1 至少 3 strike):條件達成當下瞬間 → ☑ icon DOTween 彈出 + 灰字 | 亞哈 / 兔子 | 🟢 | v0.6.1 修正(DEC-JSG11-016a):~~原「整關 10 球結算完 + 未違規才出」~~改為「累計 strike 達 3 的那一球結算完即出」 |
| BW-084 | 挑戰面板 | 達標型補演 fail(Stage 1):第 10 球結束時若仍未達 3 strike → 結算前演紅槓 DOTween 動畫 + 灰字 | 亞哈 / 兔子 | 🟢 | v0.6.1 新增(DEC-JSG11-016a):達標型挑戰特有的「結算前補演 fail」邏輯 |
| BW-085 | 結算字卡 | Card_ChallengeClear 字卡 — 所有挑戰達成的瞬間即出(不等第 10 球結算頁) | 亞哈, 綠豆 / 兔子 | 🟢 | v0.6.1 修正(DEC-JSG11-016a):~~原「結算頁觸發」~~改為「最後一條挑戰達成瞬間即出」。現只 1 挑戰 → 等於 HUD ☑ 演出後立即;未來多挑戰 → 最後一條達成瞬間 |
| BW-086 | 操作 gating | OnPush 觸發瞬間 → 球停 → 字卡 → 黑畫面過場期間,手環輸入全部封鎖;選位置 HUD 顯示才解封 | 兔子 | 🟢 | v0.6 新增(2026-05-27 DEC-JSG11-016):JSG11_BattleInputGate 統一 gate |
| BW-087 | 過場演出 | 字卡退場後 → 純黑 fade in 0.30s + 黑停留 0.20s(鏡頭悄悄拉回投擲視角)+ fade out 0.30s | 兔子 | 🟢 | v0.6 新增(2026-05-27 DEC-JSG11-016):方案 A 純黑,無球數提示或 Stage 編號。v1.4 補(2026-05-28):僅適用非最後一球;最後一球見 BW-089 |
| BW-088 | 結算 gating | 球停下後等 3 秒 → 閘門下拉動畫 → 字卡 + 分數 + 挑戰面板同步演出 | 兔子 | ⬜ | v1.4 新增(2026-05-28 會議):統一所有觸發路徑(碰判定點 / 進溝 / Strike 即時 / 球低速判定);Animator 由飯茄(場景)確認 |
| BW-089 | 結算流程 | 最後一球字卡序列 — Finish → 直接切結算頁(無黑畫面 fade)→ HighScore(破紀錄才出)→ NewStage(解鎖才出);結算頁進退場沿用 Lobby Modal 動畫設定(dim 0→0.6 / panel scale 0.85→1.0 OutBack) | 兔子 | 🟢 | v1.4 新增(2026-05-28 會議):覆蓋原 BW-023 + BW-087 在最後一球的黑畫面 fade;參考 BW-178 Lobby Modal 動畫 token |
| BW-090 | 投擲 UI | 瞄準箭頭自走擺動視覺(±45° / 6s 週期 InOutSine Yoyo,端點慢、中間快) | 亞哈 / 兔子 | 🟢 | 參數 2026-05-19 v0.5 拍板(保留 v0.4 ±45°/6s,撤回 OutSine+InSine 雙段),詳 ui-animation.md §3.2 + §5 token |
| BW-091 | 單球字卡 | Strike 字卡(OutBack 進場 + punchScale 0.1;不加震屏 2026-05-18 拍板)— 若挑戰達標,後接 Challenge Clear 字卡(BW-085) | 亞哈 / 兔子 | 🟢 | v1.4 補(2026-05-28):補對播放順序「Strike → Challenge Clear」;詳 ui-animation.md §2.1 + §7.1 |
| BW-092 | LeaveGame 視窗 | LeaveGame 確認對話框視覺(白底圓角 Dialog/LeaveGame_bg + 文案「離開時分數不會記錄/確定回到開始畫面?」+ 否(紅)/ 是(綠)Btn/Common Yes/No + GameSceneBehind_dim) | 亞哈 / 兔子 | 🟢 | v0.12 改名(原 UIJSG11_Battle_Pause)+ 文案改;沿用 shared/pause v2.0 容器;v0.15.1(2026-05-20)拆界:Dialog/LeaveGame_bg master 內不含 Yes/No 按鈕,按鈕由 Btn/Common Yes/No instance 拼裝 |
| BW-093 | LeaveGame 視窗 | 否(紅)/ 繼續遊戲(恢復球次/分數/挑戰狀態) | 兔子 | 🟢 | v0.12 改按鈕語意 |
| BW-094 | LeaveGame 視窗 | 是(綠)/ 回大廳(當局放棄,不計分) | 兔子 | 🟢 | 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 | 🟢 | v1.4 新增(2026-05-28 會議):對應地雷彈飛 / 風場吹偏等極端情境 |
| 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 | 通用 VFX | Ready 字卡 | 兔子, 亞哈, 綠豆 | 🟢 | — |
| BW-117 | 通用 VFX | Finish 字卡 — 最後一球結束後播放,播完直接切結算(無黑畫面 fade) | 兔子, 亞哈, 綠豆 | 🟢 | v1.4 補(2026-05-28 會議):與 BW-089 配合 |
| BW-118 | 通用 VFX | New Stage 進場字卡 — 在 HighScore 字卡(BW-119)後播放,僅解鎖新關卡時觸發 | 兔子, 亞哈, 綠豆 | 🟢 | v1.4 補(2026-05-28 會議):補對結算字卡序列位置 |
| BW-119 | 結算字卡 | HighScore 字卡 — 結算頁切入後,若該關打破玩家歷史最高分則彈出(金字 + 徽章 + +X 提示) | 兔子, 亞哈, 綠豆 | 🟢 | v1.4 新增(2026-05-28 會議):序列: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 動態調整」實作;詳 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!」字卡 | 兔子, 亞哈, 綠豆 | 🟢 | 碰溝即彈字卡 → 下一球(球次照算,挑戰即時失敗 → 失去 +10) |
| BW-128 | 機關 VFX | 洗溝 VFX — 警示閃光 | Jason, 綠豆 | 🟢 | — |
| BW-129 | 機關 VFX | 黑洞 VFX — 旋渦動畫 | Jason, 綠豆 | 🟢 | — |
| BW-130 | 機關 VFX | ~~黑洞 VFX — 球被吸入扭曲效果~~ — 砍掉(2026-06-22):見 DEC-JSG11-029 | Jason, 綠豆 | ❌ | — |
| 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 | 通用 SFX | Ready 提示音 | 兔子, 鏡 | ⬜ | — |
| BW-136 | 通用 SFX | Finish 提示音 | 兔子, 鏡 | ⬜ | 取代過關 PASS 音 / 過關慶祝光效 |
| BW-137 | 通用 SFX | New Stage 進場字卡音 | 兔子, 鏡 | ⬜ | 對應 BW-117 字卡,也作為解鎖下一關回饋音 |
| BW-138 | 通用 SFX | 球出手音 | 兔子, 鏡 | ⬜ | — |
| BW-139 | 通用 SFX | 球滾動音 | 兔子, 鏡 | ⬜ | — |
| BW-140 | 撞瓶 | 撞瓶聲(單一音檔) | 兔子, 鏡 | ⬜ | 大/小力撞擊合 1 |
| BW-141 | 撞瓶 | 球瓶倒下音 | Jason, 鏡 | ⬜ | — |
| BW-142 | Strike | Strike 音效(單一音檔) | 兔子, 鏡 | ⬜ | — |
| BW-143 | 機關 SFX | 倒入溝 gutter 音 | Jason, 鏡 | ⬜ | 對應 BW-126 Gutter 字卡音,Stage 3 挑戰失敗 |
| BW-144 | 機關 SFX | 障礙瓶倒下警示音 | Jason, 鏡 | ⬜ | Stage 2 |
| BW-145 | 機關 SFX | 風場 — 風吹聲 | 兔子, 鏡 | ⬜ | Stage 3(風吹聲已足夠,球偏移聲於 v0.11.1 已砍) |
| BW-146 | 機關 SFX | 黑洞 — 吸力聲 | Jason, 鏡 | ⬜ | Stage 4 |
| BW-147 | 機關 SFX | 黑洞 — 吸入音效 | Jason, 鏡 | ⬜ | — |
| BW-148 | 機關 SFX | 地雷 — 引爆聲 | Jason, 鏡 | ⬜ | Stage 5 |
| BW-149 | 結算 SFX | 挑戰達成 +10 音(金幣/成就) | 兔子, 鏡 | ⬜ | — |
9. BGM(v2.2 r143 鏡) (2 項)
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-150 | BGM | 大廳 BGM | Jason, 鏡 | ⬜ | Alpha 用冰壺 BGM 佔位,正式版待 v2.5 |
| BW-151 | BGM | 遊戲 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-156 | Excel 表 | JSG11Bowling_LevelSetting | 待 RD | ⬜ | 關卡表:StageId / LevelTypeId(0教學 1一般)/ 瓶種組成 int[] / 機關 ID int[] / 解鎖下關分數 / 解鎖關卡 ID / 挑戰類型 enum / 挑戰門檻值 |
| BW-157 | Excel 表 | JSG11Bowling_PinSetting | 待 RD | ⬜ | 瓶種表(仿 JSG9 ObjectSetting):PinId / 註解 / PinType(Normal/Obstacle)/ 分數 / 重量 |
| BW-158 | Excel 表 | 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-164 | QC 必測 | 靜止手腕投擲走直線 | 兔子 | 🟢 | — |
| BW-165 | QC 必測 | 5 關門檻平衡 | 兔子, Jason | ⬜ | — |
| BW-166 | QC 必測 | 挑戰任務即時失敗判定 | Jason | 🟢 | — |
| BW-167 | QC 必測 | 障礙瓶倒下跟正規瓶一起重置邏輯 | QC | ⬜ | — |
| BW-168 | QC 必測 | 地雷彈飛 Strike 判定 | QC | ⬜ | — |
| BW-169 | QC 必測 | 5 關全通關流程 | 兔子, Jason | ⬜ | — |
| BW-170 | QC 必測 | 各 Stage 重玩流程 | 兔子, Jason | ⬜ | — |
CP
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-171 | CP | CP 一次驗收 @ 7/7(row 136) | 小曹 | ⬜ | — |
11. UI 動畫實裝(v0.14 新增 / v0.15 重整)— 對齊 ui-layout v0.12 + ui-animation v0.5 (12 項)
Lobby 動畫(亞哈視覺 + Jason 程式)
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-172 | 載入畫面 | Loading/Screen 1920×1080 完整載入畫面(JSG BOWLING + 進度條) | 亞哈 / Jason | 🟢 | v0.12 新增 component(nodeId 15470:106);v0.3.2 拍板:不做動畫(純切場景 + fillAmount 真實進度回呼) |
| BW-173 | Lobby CTA | 「點擊開始遊戲」呼吸動畫(scale 1.0↔1.06 + alpha 1.0↔0.85,1.6s InOutSine Yoyo 永久循環) | Jason | 🟢 | ui-animation §3.5.2 + token LobbyCtaBreathePeriod=1.60f |
| BW-174 | Lobby 進場 | Lobby 進場 stagger 序列(bg fade-in 0.3s + logo 0.4s + CTA 0.35s + 右下三膠囊 stagger 0.08s/個 ) | Jason | 🟢 | ui-animation §3.5 + token LobbyBg/Logo/Cta/BtnStagger |
| BW-175 | Tab 切換 | Tab 切換動畫 — 被選 Tab 輕彈一下(縮放),底色跟著換,底線指示器橫向滑過去(0.30s),內容區淡出入換頁 | Jason | 🟢 | 套用 Record 1P/2P + Tutorial Prev/Next;ui-animation §3.5.4(token:punch 1.0→1.08→1.0、OutCubic posX) |
| BW-176 | Btn tap 反饋 | 全遊戲按鈕點擊回饋 — 所有按鈕點下去縮到 92% 後彈回,讓玩家感覺有按到(適用:一般按鈕、圖示按鈕、Lobby 三膠囊、已解鎖模式按鈕);手機 tap-only 無 hover(v0.3 拍板) | Jason, 兔子 | 🟢 | ui-animation §4 + token BtnPressDown/Up(scale 1.0→0.92→1.0 / 0.08s InQuad + 0.12s OutBack) |
| BW-177 | Lobby 動畫 | Lobby Modal 連續轉場 — Lobby → ModeSelect → Stage 同 dim 層複用,新 panel 在舊 panel 出 50% 時提早 0.1s 銜接進場 | Jason | 🟢 | v0.15 從 §11.B 移到 §11.A Lobby 範疇;ui-animation §1.6 |
| BW-178 | Lobby 動畫 | 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 | 🟢 | v0.15 從原 BW-181 拆出 Lobby 部分;ui-animation §1.2-1.5 + token ModalDim/Panel* |
戰鬥動畫 / HUD 元件(亞哈視覺 + 兔子程式 + 綠豆字卡)
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-179 | ScoreBlock 整合元件 | HUD/ScoreBlock(左上整合 Stage + 分數 + 目標)取代 BW-084/085/087 散項實裝 | 亞哈 / 兔子 | 🟢 | v0.12 新增 component(nodeId 15587:2);BW-084/085/087 視覺仍保留但實裝為單一 component。2026-06-05:不嵌字規約擴及 HUD 動態元件 — ScoreBlock / ScoreItem / ChallengeTask / UnlockHint master 不含文字(純底卡),Stage / 分數 / 目標 / 挑戰文字由 layout / 程式於執行期注入 |
| 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)+ 關閉反向 | 亞哈 / 兔子 | 🟢 | v0.15 從原 BW-181 拆出戰鬥部分;ui-animation §1.2-1.5 + token ModalDim/Panel* |
| BW-181 | HUD 字卡進退場 | Card/StatusHint 共用容器 6 種狀態進退場(Ready/Finish/Strike/NewStage/Gutter/Sucked,OutBack 進場 + InQuad 退場,Strike 加 punchScale 0.1 / NewStage 滑入 + 上下白線 / Gutter 紅閃 / Sucked shake) | 綠豆 / 兔子 | 🟢 | ui-animation §2.1 + token HUDCardStandard/Strike/NewStage*;對接 BW-116~118/122~124/127/131 字卡 |
| BW-182 | Stage→Battle 轉場 | 選關卡點「確認」後畫面流程:① Loading(純進度條,不做動畫)→ ② 進戰鬥後 HUD 各元件錯開依序淡入升起(左上分數、挑戰面板、本球計分)→ ③ 出現「Ready」字卡 → ④ 選投球位置 HUD 直接顯示(即時,不做淡入) | 兔子 | 🟢 | ui-animation §3.5.5 完整序列(stagger:ScoreBlock/ChallengeTask/ScoreItem fade-in + posY) |
| BW-183 | 挑戰面板 | 進行中態文字跑馬燈 — 任務描述過長時水平循環捲動(無限迴圈、固定速度 ChallengeMarqueeSpeed px/s、貼底、不擋左邊、右側碰啟動按鈕停、黑底靜止只跑文字);任務成功/失敗時停止→文字復位→再演 ☑/紅槓(三段有序) | 兔子 | 🟢 | v0.7 新增(2026-06-03 會議 DEC-JSG11-025):ui-animation.md §0.5.4b + token;速度先設任意值 demo 後調 |
| BW-184 | 炸彈瓶 | 炸彈瓶擊中後立即在原位刷新(mid-ball 即時復位,不等球結束)— 不計分、不影響 Strike 判定;Stage 5 × 1 顆 | 兔子 | ⬜ | v1.4(2026-06-24 全確認):挑戰=無獨立;VFX=沿用地雷爆炸;視覺=正規瓶改色。位置待 RD 定 |
| BW-185 | HUD 字卡 | 所有字卡停留時間統一改 1.0s(原 Ready/Finish/Gutter/Sucked=1.5s、Strike=1.8s、NewStage/ChallengeClear=2.0s)— 綠豆調整 DOTween token HUDCardHold = 1.00f | 綠豆 | ⬜ | v0.8 新增(2026-06-24);ui-animation.md §2.1 + §2.2 |
欄位:A 編號 / B 模組 / C 功能 / D 狀態 / E 負責 RD / F 美術負責 / G 預計階段 / H 完成日期 / I 備註
games/JSG11-bowling/ · 視圖由 Agent 自動編譯