JSG11 保齡球
1遊戲核心
Q 版單人闖關保齡球遊戲。採用 兩階段投擲操作(旋手腕選位 + 看時機推出選角度),全局新增 手環角加速度驅動的旋轉球路,玩家可主動曲球避開機關。
5 關闖關制 + 簡化分數制(Open / Strike,無 Spare)。每關有獨立機關特色(變陣 / 風 / 黑洞 / 地雷),鼓勵玩家學習各關策略並挑戰附帶任務。
關鍵賣點
🎯 玩家技術定變化
手腕扭動量直接決定球軌跡彎曲程度。練熟 = 主動曲球避機關,重玩價值來自操控精進。
🎪 5 關 5 種樂趣
標準 → 變陣 → 風吹 → 黑洞 → 地雷。每關一個機關,位置固定可學,附帶任務 +10 鼓勵嘗試。
🧠 規則簡單客服好解釋
只有 Open / Strike,無 Spare、無連擊獎勵、無強化球。心算容易、UI 顯示絕對分數。
⚠️ 前端與規則重做
演算法層(Andros 既有 OnPush / OnRotate / OnConfirm)沿用,除此以外全部重做(含遊戲規則)。時程風險詳見「開發」分頁。
2設計哲學
簡化勝過複雜
規則直白、玩家心算容易、客服解釋簡單。寧可砍規則也不增加心智負擔。
沒有失敗 ≠ 沒有後果
不會 game over 整輪重來,但沒過門檻會回大廳重新選關(不解鎖下一關)。
挑戰非必要、但有設計重量
附帶挑戰任務 +10 分計入門檻,鼓勵玩家嘗試但不強迫。
變數在玩家、固定在機關
旋轉量由玩家手腕扭動決定(操控變量);機關位置固定(玩家可學、QC 好平衡)。
3操作系統 — 兩階段投擲
沿用 Andros 既有 input pipeline(演算法層),唯一新增是階段 2 的「箭頭自走擺動」取代冰壺的「手腕主動轉角度」。UI 層所有實作重新撰寫(不沿用冰壺前端 code)。
使用 Andros 演算法
DetectRotate(✅ 沿用)+ JSG11_StancePositionUI(❌ 自寫),roll 角度越大,multiplier 越大(站位變化越快)。OnConfirm 事件 → 鎖定站位 → 進入「推球準備」狀態。新增 取代冰壺
SetObjectRotation() 的手腕主動轉角度。PushCurling → OnPush(forcePercentage)。推出瞬間擷取當下箭頭角度作為球的初始 forward 向量。
OnReadjust → 回到階段 1 重選。依 UX 決定是否開放。不沿用冰壺 OverHeadCamera 結算頂視角流程。
4計分系統
| 結果 | 條件 | 得分 | 備註 |
|---|---|---|---|
| Open | 沒倒完所有正規瓶 | 倒幾瓶 = 幾分 | — |
| Strike | 1 球倒完所有正規瓶 | 15 分(10 + 5) | +5 加乘獎勵 |
| 挑戰任務 | 達成 / 沒達成(binary) | +10 分 | 計入過關門檻 |
滿分計算
基礎滿分 = 10 球 × (正規瓶 + 5)
= 10 × (10 + 5)
= 150
含挑戰滿分 = 150 + 10 = 160
過關門檻 = 含挑戰滿分 × 60%
= 160 × 0.6
= 96
重要規則
- 沒有 Spare
- Strike 加乘僅
+5,無連擊獎勵 - Strike 判定只看 正規瓶(障礙瓶、地雷彈飛瓶不影響)
- 地雷彈飛瓶子也算倒下,仍可 Strike(但挑戰失敗)
- UI 顯示絕對分數(如「過關 96」),不顯示百分比
- 強制打完 10 球,提前達標也要打完
55 關闖關架構
解鎖:打贏本關門檻 → 下一關開放。沒過門檻 → 回大廳重新選關(不退關、不 game over、不顯示 Try Again)。
6旋轉球路系統(全局)
全部 5 關每一球都套用,旋轉量由玩家手腕動作決定 — 非隨機抽選、無 UI 提示。
機制
- Input:手環偵測角加速度(玩家手腕扭動方向與強度)
- 映射:角加速度值 → 球體
transform.forward軸的angularVelocity - 表現:Unity 物理引擎依此產生軌跡彎曲(連續量、無離散等級)
- 自然狀態:不扭手腕 → 角加速度近零 → 球直走
設計意圖
- 旋轉完全由玩家技術決定,不再用「隨機抽 5 種」
- 重玩價值來自操控精進(練熟後能曲球避機關)
- 與機關產生策略張力(曲球繞過障礙 vs 被動接受結果)
Owner:Andros
旋轉視覺映射(連續變化)
| 旋轉量級距 | 球體視覺 | 軌跡視覺 |
|---|---|---|
| 接近 0(手腕未扭) | 無旋轉、無尾跡 | 走直線 |
| 低(小幅扭動) | 緩慢旋轉 + 淡色尾跡 | 軌跡微彎 |
| 高(大幅扭動) | 高速旋轉 + 明顯尾跡 | 軌跡明顯彎曲 |
7團隊分工
| 角色 | 負責範圍 | Sheet Row |
|---|---|---|
| Andros | 投擲演算法(手腕 input → 站位 / 力道 / 角加速度映射) | 117 |
| 兔子 | 投擲功能製作 + 戰鬥 UI(HUD / 結算 / 暫停)+ 部分機關 | 118 / 134 |
| Jason | 計分 / 挑戰追蹤 / Stage 1 2 4 5 / Lobby UI(大廳 / 關卡選擇 / 教學) | 119 / 133 |
| 亞哈 | UI 美術視覺(HUD / 結算 / 卡片 / 字卡 / 按鈕配色) | 132 |
| 美術組 | 三階段:場景 → 球瓶/球道 → 障礙物 | 127 / 128 / 129 |
| 綠豆 | VFX(特效)— Demo 完成後 5/30 起介入 | 130 |
| 鏡 | SFX(音效)+ BGM | 131 |
| 小曹(TM) | 規格 / 排程 / CP 驗收 | 136 |
8時程
關鍵節點
| 日期 | 事件 | 負責 |
|---|---|---|
| 5/14 (四) | CP0 規格定錨會議 | 三方對齊(TM / 美術 / UI) |
| 5/15 (五) | Andros 演算法 v1 交付(單點關鍵路徑) | Andros |
| 5/18 | 兔子實裝(接 Andros v1) | 兔子 |
| 5/22 | 亞哈 UI 視覺交付 → Jason / 兔子接 | 亞哈 |
| 5/29 | Demo 完成(球道 / 旋轉 / 障礙物三項驗證) | RD |
| 5/31 | 月底匯流(尺寸定案 + 美術背景白稿) | 美術 + RD |
| 5/30 起 | 綠豆 VFX 介入 | 綠豆 |
| 6 月中後 | SFX 開工 | 鏡 |
| 6 月底前 | BGM 完成 | 鏡 |
| 6 月底 | 素材實裝完成 | Jason / 兔子 |
| 7/7 | CP 一次驗收(5 關 + 旋轉 + 三機關 + UI + VFX + SFX + BGM) | 小曹 |
| 7/B ~ 7/M | Alpha(含外整) | QC |
🎨 美術交付
1風格框架 美術
給美術組的初始 brief — 場景風格以美術組提供之 ref 為主。
🎯 整體調性
- Q 版圓潤造型、誇張比例
- 與 JSG 系列其他遊戲(冰壺 / 高爾夫)調性一致
- 偏向復古暖色保齡球館(不要太硬派、不要賽博龐克)
- 單一牆面主視覺、不做轉場
📐 場景原則
- 環型 / 弧型主視覺(5/10 美術會決議)
- 不超過單一牆面、鏡頭無破綻
- 不需動態鏡頭切換場景
- 球道與主視覺可分離製作(球道長度依 Andros v1 實測再定)
🎭 角色 / 動畫
- 無角色
- 無投擲動畫(全物理路線)
- 球 / 瓶 / 機關互動全交給 Unity 物理引擎
- 美術唯一交付:模型 + 材質 + 物理參數(mass / collider / 摩擦 / restitution)
🎬 視覺重點
- 球體旋轉視覺連續變化(旋轉量大 = 尾跡明顯)
- 正規瓶 vs 障礙瓶視覺要明顯區分
- 機關影響範圍可視化(風線 / 旋渦 / 警示燈)
- Strike 字卡視覺強烈(+5 加乘要爽)
後續新增 ref 由美術組直接傳給 TM(不需上傳到本 repo)。
2美術交付清單 美術
依甘特圖 row 126~131 三階段拆分。請美術組依時程交付,TM 會在每階段結束做匯流檢查。
場景三階段(row 127~129)
• 與球道長度無關,可先做
• 5/31 前白稿確定 → 移交場景團隊細化
• 正規瓶模型(白底紅頸)
• 一般球模型 + 旋轉視覺
• 依 Andros v1(5/15)+ Demo 實測尺寸定案
• 風場(風線 + 風向 + 範圍可視化)
• 黑洞(旋渦 + 邊緣扭曲)
• 地雷(外殼 + 警示燈)
VFX / SFX / BGM 介入時程
• Demo 完成(5/29)後介入
• 字卡:文字 = 亞哈 / 動態 = 綠豆
• 場景風格定案後介入
• 撞瓶聲合 1(不分大 / 小力)
• 遊戲 BGM × 1(5 關共用)
• 風格方向 TM 與鏡 6 月場景定案後對齊
3場景規格 美術
場景原則(5/10 美術會決議)
- 環型 / 弧型主視覺
- 不超過單一牆面
- 不做轉場
- 主視覺確定後維持一致
- 鏡頭無破綻、無需動態切換
球道需求
- 直線球道為基底
- 需支援由 forward 軸 angularVelocity 產生的彎曲軌跡渲染
- 玩家手腕扭動量 → 軌跡彎曲程度(連續)
- 溝槽(gutter)視覺需明確
4球瓶 / 球規格 美術
| 類型 | 視覺特徵 | 適用 | 物理 |
|---|---|---|---|
| 正規瓶 | 標準保齡球瓶、白底紅頸、可辨識 | 5 關通用 | 標準 mass + collider |
| 障礙瓶 (Stage 2) |
需明顯區分 例:黑色 / 帶警示條紋 / 鐵製外觀 |
Stage 2 | 倒下後不重置,需有「倒下定置」狀態 |
| 地雷彈飛瓶 (Stage 5) |
沿用正規瓶模型 | Stage 5 被爆炸彈飛 | 獨立飛行軌跡 + 落地物理(AddExplosionForce) |
| 一般球 | 標準保齡球(無強化球) | 5 關通用 | Rigidbody + 旋轉視覺(連續變化尾跡) |
球體旋轉視覺(連續映射)
無尾跡
淡色尾跡
明顯尾跡
5機關視覺 美術
三機關(風 / 黑洞 / 地雷)位置固定。視覺需讓玩家一眼看出威脅類型 + 影響範圍。
💨 Stage 3 風吹
- 球道側向風場(位置固定)
- 風線 + 風向指示 + 影響範圍可視化
- 球被吹偏的軌跡修正視覺
- 不做飄落葉
🕳️ Stage 4 黑洞
- 球道上的吸引點(位置固定)
- 旋渦動畫 + 邊緣扭曲
- 影響半徑可視化
- 球被吸入時的扭曲特效
- 不影響球瓶(瓶子不會被吸)
💣 Stage 5 地雷
- 球道埋設視覺(位置固定)
- 地雷外殼 + 警示燈閃爍
- 引爆瞬間爆炸光圈
- 瓶子被彈飛尾跡
- 一次性消耗(觸發後該關不再生效)
6VFX 特效綠豆
字卡分工:文字(字型 / 排版)= 亞哈,動態(入退場 / 動畫 / 粒子)= 綠豆,觸發時機(容器切狀態)= 兔子。
📇 戰鬥字卡(UIJSG11_Battle_Cards · 2×4 grid)
共用容器 Card_HUD_StatusHint 承載 6 種狀態(READY / FINISH / STRIKE! / NewStage / GUTTER! / SUCKED!),Card_ChallengeClear 獨立結算 VFX。
LevelSelect 點關 → Loading → READY(無倒數 3·2·1)
取代過關 PASS 音 / 光效
主標「New Stage」/ 副標「Stage X — 關名 解鎖」
+15 加乘要視覺強烈(彩帶 + 閃光)
觸發即時挑戰失敗(剩餘球不再判定)
觸發即時挑戰失敗(該球 0 分)
Stage 1(結算統計達 3 strike)/ Stage 2~5(10 球結束未觸發失敗條件)
由程式(兔子)按時機切狀態
Card_Stage_Intro— LevelSelect 已顯示 Stage 號 + 關名,進關不重複介紹Card_Mechanism_Intro— 機關 icon 在 LevelSelect 已顯示Card_Challenge_Intro— 改由 Battle_HUD 右上角「挑戰任務面板」常駐顯示Card_Open— 改為分數直接更新到 HUD 數字 + 短閃光(不需字卡)
🎱 球與球路 VFX
依手環角加速度連續變化(轉速越快尾跡越明顯)
依旋轉量彎曲(直 → 彎連續)
球道上方俯視,DOTween 連續擺動
🌀 機關環境 VFX(非字卡)
觸發即時挑戰失敗
風場本身可常駐顯示
字卡 SUCKED! 另外觸發(見上)
7SFX 音效(16 項)鏡
| 優先 | 音效 | 觸發時機 | 備註 |
|---|---|---|---|
| ⭐⭐⭐ | Ready / Finish 提示音 | 關卡開始 / 結束 | Finish 兼任過關收尾音 |
| ⭐⭐⭐ | New Stage 進場字卡音 | BW-113 字卡彈出 | 也作為解鎖下一關回饋音 |
| ⭐⭐⭐ | 球出手音 | 釋放瞬間 | — |
| ⭐⭐⭐ | 球滾動音 | 球在球道上 | — |
| ⭐⭐⭐ | 撞瓶聲(單一音檔) | 球撞擊球瓶 | 不分大 / 小力 |
| ⭐⭐⭐ | 球瓶倒下音 | 瓶倒地 | — |
| ⭐⭐⭐ | Strike 音效(單一音檔) | 1 球倒完 | 歡呼 + 提示音合 1 |
| ⭐⭐ | 倒入溝 gutter 音 | 球出界(Stage 3 挑戰失敗) | 失敗反饋 |
| ⭐⭐ | 障礙瓶倒下警示音 | Stage 2 擊倒障礙瓶 | 與正規瓶倒下要不同 |
| ⭐⭐ | 風場 — 風吹聲 | Stage 3 球進風場 | — |
| ⭐⭐ | 風場 — 球偏移聲 | — | — |
| ⭐⭐ | 黑洞 — 吸力聲 | Stage 4 球被吸入 | — |
| ⭐⭐ | 黑洞 — 吸入音效 | — | — |
| ⭐⭐ | 地雷 — 引爆聲 | Stage 5 觸發地雷 | 不做瓶子彈飛聲 |
| ⭐ | 挑戰達成 +10 音 | 挑戰任務完成 | 金幣 / 成就音 |
8BGM 鏡
🎵 大廳 BGM
關卡選擇 / 主畫面播放。建議偏向 Q 版輕快 / 保齡球館氛圍。
🎵 遊戲 BGM(5 關共用)
5 關共用一個遊戲 BGM(不分機關關卡)。
🖼️ UI 規格
1Figma 設計稿 亞哈
亞哈設計稿主頁面。Wireframe v0.11 已落地(10 個 frame,Bluetooth 含雙態),等亞哈 5/15 起接視覺設計。
📐 Frame 規格
- 解析度:1920×1080 landscape(保齡球場景偏寬橫向)
- 排列:2 cols × 5 rows(10 個 frame,廢案 Clearance 已刪)
- Bluetooth 含雙態 wireframe(未連線 + 已連線,視為同一 frame 兩種狀態)
- Page 名稱:
JSG11_保齡球
🔗 其他資源
- Figma 外層流程(pL3ojpKePQmPg0oenQC8Ef)
- FigJam 流程圖(FWSLe1AIFb2uJ3k1XrGgcT)
- 節點對照表:
references/figma-map.md
② Ranking → 紀錄 / Record 改名(命名
UIJSG11_Lobby_Record)③ 模式選擇補雙人模式 lock 按鈕(UI v1.0 上線、RD 功能延後 v1.x,lock hint 統一涵蓋單人/雙人兩模式)
④ 關卡選擇右上「下一關解鎖分數 96 分」標籤
設計稿節點 ID 同步回
references/figma-map.md。
2UX 流程圖 UI開發
App 啟動 → 大廳 → JSG11 主選單 → 模式選擇 → 關卡選擇 → 戰鬥 → 結算 → 回大廳。
主選單
關鍵 UX 決議
🔒 教學關卡強制進入
未進過教學關卡前,模式選擇下「單人模式按鈕鎖定」(灰階)。進入教學關卡後(無論是否過關)即解鎖單人模式。
👥 雙人模式 UI 上線
JSG11 v1.0 雙人模式 UI 已上線(ModeSelect 含按鈕、Record 含 2P tab),但 RD 功能延後 v1.x 才實裝。現階段 lock 樣式表達「教學關卡尚未完成」。
⚙️ 無設定入口
遊戲內主選單不放設定按鈕,jacfitness 設定統一在 App 大廳。
🔁 沒過關回大廳
沒過 → 回大廳重新選關(不顯示 Try Again 字眼),玩家自行決定是否重打。
310 個畫面清單 亞哈Jason/兔子
依交付優先序排列。命名鎖結構:亞哈設計時用同樣命名、RD 實裝時用同樣命名 → 零翻譯成本。v0.11 已含 Bluetooth(雙態)+ Record。
4單關循環流程 UI開發
關卡進場 → 10 球循環 → 結算。每球的 UI 反饋順序如下。
已顯示
(無 3·2·1 倒數)
HUD 右上常駐挑戰面板
v0.8 刪除:Stage 字卡 / 機關介紹字卡 / 挑戰任務字卡 / 3·2·1 倒數 — 玩家在 LevelSelect 已看過全部資訊,進關不重複介紹
5命名規範 亞哈Jason/兔子
與舊 JSG 不同:JSG09 冰壺用 Curling_B 等單字 key 易撞名,JSG11 一律加 Bowling_ 或 JSG11_ 前綴。
前綴與命名空間
| 命名空間 | 用途 | 範例 |
|---|---|---|
UIJSG11_ | UI 畫面 / panel | UIJSG11_Battle_HUD |
Bowling_ | 美術 / 音效 / VFX 資源 key | Bowling_VFX_Strike |
JSG11_ | 程式 Component / Controller | JSG11_AimingArrowController |
bowling. | 多語系 key(lowercase dot notation) | bowling.battle.hud.score |
元件類型前綴
狀態後綴與多實例編號
6戰鬥 HUD 佈局 亞哈兔子
遊戲中常駐 HUD(亞哈視覺、兔子實裝)。實際視覺設計待亞哈 5/15~5/22 交付。
HUD 元素清單(v0.7+,對齊 Figma frame UIJSG11_Battle_HUD)
- 當前分數(左上 `Lbl_Score_Current`)— 絕對數字(例:136)
- 過關門檻(左上分數旁 `Lbl_Score_Threshold`)— 「過 96」
- 球數計數(右上 `Cnt_Ball`)— 「3 / 10」
- Stage 標記(右上球數旁 `Lbl_StageId`)— 「Stage 3」純文字
- 挑戰任務面板(右上 `Pnl_ChallengeTask` 常駐)— 「本關挑戰:不洗溝」+ 即時失敗變灰 + X 標記(v0.8 起改 HUD 常駐,不再用進關字卡)
- 暫停按鈕(右上角 `Btn_Pause`)— 觸發暫停確認對話框
- 瞄準箭頭(球道上方 `Bar_AimArrow`)— 階段 2 自動擺動,揮臂瞬間定格
- 狀態提示文字(球道下方 `Lbl_StatusHint`)— Ready/Finish/Strike/NewStage/Gutter/Sucked 共用容器(詳 §字卡)
7結算頁佈局 亞哈兔子
結算頁元素清單(v0.8 簡化)
- Header「Result」金色大字(取代 v0.7 「PASS」狀態文字 — 不論過關 / 沒過都顯示 Result)
- 單一中央 `Pnl_ResultDetail` 圓角面板含 4 行:Strike × N / Open × N / 挑戰達成(Clear +10 或 Failed)/ 總分(N / 96)
- 「繼續」按鈕(右下,金底紅邊 `Btn_Continue`)— 取代 v0.7「返回大廳」
- 過 96 → 點繼續回大廳(解鎖下一關);沒過 → 點繼續回大廳(玩家自選重打或換關,v0.14 無 Try Again)
8關卡選擇佈局 亞哈Jason
3 種卡片狀態
已挑戰達成
- 右下角金星徽章 `Bdg_Card_ChallengeAchieved`
- 顯示機關 icon(左上小框)
- 可重玩拿挑戰加分
當前可玩
- 黃色背景 + 橘色邊框視覺強調
- 顯示機關 icon
- 頂部「下一關解鎖分數 96 分」標籤常駐(v0.11 新增 → 取代舊版卡片內提示)
鎖定
- 灰階 + 鎖頭 icon `Ico_Card_Lock`
- 無法點擊
- 需先過前一關 96 分
⚙️ 開發規格
1程式重做範圍兔子/Jason
除演算法層外全部重做(包含遊戲規則)。本企劃書 dev panel 採「企劃流程圖 + 資料結構」導向,code 細節由 RD 自決。
時程風險:兔子 / Jason 工時翻倍以上,一次 CP 驗收可能撐不住,建議延 1~2 個月或拆 CP(待 CP0 時程評估)。
保留 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鏡頭流程兔子
JSG11_CameraManager 全部重寫(不沿用冰壺 CameraManager)。鏡頭切換邏輯可參考冰壺 TraceCameraChangeOverHeadCamera 設計思路,但目標相機改為新增的 _pinAreaCamera,並移除冰壺結算頂視角流程。
_overHeadCamera 流程整段移除。
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 | 計入過關門檻 |
- Strike 判定只看正規瓶:障礙瓶 / 地雷彈飛瓶倒下不影響邏輯
- Stage 5 地雷彈飛瓶算倒下:仍可 Strike,但挑戰失敗(限制違規 → 失去 +10)
- 無 Spare
- 無連擊獎勵(連續 Strike 各自 +5,不額外加碼)
- 強制 10 球(提前達標也要打完)
基礎滿分 = 10 球 × (正規瓶 + 5) = 150 · 含挑戰滿分 = 160 · 門檻 = 160 × 60% = 96
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 LevelVideoAmount: int
📊 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]
📋 完整功能表
1. 投擲系統(24 項)— Andros 動作演算法 + 兔子 功能製作
| # | 模組 | 功能 | 負責 | 備註 |
|---|---|---|---|---|
| BW-001 | 投擲基礎 | 階段 1 — 手腕 Roll 偵測 → 球道 X 站位映射 | Andros | 演算法沿用 Andros DetectRotate + OnRotate;站位 UI 自寫 |
| BW-002 | 投擲基礎 | 階段 1→2 — 手放下確認(OnConfirm 鎖定站位) | Andros | 演算法沿用 OnConfirm(Pitch<0 + Gyro.z<-50000) |
| BW-003 | 投擲基礎 | 階段 2 — 瞄準箭頭自動擺動(DOTween) | 兔子 | 取代冰壺 SetObjectRotation 設計 |
| BW-004 | 投擲基礎 | 階段 2 — 揮臂力道計算 | Andros | 演算法沿用 Andros PushCurling |
| BW-005 | 投擲基礎 | 階段 2 — 推出瞬間擷取箭頭角度為球初始 forward 向量 | 兔子 | OnPush 觸發時鎖定 AimingArrow 當下角度 |
| BW-006 | 投擲基礎 | 重選 — 手往上抬觸發 OnReadjust 回到階段 1(可選) | Andros | 依 UX 決定是否開放 |
| BW-007 | 旋轉球路 | 手環角加速度讀取 | Andros | input source 已確認 5/11 |
| BW-008 | 旋轉球路 | 接收手環旋轉輸入 | Andros | 白話:手腕扭動偵測 |
| BW-009 | 旋轉球路 | 手腕轉動量 → 球旋轉量(對應曲線) | Andros | 線性 / 分段待 Andros 收斂 |
| BW-010 | 旋轉球路 | 手腕未扭 → 球走直線(不靈敏區) | Andros | QC 必測 |
| BW-011 | 旋轉球路 | 球旋轉速度上限(避免暴衝) | Andros | — |
| BW-012 | 投擲功能 | 球瓶倒下判定 — 角度閾值 | 兔子 | — |
| BW-013 | 投擲功能 | 球瓶倒下判定 — 旋轉速度閾值 | 兔子 | — |
| BW-014 | 投擲功能 | 球旋轉控制元件實裝 | 兔子 | 5/18 接 Andros v1 |
| BW-015 | 投擲功能 | 球的直線基礎軌跡 | 兔子 | — |
| BW-016 | 投擲功能 | 球速強制覆寫(防止橫向位移殘留) | 兔子 | — |
| BW-017 | 投擲功能 | 球的旋轉量影響球路彎曲程度 | 兔子 | — |
| BW-018 | 投擲功能 | 球出手特效 trigger | 兔子 | 對接綠豆 VFX |
| BW-019 | 投擲功能 | 強制 10 球流程 | 兔子 | 提前達標也要打完 |
| BW-020 | 投擲功能 | 球的回吐機制(重置板上下移動) | 兔子 | 不抓球,內部重置 |
| BW-021 | 鏡頭 | 球出手 → 追球視角(traceCamera 跟球前進) | 兔子 | JSG11_CameraManager 自寫(參考冰壺 TraceCameraMove 思路) |
| BW-022 | 鏡頭 | 過截止線 → 切換到瓶區近景(PinAreaCamera) | 兔子 | 新增 |
| BW-023 | 鏡頭 | 瓶區近景倒瓶過程聚焦 | 兔子 | 鏡頭跟瓶陣中心微擺動 |
| BW-024 | 鏡頭 | 倒瓶結束 → 拉回投擲視角 | 兔子 | 取代冰壺 OverHeadCamera 結算流程 |
2. 計分系統(14 項)— Jason
| # | 模組 | 功能 | 備註 |
|---|---|---|---|
| BW-025 | 基礎計分 | Open 計分(倒幾瓶 = 幾分) | — |
| BW-026 | 基礎計分 | Strike 計分(15 分 = 10 + 5) | — |
| BW-027 | 基礎計分 | Strike 判定 — 僅以正規瓶為準 | — |
| BW-028 | 基礎計分 | Strike 判定 — 排除障礙瓶 | Stage 2 障礙瓶倒下不影響 |
| BW-029 | 基礎計分 | Strike 判定 — 排除地雷彈飛瓶 | Stage 5 仍算 Strike 但挑戰失敗 |
| BW-030 | 基礎計分 | UI 顯示絕對分數(不顯示百分比) | — |
| BW-031 | 挑戰任務 | Stage 1 — 至少 3 次 Strike(結算統計) | — |
| BW-032 | 挑戰任務 | Stage 2 — 不擊倒障礙瓶(即時失敗) | — |
| BW-033 | 挑戰任務 | Stage 3 — 不洗溝(即時失敗) | — |
| BW-034 | 挑戰任務 | Stage 4 — 不要碰到黑洞(即時失敗) | — |
| BW-035 | 挑戰任務 | Stage 5 — 不要碰到地雷(即時失敗) | — |
| BW-036 | 挑戰任務 | ChallengeTracker — 即時失敗 API | — |
| BW-037 | 挑戰任務 | ChallengeTracker — 結算判定 API | — |
| BW-038 | 失敗處理 | 限制違規 → 改加分制(失去 +10) | — |
3. 5 關設計(13 項)— Jason + 兔子
| # | 模組 | 功能 | 負責 |
|---|---|---|---|
| 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 | 闖關系統 | 關卡解鎖機制(過 96 → 下一關開放) | 兔子 |
4. 三機關(1 項,RD 待討論)
| # | 功能 | 備註 |
|---|---|---|
| BW-052 | 三機關(風場 / 黑洞 / 地雷)詳細規格與實作 — RD 待討論 | 原 22 條細項整併,CP0 後再展開 |
5. UI - Lobby(20 項)— 亞哈視覺 + Jason 程式
| # | 模組 | 功能 |
|---|---|---|
| BW-053 | 主選單 | 點擊開始按鈕 |
| BW-054 | 主選單 | 教學按鈕 |
| BW-055 | 主選單 | 紀錄按鈕(原排行,v0.11 改名) |
| BW-056 | 主選單 | 主視覺背景(環型 / 弧型) |
| BW-057 | 模式選擇 | 單人模式按鈕 |
| BW-058 | 模式選擇 | 教學關卡按鈕 + 首次強制 / 解鎖邏輯 |
| BW-059 | 關卡選擇 | 5 卡片橫排佈局 |
| BW-060 | 關卡選擇 | 卡片狀態 — 已過關 |
| BW-061 | 關卡選擇 | 卡片狀態 — 當前可玩 |
| BW-062 | 關卡選擇 | 卡片狀態 — 鎖定 |
| BW-063 | 關卡選擇 | 卡片內容 — 機關 icon |
| BW-064 | 關卡選擇 | 卡片內容 — 歷史最高分 |
| BW-065 | 關卡選擇 | 卡片內容 — 挑戰達成標記 |
| BW-066 | 關卡選擇 | 卡片內容 — 解鎖門檻分數提示 |
| BW-067 | 關卡選擇 | 「開始」按鈕 |
| BW-068 | 教學頁 | 動作教學頁 1 — 兩階段投擲 |
| BW-069 | 教學頁 | 動作教學頁 2 — 手腕扭動控制曲球 |
| BW-070 | 教學頁 | 上一頁按鈕 |
| BW-071 | 教學頁 | 下一頁按鈕 |
| BW-072 | 紀錄頁 (Record) | 紀錄結構(CP0 待決:各關獨立 vs 統一)+ 1P/2P tab(v0.11;2P 內容 RD v1.x)+ 我的最高分 |
6. UI - 戰鬥(25 項)— 亞哈視覺 + 兔子 程式
| # | 模組 | 功能 |
|---|---|---|
| BW-073 | 進場 | Stage 編號 + 名稱字卡 |
| BW-074 | 進場 | 機關介紹字卡(Stage 3/4/5) |
| BW-075 | 進場 | 挑戰任務字卡 |
| BW-076 | 進場 | Ready 倒數 |
| BW-077 | HUD | 當前分數(左上) |
| BW-078 | HUD | 過關門檻顯示 |
| BW-079 | HUD | 球數計數(右上) |
| BW-080 | HUD | Stage 標記 |
| BW-081 | 挑戰面板 | 面板視覺 |
| BW-082 | 挑戰面板 | 即時失敗 → 變灰 + X 標記 |
| BW-083 | 投擲 UI | 瞄準箭頭自走擺動視覺 |
| BW-084 | 單球字卡 | Open 字卡 |
| BW-085 | 單球字卡 | Strike 字卡 |
| BW-086 | 暫停確認 | 確認對話框視覺 |
| BW-087 | 暫停確認 | 取消 / 繼續遊戲 |
| BW-088 | 暫停確認 | 確定 / 回大廳(當局放棄) |
| BW-089 | 結算頁 | PASS 狀態顯示 |
| BW-090 | 結算頁 | 該關總分 |
| BW-091 | 結算頁 | 門檻達成狀況(未過顯示「未達 96 分」) |
| BW-092 | 結算頁 | Strike 統計 |
| BW-093 | 結算頁 | Open 統計 |
| BW-094 | 結算頁 | 挑戰達成徽章 |
| BW-095 | 結算頁 | 挑戰失敗顯示 |
| BW-096 | 結算頁 | 歷史最高分 |
| BW-097 | 結算頁 | 「返回大廳」按鈕(唯一按鈕) |
7. 美術素材(13 項)— 美術組三階段
| # | 階段 | 功能 | 負責 |
|---|---|---|---|
| BW-098 | 階段 1 場景 | 保齡球館場景 — 環型 / 弧型主視覺 | Jason |
| BW-099 | 階段 2 球瓶 | 球道模型 | Jason |
| BW-100 | 階段 2 球瓶 | 球道支援彎曲軌跡渲染 | Jason |
| BW-101 | 階段 2 球瓶 | 正規球瓶模型 | Jason |
| BW-102 | 階段 2 球瓶 | 一般球模型 | 兔子 |
| BW-103 | 階段 2 球瓶 | 球體旋轉視覺 — 連續映射尾跡 | 兔子 |
| BW-104 | 階段 2 球瓶 | 球體旋轉視覺 — 旋轉貼圖 | 兔子 |
| BW-105 | 階段 3 障礙物 | 障礙瓶 — 模型(視覺明顯區分正規瓶) | Jason |
| BW-106 | 階段 3 障礙物 | 風場視覺(風線 + 風向 + 範圍可視化) | 兔子 |
| BW-107 | 階段 3 障礙物 | 黑洞視覺(旋渦 + 邊緣扭曲 + 半徑) | Jason |
| BW-108 | 階段 3 障礙物 | 地雷視覺 — 外殼 | Jason |
| BW-109 | 階段 3 障礙物 | 地雷視覺 — 警示燈 | Jason |
| BW-110 | 階段 3 障礙物 | 地雷視覺 — 引爆 VFX 介接 | Jason |
8. 特效 VFX(22 項)— 綠豆
| # | 模組 | 功能 | 負責 |
|---|---|---|---|
| BW-111 | 通用 | Ready 字卡 | 兔子 / 亞哈 / 綠豆 |
| BW-112 | 通用 | Finish 字卡 | 兔子 / 亞哈 / 綠豆 |
| BW-113 | 通用 | New Stage 進場字卡 | 兔子 / 亞哈 / 綠豆 |
| BW-114 | 通用 | 投擲方向箭頭 VFX | 兔子 / 綠豆 |
| BW-115 | 球與球路 | 球旋轉視覺 VFX(連續變化尾跡) | 兔子 / 綠豆 |
| BW-116 | 球與球路 | 球路軌跡光帶(依旋轉量彎曲) | 兔子 / 綠豆 |
| BW-117 | 結算字卡 | Strike VFX — 彩帶 | 兔子 / 綠豆 |
| BW-118 | 結算字卡 | Strike VFX — 閃光 | 兔子 / 綠豆 |
| BW-119 | 結算字卡 | Strike VFX — 字卡 | 兔子 / 亞哈 / 綠豆 |
| BW-120 | 結算字卡 | Open VFX — 字卡 + 分數彈出 | 兔子 / 亞哈 / 綠豆 |
| BW-121 | 機關 | 障礙瓶倒下警示 VFX — 紅色閃光 | Jason / 綠豆 |
| BW-122 | 機關 | 風場 VFX | 兔子 / 綠豆 |
| BW-123 | 機關 | 球被吹偏軌跡修正視覺 | 兔子 / 綠豆 |
| BW-124 | 機關 | 洗溝 VFX — 「Gutter!」字卡 | 兔子 / 亞哈 / 綠豆 |
| BW-125 | 機關 | 洗溝 VFX — 警示閃光 | Jason / 綠豆 |
| BW-126 | 機關 | 黑洞 VFX — 旋渦動畫 | Jason / 綠豆 |
| BW-127 | 機關 | 黑洞 VFX — 球被吸入扭曲 | Jason / 綠豆 |
| BW-128 | 機關 | 黑洞 VFX — 「Sucked!」字卡 | 兔子 / 亞哈 / 綠豆 |
| BW-129 | 機關 | 地雷 VFX — 警示燈閃爍 | Jason / 綠豆 |
| BW-130 | 機關 | 地雷 VFX — 引爆爆炸光圈 | Jason / 綠豆 |
| BW-131 | 機關 | 地雷 VFX — 瓶子被彈飛尾跡 | Jason / 綠豆 |
| BW-132 | 結算 | 挑戰達成 +10 VFX(金色徽章 + 字卡) | 兔子 / 亞哈 / 綠豆 |
9. 音效 SFX(16 項)— 鏡
| # | 模組 | 功能 | 備註 |
|---|---|---|---|
| BW-133 | 通用 | Ready 提示音 | — |
| BW-134 | 通用 | Finish 提示音 | 取代過關 PASS 音 |
| BW-135 | 通用 | New Stage 進場字卡音 | 對應 BW-113 字卡 + 解鎖回饋音 |
| BW-136 | 通用 | 球出手音 | — |
| BW-137 | 通用 | 球滾動音 | — |
| BW-138 | 撞瓶 | 撞瓶聲(單一音檔) | 大 / 小力合 1 |
| BW-139 | 撞瓶 | 球瓶倒下音 | — |
| BW-140 | Strike | Strike 音效(單一音檔) | — |
| BW-141 | 機關 | 倒入溝 gutter 音 | Stage 3 挑戰失敗 |
| BW-142 | 機關 | 障礙瓶倒下警示音 | Stage 2 |
| BW-143 | 機關 | 風場 — 風吹聲 | Stage 3 |
| BW-144 | 機關 | 風場 — 球偏移聲 | — |
| BW-145 | 機關 | 黑洞 — 吸力聲 | Stage 4 |
| BW-146 | 機關 | 黑洞 — 吸入音效 | — |
| BW-147 | 機關 | 地雷 — 引爆聲 | Stage 5 |
| BW-148 | 結算 | 挑戰達成 +10 音(金幣 / 成就) | — |
10. BGM(2 項)— 鏡
| # | 功能 | 備註 |
|---|---|---|
| BW-149 | 大廳 BGM | — |
| BW-150 | 遊戲 BGM(5 關共用) | — |
11. 整合 / QC(20 項)— 素材實裝 + Excel 表 + 中斷 + 多語系 + QC
| # | 類別 | 功能 | 負責 |
|---|---|---|---|
| BW-151 | 素材實裝 | 美術場景素材實裝 | Jason / 兔子 |
| BW-152 | 素材實裝 | 音效素材實裝 | Jason / 兔子 |
| BW-153 | 素材實裝 | 特效素材實裝 | Jason / 兔子 |
| BW-154 | 素材實裝 | UI 素材實裝 | Jason / 兔子 |
| BW-155 | Excel 表 | JSG11Bowling_LevelSetting | 待 RD |
| BW-156 | Excel 表 | JSG11Bowling_PinSetting | 待 RD |
| BW-157 | Excel 表 | JSG11Bowling_MechanismSetting | 待 RD |
| BW-158 | 中斷恢復 | 藍牙斷線偵測(沿用 shared/bluetooth) | 待 RD |
| BW-159 | 中斷恢復 | 藍牙斷線 — 重投當球 vs 整關重來判定 | 待 RD |
| BW-160 | 多語系 | 多語系 key — 5 關名稱 | Jason |
| BW-161 | 多語系 | 多語系 key — 挑戰任務描述 | Jason |
| BW-162 | 多語系 | 多語系 key — UI 文字 | Jason |
| BW-163 | QC 必測 | 靜止手腕投擲走直線 | 兔子 |
| BW-164 | QC 必測 | 5 關門檻平衡 | 兔子 / Jason |
| BW-165 | QC 必測 | 挑戰任務即時失敗判定 | Jason |
| BW-166 | QC 必測 | 障礙瓶倒下不重置邏輯 | QC |
| BW-167 | QC 必測 | 地雷彈飛 Strike 判定 | QC |
| BW-168 | QC 必測 | 5 關全通關流程 | 兔子 / Jason |
| BW-169 | QC 必測 | 各 Stage 重玩流程 | 兔子 / Jason |
| BW-170 | CP | CP 一次驗收 @ 7/7(row 136) | 小曹 |
scripts/sync-jsg11-bowling-v5.py(雙向同步:sheet 拉回 D/E/F/G/H,markdown 主導 A/B/C/I;非破壞性,可重複跑)欄位:A 編號 / B 模組 / C 功能 / D 狀態 / E 負責 RD / F 美術負責 / G 預計階段 / H 完成日期 / I 備註
games/JSG11-bowling/ · 視圖由 Agent 自動編譯