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 頁「單球循環流程」。
🎯 出手回饋 — 力道與旋轉 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 | 沒倒完所有正規瓶 | 倒幾瓶 = 幾分 | — |
| 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 球,提前達標也要打完
65 關闖關架構
解鎖:打贏本關門檻 → 下一關開放。沒過門檻 → 回大廳重新選關(不退關、不 game over、不顯示 Try Again)。
球道上視圖,玩家在下、球瓶在上。縱深為實際比例(1 格 ≈ 1 公尺),橫向放大 3.4 倍以便標示。所有座標直接讀自 Jacfitness_Art 的 JSG11/Scene/JSG11.unity(2.4 與 1.6 分支內容相同),不是估算值。
白色圓環=目前已實裝的固定位置;實心圓點=v1.6 提案的隨機候選位置。隨機規則:開局抽一次、整局固定 — 雙人是每球換人共用同一條球道,若每球重抽會造成 1P/2P 遇到的機關位置不同而不公平。
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)。
| # | x | z | 距球瓶 |
|---|---|---|---|
| 1 | 0.00 | −7.5 | 7.50 |
| 2 | −0.20 | −9.5 | 9.50 |
| 3 | +0.20 | −9.5 | 9.50 |
| 4 | −0.40 | −11.5 | 11.50 |
| 5 | +0.40 | −11.5 | 11.50 |
V 字分佈。靠中線配近端、靠邊配遠端,讓 5 點難度接近。
| # | x | z | 安全通道 |
|---|---|---|---|
| 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 細縫=必吸。
| # | 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 施力)。
可用縱深帶 −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 關關卡、機關與加分挑戰,不新增任何玩法系統。
① 關卡開放改跟隨單人進度 —— 原訂「雙人 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 — 上下堆疊雙列記分板
左上改成 1P/2P 兩列(各 670×125)。當前回合那一列全彩、等待中那一列整列淡化 50%,這是沿用全站「非焦點區塊淡化」的既有規約,不是新發明的視覺語言。右上球數改成輪次 3/5。之所以不做左右分置:右上球數+暫停、右側挑戰面板都已佔住位置,硬要左右對稱還得做真鏡射,划不來。
換人提示 — 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/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/10 | 鏡 遊戲 BGM 完成(Alpha 範圍) — 只測 BGM 可否播放,先用冰壺 BGM 佔位;正式版待 v2.5;大廳 BGM 已取消 | 鏡 |
| 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(5 關共用,正式版待 v2.5)
•
• 風格方向 TM 與鏡 v2.5 場景定案後對齊
• 正式版交付:待 v2.5 再做,避免場景未定就提前白工
3場景規格 美術
✅ 場景完成(飯茄 · 2026-06-29 更新)
三張 1920×1080 — 構圖、色相、燈光、材質、細節擺設完成。已入庫 Git · 同步 Google Drive · Figma layout 已更新。
📁 原始檔: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 4) / 一般球(紅橘大理石紋)— 造型 / 材質方向 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 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)後的最新畫面。

關卡選擇 → 載入 → 準備(無倒數 3·2·1)

取代過關「PASS」音 / 光效

主標「New Stage」/ 副標「第 {0} 關 — {1} 解鎖」(多國 ID 57011,例:「第 5 關 — 風吹 解鎖」/ en「Stage 5 — Wind Unlocked」)
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 使用者手動調整過座標)

觸發即時挑戰失敗(剩餘球不再判定)

觸發即時挑戰失敗(該球 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 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。
🖼️ 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 + 字卡截圖 × 1 + 教學頁 × 3 + 藍牙畫面 × 2 + 其餘 6)
- 畫面名稱改用短名(大廳 / 戰鬥畫面 / 關卡選擇 / 結算 / 離開遊戲 ...),不再用長前綴
- 藍牙拆 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 才實裝)
④ 關卡選擇右上「關卡解鎖條件:N 分」標籤(門檻依關卡遞增:24 / 48 / 68 / 88 / 96)
設計稿節點編號同步回
references/figma-map.md。
1.1元件庫 亞哈Jason/兔子
v0.12 新增:所有按鈕 / 卡片 / 戰鬥畫面元素 / 徽章 / 對話框 / 教學 / 結算 / 紀錄 / 藍牙都改為「主元件 + 複製品」做法,畫面內全部用複製品拼裝。主元件改視覺一次 → 全畫面複製品自動同步(亞哈 6/1 接視覺只需改主元件)。程式拼裝依複製品節點編號取座標、命名繼承主元件結構。
② 主元件改視覺 → 全畫面複製品自動同步
③ 元件庫節點編號:
15461:237,完整節點對照見 references/figma-map.md
元件清單(30 個,⭐ NEW 8 個)
| 類別 | 元件名稱 | 節點編號 | 樣式變化 | 用途 |
|---|---|---|---|---|
| 按鈕 | 圖示按鈕 | 15461:167 | 8 種:返回 / 暫停 / 上一頁 / 下一頁 / 回首頁 / 問號 / 略過 / 關閉 | 通用「只有圖示」按鈕。暫停 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: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 內疊:已過關 = 純底卡(2026-07-07 起不再疊金星,見 DEC-JSG11-035)/ 鎖定 = 底卡 + 黑 50% dim + Badge/Lock / 玩家當前選中 = 底卡 + Frame/CardSelection cyan 框。2026-06-05:卡片上的機關 icon 已移除(Badge/Mechanism component 整組刪除),機關呈現改走遊戲內 3D 模型 / VFX,UI 卡片不再疊機關 icon |
| — | 已刪除 — 改用實機字卡截圖 17103:2 | |||
| — | 已刪除 — 共用容器隨 BattleHUD 一併移除 | |||
| 徽章 | 機關徽章 ⭐ NEW | 15529:307 | 5 種:無機關 / 障礙瓶 / 風 / 黑洞 / 地雷 | 關卡卡片上的機關圖示 |
| — | ||||
| 鎖頭徽章 | 15461:187 | — | 模式選擇 / 關卡選擇 鎖頭 | |
| 戰鬥畫面 | 分數區塊 ⭐ NEW | 15587: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) | |
| 選位置箭頭 ⭐ NEW | 15522:849 | — | 選位置青色三角箭頭(181×180) | |
| 瞄準箭頭 ⭐ NEW | 15522:892 | — | 瞄準大黑色直線箭頭(108×396) | |
| 玩家名稱 ⭐ NEW | 15470:75 | 2 種位置:左(1P)/ 右(2P) | 雙人模式戰鬥畫面玩家名稱(v1.x 啟用) | |
| 出手回饋面板 ⭐ v1.6 NEW | 18752: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 拼裝 |
| 解鎖分數紙條 ⭐ 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,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,以自身中心放大) |
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 大廳。
🔁 沒過關回大廳
沒過 → 回大廳重新選關(不顯示「再試一次」字眼),玩家自行決定是否重打。
324 個畫面清單 TM+AIJason/兔子
v0.14(2026-07-01)— 24 個畫面(v0.13 的 17 個畫面 + 互動式新手教學關卡 v2.4 新增 7 個:練習畫面 × 3 + 收合練習區 × 1 + 進場/完成字卡 × 2 + 打勾完成示意 × 1)。命名鎖結構:亞哈設計時用同樣命名、程式實裝時用同樣命名 → 零翻譯成本。畫面改用短名(不再用長前綴)。
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)
Connet/StatusFrame State=Jmate1(切換左側手環插圖,非框色)
Connet/StatusFrame State=Jmate2(切換左側手環插圖,非框色)
Connet/StatusFrame State=Jmotion(切換左側手環插圖,非框色)
HUD/ChallengeTask 切 State=Success 變體,v0.28 起整體放大 1.54 倍,DEC-JSG11-040/041),成功態:面板左側 ☑ 打勾(實機截圖去背素材:白框白勾,已收進變體)。
HUD/ChallengeTask 切 State=Failed 變體,v0.28 起整體放大 1.54 倍,DEC-JSG11-040/041),失敗態:紅色刪除線劃過挑戰文字(已收進變體)+ 文字轉灰(#888)。無打勾。
LevelTypeId=0)HUD/ChallengeTask)即時顯示計數「選擇位置 0/4」。畫面最右上角為略過鈕(v0.34 起,原暫停鈕原地替換,見下方功能說明)。
Good! 即時回饋徽章緊鄰面板右側,每次完整完成「確認→推出」動作即彈出並計數 +1。
HUD/PositionArrow 左右三角形(沿用正式戰鬥選位置態同款元件)。展開態與收合態視覺互斥——面板展開時不顯示這些練習提示。
WordCard_Ready 實機截圖字卡(不重畫),與正式關卡進場演出一致。
WordCard_Finish 實機截圖字卡(不重畫)。播放完直接返回大廳,教學關無結算頁、無分數。
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 反饋順序如下。
已顯示
(無 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 個狀態:基本(共用容器顯示中)/ 選位置(左右青色三角箭頭)/ 瞄準(中央大青色直立長箭頭),對應投擲流程「選位置→丟出」兩段操作。
15245:25)— 左上分數區塊「分數:136 / 96」(v0.31 起移除關卡編號,DEC-JSG11-044)、右上球數 + 暫停、右側挑戰任務面板、中央共用容器② 選位置(節點編號
15522:738)— 兩個青色三角箭頭(181×180),對應「①旋手腕選位」③ 瞄準(節點編號
15522:858)— 中央大青色直立長箭頭(108×396),對應「②看時機推出」
戰鬥畫面元素清單(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 自動擺動,揮臂瞬間定格
- 狀態提示文字(球道下方)— 準備 / 完成 / 全倒 / 新關卡 / 洗溝 / 吸入 共用容器(詳見「字卡」段落)
7結算頁佈局 亞哈兔子
結算頁元素清單(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 無「再試一次」)
8關卡選擇佈局 亞哈Jason
v0.12 改用短名「關卡選擇」(原長名「關卡選擇」)+ 加主選單半透明背景蒙版。5 張卡片橫排顯示關卡場景圖,上方標示「關卡解鎖條件:N 分」(門檻依關卡遞增)。2026-06-05:卡片上的機關 icon 已移除,機關呈現改走遊戲內 3D 模型 / VFX。
2 種卡片狀態(v0.15.8 — 移除「當前可玩」被動標記)
已解鎖
- 純底卡(
右下角金星徽章2026-07-07 移除,DEC-JSG11-035:易誤認為關卡難易度標示) - 顯示機關圖示(左上小框)
- 可重玩拿挑戰加分
鎖定
- 純底卡 + 黑 50% dim rect +
Badge/Lockinstance - 無法點擊
- 需先過前一關門檻(各關遞增:24 / 48 / 68 / 88 / 96)
玩家選中
- 純底卡 +
Frame/CardSelection(cyan 邊框 + 角光點)疊在玩家點選卡片上 → BW-067 - 主動視覺反饋,與「當前可玩」被動標記無關
- 頂部「關卡解鎖條件:N 分」標籤常駐(v0.11 新增,門檻依關卡遞增)
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 拍板
範圍:左右各 7.5°(總共 15°,繞 Z 軸)|週期:8.0 秒(半週期 4.0 秒)
節奏:InOutSine Yoyo,端點慢中間快|推球時立刻凍結停住
② 彈窗 + 半透明背景同步演出 · 9 個畫面共用
半透明背景:透明 → 60% 黑(0.25 秒 OutQuad)
面板放大:85% → 100%(0.35 秒 OutBack 帶回彈)+ 透明 → 不透明(0.25 秒)
關閉:面板先收 + 半透明背景晚 0.05 秒
| 畫面 | 開啟 | 關閉 |
|---|---|---|
| 模式選擇 | 大廳 CTA | 選模式 / 返回 |
| 關卡選擇 | 單人 / 教學 | 選關確認 / 返回 |
| 藍牙搜尋 | 偵測未連線 | 找到裝置 / 返回 |
| 教學頁 1 | 首次教學 / 教學鈕 | 下一頁 / 關閉 |
| 結算 | 10 球停下結算完 | 繼續按鈕 |
| 離開遊戲 | 戰鬥按暫停 | 否 / 是 |
③ 最高分徽章彈跳出現
觸發:結算頁顯示後延遲 0.3 秒|放大:0 → 1.2 → 1.0 倍(0.60 秒 OutElastic)
浮現:透明 → 不透明(0.30 秒)
④ 大廳「點擊開始遊戲」
呼吸:放大 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
⚙️ 開發規格
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 ω | ⭐ 新增 | 旋轉球路(冪函數 ^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 層全部重做。
關鍵 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 表。以下為 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 名稱與切分自決)。
全倒?
判定規則
| 結果 | 條件 | 得分 | 關鍵規則 |
|---|---|---|---|
| Open | 正規瓶沒倒完 | 倒幾瓶 = 幾分 | — |
| Strike | 正規瓶全倒 | 15(10+5) | 只看正規瓶,地雷彈飛瓶也算倒下 |
| 挑戰 | binary 達成 | +10~+50(各關遞增) | 計入過關門檻 |
- Strike 判定只看正規瓶:障礙瓶 / 地雷彈飛瓶倒下不影響邏輯
- Stage 4 地雷彈飛瓶算倒下:仍可 Strike,但挑戰失敗(限制違規 → 失去 +40)
- 無 Spare
- 無連擊獎勵(連續 Strike 各自 +5,不額外加碼)
- 強制 10 球(提前達標也要打完)
基礎滿分 = 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 依此實作。
2026-08-03 拍板分工:企劃端只出座標,企劃表怎麼擴增由 RD 自行規劃。22 組候選座標已完整列在 §5,要進
BowlingStageSetting 加欄位、另開一張表、還是先寫死在程式等實測定案,都由實際要讀它的人決定 — 企劃端不預先替 RD 定義資料層 schema。(前例:2026-05 企劃端自行設計的 3 張表最終一張都沒被採用,見 §7。)已排入甘特圖開發組 r201,負責人與時程由開發二組自行認領。
🕳️ Stage 3 黑洞
黑洞
拉向中心
💣 Stage 4 地雷
地雷
炸飛正規瓶
全倒?
💨 Stage 5 風吹
風場區域
加側向分量
挑戰任務追蹤
| Stage | 挑戰 | 判定方式 | 失敗時機 |
|---|---|---|---|
| 1 | 3 次 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 那張為準。
Jacfitness_Client/Excel/JSG/」,但來源那邊只有一張表。舊版列出的 LevelSetting / PinSetting / MechanismSetting 是 2026-05 的企劃提案稿,其中 MechanismSetting 已於 2026-05-15 決議不交付,另外兩張也一直沒進 RD 的 Excel。舊提案的三筆機關係數與程式實際值全部不符(風 5.0↔10、黑洞 20.0+反平方曲線↔固定力 50、地雷 15.0↔400),且「曲線類型」「是否連鎖」這兩個欄位語意在程式裡不存在。舊內容移到本節最後的摺疊區保留脈絡。
BowlingStageSetting · 來源:Jacfitness_Client/Excel/📊 BowlingStageSetting — 13 欄
| 欄 | 中文欄名 | 欄位名 | 型別 | 說明 |
|---|---|---|---|---|
| C | (校對用流水號) | _id | int | 關卡編號。0=教學關、1~5=五關 |
| D | #註解 | — | — | 程式不讀,給人看的 |
| E | 場景名稱 | SceneName | string | 六列都是 scenejsgbowling |
| F | 背景音樂 | MusicIds | int[] | 六列都是 232 |
| G | 一般模式過關分數門檻 | ScoreThresholdForNormal | int | 0 / 24 / 48 / 68 / 88 / 0 |
| H | 機關ID | SceneObjectID | int | 指向 Unity 場景物件,不是機關表。−1 無/1 障礙瓶/2 風/3 黑洞/4 地雷 |
| I | 挑戰任務 | ChallengeMission | int | 只有 3 種:0 Strike 次數/1 碰到機關/2 洗溝 |
| J | 挑戰任務條件 | ChallengeCondition | int | 0 大於/1 小於 |
| K | 挑戰任務條件次數 | ChallengeMissionCount | int | 與 J 合用,見下方說明 |
| L | 挑戰任務條件分數 | ChallengeMissionPoint | int | 挑戰加分 10 / 20 / 30 / 40 / 50 |
| M | 過關解鎖關卡 | UnlockLevel | int[] | −1 = 不解鎖下一關 |
| N | 關卡 scroller 內容多國 | StageScrollerContent | long | 57001~57005 |
| O | 遊戲中 UI 任務內容多國 | UIBattleMissionContent | long | 57006~57010 |
六列實際資料
| _id | 關卡 | 門檻 | 機關ID | 挑戰任務 | 條件 | 次數 | 加分 | 解鎖 | 多國 ID |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 教學 | 0 | −1 | — | — | — | 0 | −1 | — |
| 1 | 標準 | 24 | −1 | 0 Strike | 0 大於 | 2 | 10 | 2 | 57001 / 57006 |
| 2 | 障礙物 | 48 | 1 障礙瓶 | 1 碰機關 | 1 小於 | 1 | 20 | 3 | 57002 / 57007 |
| 3 | 風吹 | 68 | 2 風 | 2 洗溝 | 1 小於 | 1 | 30 | 4 | 57003 / 57008 |
| 4 | 黑洞 | 88 | 3 黑洞 | 1 碰機關 | 1 小於 | 1 | 40 | 5 | 57004 / 57009 |
| 5 | 地雷 | 0 | 4 地雷 | 1 碰機關 | 1 小於 | 1 | 50 | −1 | 57005 / 57010 |
企劃提案 → RD 實裝 逐欄對照
| 企劃當初提的 | RD 實際的 | 差在哪 |
|---|---|---|
LevelTypeId(0 教學 / 1 一般) | 沒有這欄 | 教學關直接用 _id=0 那一列表示,不另設類別欄 |
PinComposition(瓶種組成陣列) | 沒有這欄 | 瓶陣寫死在程式 SpawnPins():固定 10 顆正規三角陣。障礙瓶是場景物件 |
MechanismIds int[] | SceneObjectID int | 從「機關表 ID 陣列」變成「場景物件單一 ID」→ 一關只能有一種機關 |
UnlockNextLevelScore | ScoreThresholdForNormal | 只是改名 |
UnlockNextLevelID int | UnlockLevel int[] | 改名+改成陣列 |
ChallengeType(6 種:無/Strike/不碰障礙瓶/不洗溝/不碰黑洞/不碰地雷) | ChallengeMission(3 種:Strike 次數/碰到機關/洗溝) | RD 的設計更簡潔:黑洞、地雷、障礙瓶統一成「碰到機關」,因為 SceneObjectID 已經決定這關是哪種機關,不必再分 |
ChallengeThreshold(單一門檻值) | ChallengeMissionCount + ChallengeCondition | 拆成「次數+大於/小於」兩欄,比單一門檻靈活 |
| (企劃表沒有) | SceneName/MusicIds/ChallengeMissionPoint/兩組多國 ID | RD 多出來的:場景、BGM、挑戰加分、關卡卡片與 HUD 任務文字的多國 ID |
🔧 不在表裡、寫在程式的東西
以下都不能靠改 Excel 調整,TM 要動這些數值必須發需求給 RD 改程式或改 Unity 場景。
| 項目 | 目前的值 | 位置 |
|---|---|---|
| 風場推力 | 8(ForceMode.Force,持續施加) | BowlingObjectCollisionMonoCompoment.c_windZoneForce |
| 黑洞吸力 | 50(固定值向心力,不是衰減曲線) | _blackHoleDrawFroce |
| 地雷爆炸推力 | 400(ForceMode.Impulse) | _minsExplodeFroce,可用 debug 指令 SMP 即時調 |
| 機關位置與作用半徑 | 見 §5 | Unity 場景 SceneObjectManager |
| 球瓶陣列 | 10 顆、間距 0.3、4 排 | BowlingBattleLogicCompoment.SpawnPins() |
| 障礙瓶數量 | 1 顆 | Unity 場景物件 ObstaclepPinPin01 |
| 球速上限 | 8 m/s | JSGBowlingPlayerComponent.ConstMaxBallLaunchSpeed |
| 站位可移動範圍 | ±0.5 m | _constGroundHalfWidth |
| 每關球數 | 10 球 | _const_OneGameRound |
📦 歷史提案:3 張表的原始設計(未交付,僅存脈絡)
下方摺疊區為當年提案的逐欄白話說明,內容停在 2026-05,僅供追溯。
🟢 通用結構 — 每張表前 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(v1.x 實際未使用,障礙瓶走場景物件) |
機關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 連續擺動,無鎖定動作;±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 — 即時失敗 API | Jason | 🟢 | — |
| BW-037 | 挑戰任務 | ChallengeTracker — 結算判定 API | Jason | 🟢 | — |
| BW-038 | 失敗處理 | 限制違規 → 改加分制(違規不扣分,失去該關挑戰加分 +10~+50 各關遞增) | Jason | 🟢 | — |
3. 5 關設計(2026-09-01 重排:黑洞 → Stage 3、地雷 → Stage 4、風吹 → Stage 5) (13 項)
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-039 | Stage 1 標準 | 10 正規三角陣配置 | Jason | 🟢 | — |
| BW-040 | Stage 1 標準 | 挑戰任務:3 次 Strike | Jason | 🟢 | — |
| BW-041 | Stage 2 障礙物 | 障礙瓶 × 1 佈局(球道中段 z −6.756) | Jason | 🟢 | — |
| BW-042 | Stage 2 障礙物 | 障礙瓶倒下跟正規瓶一起重置邏輯 | Jason | 🟢 | — |
| BW-043 | Stage 2 障礙物 | 挑戰任務:不擊倒障礙瓶 | Jason | 🟢 | — |
| BW-044 | Stage 5 風吹 | 風場機關(位置固定) | 兔子 | 🟢 | — |
| BW-045 | Stage 5 風吹 | 挑戰任務:不洗溝 | 兔子 | 🟢 | — |
| BW-046 | Stage 3 黑洞 | 黑洞機關(位置固定) | Jason | 🟢 | — |
| BW-047 | Stage 3 黑洞 | 挑戰任務:不要碰到黑洞 | Jason | 🟢 | — |
| BW-048 | Stage 4 地雷 | 地雷機關(位置固定) | Jason | 🟢 | — |
| BW-049 | Stage 4 地雷 | 地雷彈飛瓶物理 | Jason | 🟢 | — |
| BW-050 | Stage 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-077 | HUD | 當前分數(左上) | 亞哈 / 兔子 | 🟢 | — |
| BW-078 | HUD | 過關門檻顯示 | 亞哈 / 兔子 | 🟢 | — |
| BW-079 | HUD | 球數計數(右上) | 亞哈 / 兔子 | 🟢 | — |
| BW-080 | HUD | Stage 標記 | 亞哈 / 兔子 | 🟢 | — |
| 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 | 操作 gating | OnPush 觸發瞬間 → 球停 → 字卡 → 黑畫面過場期間,手環輸入全部封鎖;選位置 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-092 | LeaveGame 視窗 | 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-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 | 🟢 | 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 | 通用 VFX | Ready 字卡 | 兔子, 亞哈, 綠豆 | 🟢 | — |
| BW-117 | 通用 VFX | Finish 字卡 — 最後一球結束後播放,播完直接切結算(無黑畫面 fade) | 兔子, 亞哈, 綠豆 | 🟢 | 5/28 會議補(v1.4):與 BW-089 配合 |
| BW-118 | 通用 VFX | New 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 | 兔子, 亞哈 | 🟢 | — | |
| BW-121 | 球與球路 | 球路 Trail 視覺 v2.0(顏色 = OnPush 轉速二元:< 100% 藍一般 Trail / = 100% 橘螺旋丸;長度 = 球體移動速度線性,低於閾值消失;球體透明度 = 轉速線性,越慢越透明(僅橘色適用,藍色僅有 trail — 2026-07-13 確認);準備階段全隱藏;詳 DEC-JSG11-020) | 兔子, 綠豆 | 🟢 | — |
| BW-122 | 結算字卡 | 兔子, 綠豆 | ❌ | — | |
| BW-123 | 結算字卡 | 兔子, 綠豆 | ❌ | — | |
| 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 | 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 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-150 | BGM | Jason, 鏡 | ❌ | 7/2 拍板砍掉:大廳不需要 BGM | |
| 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 (14 項)
Lobby 動畫(亞哈視覺 + Jason 程式)
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-172 | 載入畫面 | Loading/Screen 1920×1080 完整載入畫面(JSG BOWLING + 進度條) | 亞哈 / Jason | 🟢 | v0.12 新增 component(nodeId 15470:106);拍板不做動畫(純切場景+fillAmount 真實進度回呼) |
| BW-173 | Lobby CTA | 「點擊開始遊戲」呼吸動畫(scale 1.0↔1.06 + alpha 1.0↔0.85,1.6s InOutSine Yoyo 永久循環) | Jason | 🟢 | 動畫參數:token LobbyCtaBreathePeriod=1.60f;細節詳企劃書 |
| BW-174 | Lobby 進場 | Lobby 進場 stagger 序列(bg fade-in 0.3s + logo 0.4s + CTA 0.35s + 右下三膠囊 stagger 0.08s/個 ) | Jason | 🟢 | 動畫序列:token LobbyBg/Logo/Cta/BtnStagger;細節詳企劃書 |
| BW-175 | Tab 切換 | Tab 切換動畫 — 被選 Tab 輕彈一下(縮放),底色跟著換,底線指示器橫向滑過去(0.30s),內容區淡出入換頁 | Jason | 🟢 | 套用 Record 1P/2P+Tutorial Prev/Next;動畫參數(punch 1.0→1.08→1.0、OutCubic posX)詳企劃書 |
| BW-176 | Btn 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-177 | Lobby 動畫 | Lobby Modal 連續轉場 — Lobby → ModeSelect → Stage 同 dim 層複用,新 panel 在舊 panel 出 50% 時提早 0.1s 銜接進場 | Jason | 🟢 | 轉場動畫序列詳企劃書 |
| 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 | 🟢 | 由原 BW-181 拆出 Lobby 部分;動畫 token ModalDim/Panel*,細節詳企劃書 |
戰鬥動畫 / HUD 元件(亞哈視覺 + 兔子程式 + 綠豆字卡)
| # | 模組 | 功能 | 負責 | 狀態 | 備註 |
|---|---|---|---|---|---|
| BW-179 | ScoreBlock 整合元件 | 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-181 | HUD 字卡進退場 | 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-182 | Stage→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-185 | HUD 字卡 | 所有字卡停留時間統一改 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_Finish | Alan | ⬜ | 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 | 雙人模式 | ❌ | 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 規格作廢 |
欄位:A 編號 / B 模組 / C 功能 / D 狀態 / E 負責 RD / F 美術負責 / G 預計階段 / H 完成日期 / I 備註
games/JSG11-bowling/ · 視圖由 Agent 自動編譯