JSG12 戰鬥陀螺
1遊戲核心
2P 即時對戰體感遊戲。玩家持續搖動手環維持陀螺能量——搖越猛,陀螺轉速越快、也越耐打。兩顆陀螺在碗式競技場中依真實陀螺物理(碗底向心力 + 切向驅動力)自主移動、正面對撞掉血,搶奪場上能量球(吃球回能量、滿格吃球觸發「爆衝」)。
開局有三選一抽卡(三張命名陀螺:攻擊型 / 耐力型 / 充能型),策略只在開局幾秒,對戰中零額外操作——v1 只有一個核心動作(搖動)、一個最小機制。
Energy 數值同時驅動「移動速度/自轉快慢」與「還能撐多久」;但打人多痛不是直接看當下能量,而是由固定的碰撞公式決定(見「核心機制」分頁)。2026-07-16 CP0 拍板移除「能量差加成」後,能量高不再直接等於打得更痛,只等於更耐打、蓄大招更快、跑得更快。
2設計哲學
🕹️ 一個核心動作
全程只有「搖動手環」一個操作輸入;大招(Burst)、爆衝(Overdrive)、衝刺(Dash)三個獨立系統皆由程式依能量或搖動強度狀態自動觸發,不加第二顆操作鍵,避免手環偵測訊號互相干擾。
⚖️ 能量=轉速=生命;傷害另算
同一能量值驅動移動與存活;攻擊傷害走固定的碰撞公式與守方防禦結算,能量差不再是傷害來源。
🌀 簡化物理勝過真實模擬
對撞/移動走「碗式速度場」簡化模型(非真 rigidbody),研究真實戰鬥陀螺 gyroscopic precession 物理後得出的移動模型,兼顧手感與工程成本。
🎚️ 調味不翻盤
三張命名陀螺數值差異只影響手感節奏(攻擊/耐力/充能傾向),不做出「這張卡就是強」的失衡。
🛡️ 防滾雪球
削甲走固定值(不隨大招放大)、爆衝破表有上限、大招回落地板都是刻意設計的防線。2026-07-16 CP0 補上最後一塊:能量差對撞加成整條移除(試玩證實它是滾雪球主因)。
3單局流程(遊戲流程總覽)
JSG12 沒有專屬大廳(v2.6 上架,大廳已於 v2.5 廢除),玩家在平台層選完模式/連線後直接進入下列流程:
_shared/pause.md,結算走 _shared/result-screen.md(雙人流程:回藍牙列表/再次挑戰/重新選卡)。
4三張命名陀螺(開局抽卡)
同一卡池三張,2P 各選一張(可選同張=Mirror Match)。策略只在開局選卡,對戰中零額外操作。完整數值見「核心機制」分頁。
5里程碑
| 里程碑 | 日期 | 交付內容 |
|---|---|---|
| CP0 | 2026-07-16 | 設計確認簡報,三方對齊機制/程式/里程碑(已完成) |
| CP0→CP1 開發期 | 7/20 ~ 8/7 | 核心玩法 ET 移植、開局抽卡 UI 實裝、鏡頭系統程式骨架、美術模型/場景色模 |
| CP1 | 2026-08-14 | 核心玩法可玩+雙手環穩定度初驗+3 卡陀螺建模/戰鬥盤背景色模+鏡頭系統程式骨架完成 |
| CP1→CP2 開發期 | 8/17 ~ 9/4 | UI 對戰 HUD 正式視覺、美術 Timeline 終結特效/演出(三支動畫) |
| CP2(功能確認) | 2026-09-11 | 三種終結+大絕/彈出 timeline 完整演出+鏡頭系統整合+UI 正式視覺+全套音效 |
| Alpha | 9/11 ~ 9/25 | QC 測試 + 全員修正 |
完整任務列表見甘特圖 Google Sheet 開發組分頁;詳細決策脈絡見 games/JSG12-battletop/decisions.md 與 overview.md。
核心機制
1移動物理 — 碗式速度場模型(v3)RD
不是 AI steering,是速度場驅動的簡化物理模型——研究真實戰鬥陀螺 gyroscopic precession(進動)物理後定案。每顆陀螺只有「位置 + 速度向量」,沒有「朝向 + steering force」。
rNorm²(離中心距離的平方)增強——越靠場地邊緣,被推回中心的力道越強;切向驅動力隨能量比例增強(能量越高、繞行動力越強)。兩者合成後,陀螺會自然沿場地邊緣「繞圈」而非直衝中心。
// 完整移動公式(來源:ArenaSim.MoveTop) r(離場地中心距離) = |position(位置向量)| rNorm(正規化半徑) = r / arenaRadius(場地半徑 6) inward(朝中心單位向量) = -position / r gravity(碗底向心力強度) = bowlGravity(碗底向心係數 160) × rNorm² orbitStrength(切向繞行力強度) = orbitForce(切向力係數 40) × lerp(minPowerFactor(0.3), 1, clamp(Energy/100, 0, 1)) acceleration(合加速度) = inward × gravity + tangent(切向單位向量) × orbitStrength + seekPull(能量球/爆衝追擊力) + jitter(隨機擾動,最大 perturbation=1) velocity(新速度) = velocity(舊速度) + acceleration × dt maxSpeed(當幀速度上限) = moveSpeedMax(最高移動速度 22) × lerp(minPowerFactor, 1, clamp(Energy/100,0,1)) velocity *= 1 - drag(阻力係數 2.2) × dt position(新位置) = position(舊位置) + velocity × dt
速度上限對照
| 能量狀態 | 能量範圍 | 速度上限 |
|---|---|---|
| 一般 | 0 ~ 100 | 6.6 ~ 22 |
| 爆衝(Overdrive) | 150(瞬間設定) | 最高 33 |
超出場地半徑(6)時位置夾回場緣,速度依牆面法線反射後乘 wallBounce(0.6)。
為什麼 1P/2P 會自然對撞
1P 順時針、2P 逆時針起始相位不同 → 自然正面交會碰撞,不靠「AI 判斷該不該撞對方」。能量球微引力(orbAttraction)取代主動搶球邏輯,隨機擾動(perturbation)破對稱避免死鎖。
自動追蹤邏輯(不是完整 AI)
| 狀態 | 追蹤目標 | 拉力公式 |
|---|---|---|
| 一般狀態 | 最近的能量球 | seekPull = normalize(球位置−自己位置) × orbAttraction(8) |
| 能量 ≥ 90%(觸發前) | 最近的能量球(增強) | 拉力再乘 orbSeekMul(2.2) → 實際 17.6 |
| 爆衝期間 | 預測對手攔截點 | aimPosition = 對手位置 + 對手速度 × leadTime(≤0.5s);seekPull = normalize(aimPosition−自己位置) × chaseForce(35) |
2能量系統 — 注入與衰減
單一 Energy 同時代表轉速與生命;攻擊傷害沒有直接乘當下能量,而是走固定的碰撞結算公式(見下節)。
| 語意 | 數值來源 | 效果 |
|---|---|---|
| 轉速 | 同能量值正規化 | 驅動移動速度、視覺自轉速度 |
| 攻擊傷害 | collisionDamage/burstDamage/attackMul | 當下能量不直接乘進傷害;能量優勢只體現在更耐打、較快蓄到大招、移動速度較高 |
| 生命 | 同能量值 | 歸零=停轉=輸(力盡倒下) |
// 手環輸入 → 搖動注能(來源:TopState.Tick) gyroMagnitude(三軸角速度合成幅值) = sqrt(x² + y² + z²) normalizedShake(正規化搖動強度) = clamp((gyroMagnitude - deadzoneMdps(靜止死區 300)) / (maxGyroMdps − deadzoneMdps), 0, 1) responseShake(回應曲線後強度) = normalizedShake ^ responseGamma(回應曲線次方 0.6) smoothingK = 1 - exp(-dt / smoothingSec(平滑時間 0.12s)) smoothedShake += (responseShake - smoothedShake) × smoothingK // 注能與自然衰減 n(能量比例) = clamp(Energy / energyCap(100), 0, 1) t(末段進度) = clamp((n - 0.95) / 0.05, 0, 1) gainFactor(注能效率) = lerp(1, 0.35, t ^ 1) // 越接近滿格,注能效率越低 搖動注能量 = shakeGain(15/秒) × gainFactor × gainMul(卡牌倍率) × clamp(shakeIntensity,0,1) × dt decayRamp(衰減時間倍率) = 1 + max(0, battleAge − 25) × 0.06 // 局齡越久衰減越快 自然衰減量 = decayRate(4/秒) × decayMul(卡牌倍率) × decayRamp × dt Energy(新能量) = Energy(舊能量) + 搖動注能量 − 自然衰減量
📉 為什麼滿格前會「越搖越沒用」
能量比例超過 lateGainStart(95%) 後,注能效率沿次方曲線降到 lateGainMin(35%)——避免玩家一路瘋狂搖到滿格後毫無節奏起伏,也讓「滿格蓄大招」有一段自然的減速前搖。
⏱️ 為什麼局越久衰減越快
對戰滿 25 秒後,自然衰減倍率每秒 +0.06——這是 2026-07-09 會議「搖多少都給,但衰退速度隨時間加快」的落地方案,保證長局收斂、不會兩人一路互相耗到天長地久。搖動注入端本身不隨局長降低。
energyCap(100);爆衝期間上限為 100×capMul(1.5)=150。Energy ≤ 0 時停轉落敗。
3對撞傷害結算 — 完整 8 步驟
判定時機:物理接觸偵測(0.95 距離內 + 0.45 秒冷卻)觸發,不是週期性計時器。A、B 兩顆陀螺同時互打,各自跑一次全套下列流程:
armorHp÷削甲」可直接口算。collisionDamage/burstDamage/chipPerHit/shatterBonus/knockThreshold(雙方共用,只有改 config 才會變)。卡牌固定常數:attackMul/defense/armorHp/knockResist(開局選卡定死)。逐幀動態變數:Energy/Armor/Armed/Shattered。
4實戰算式範例(真實數值,非示意)
情境:1P 用赤獄戰斧(attackMul 1.25/defense 0.05/護甲 35),能量 70,這次剛好帶著大招(Armed);2P 用玄武磐盾(attackMul 0.9/defense 0.3/護甲 100),能量 50,沒有大招。兩人護甲都還是滿的。
| 步驟 | 算給 1P 的傷害(別人打 1P) | 算給 2P 的傷害(1P 打 2P) |
|---|---|---|
| ① 基礎傷 | 7.13 | 7.13 |
| ② 能量差加成 | 已停用,+0 | 已停用,+0 |
| ③ 大招加成 | 2P 沒大招,不加 | 1P 帶大招:+57.02 → 64.15 |
| ④ ×攻擊倍率 | ×玄武磐盾 0.9 → 6.42 | ×赤獄戰斧 1.25 → 80.19 |
| ⑤ ×(1−defense) | ×(1−0.05)=0.95 → 6.10 | ×(1−0.3)=0.7 → 56.13 |
| ⑥ 削甲(獨立公式) | 3.92×0.9 ≈ 3.53 | 3.92×1.25 ≈ 4.90 |
| ⑦ 破防? | 護甲 35−3.53=31.47,未破防 | 護甲 100−4.90=95.10,未破防 |
| ⑧ 擊飛? | 6.10 < 15×0.85=12.75,否 | 56.13 ≥ 15×1.35=20.25,是,2P 被擊飛 |
burstFloor(60);2P 能量 50−56.13 算出來是負的,直接夾在 0——2P 這局輸了。因為 2P 的護甲全程沒破(95.10/100 還很厚),這場終結會判定成轟飛終結+擊飛演出,不是擊碎終結。
這個案例同時示範了:能量差已不再影響傷害、大招怎麼一擊斃命、防禦與削甲是兩條分開算的公式,以及「擊飛」不需要破防也會觸發。
5傷害疊加規則總表 — 哪些會疊加,哪些不會
這是全文件最容易混淆的一塊,統一列成矩陣:橫軸是各種傷害/效果來源,縱軸是它們「會不會」疊加或吃到其他加成。
| 傷害來源 | 吃③大招加成 | 吃④攻擊倍率 | 受⑤defense影響 | 觸發⑥削甲 | 算入⑧擊飛判定基準 |
|---|---|---|---|---|---|
| ① 一般對撞基礎傷 | ✔ 是(若攻方 Armed) | ✔ 是 | ✔ 是 | ✔ 是(獨立公式) | ✔ 是 |
| ③ 大招加成(Burst) | — 本身即大招 | ✔ 是(隨①一起乘) | ✔ 是(隨①一起乘) | ✘ 否(削甲不吃大招) | ✔ 是 |
| ⑦ 破防加成(shatterBonus) | ✘ 否 | ✘ 否 | ✘ 否(破防後已跳過 defense) | — 不適用 | ✔ 是(併入該次最終傷害) |
| 衝刺 Dash(12) | ✘ 否 | ✘ 否 | ✔ 是 | △ 是(同幀與一般對撞雙觸發時只算一次) | ✔ 是(用自己算出的 12×(1−defense) 比對) |
| ② 能量差加成 | 已全域停用=0,不參與任何計算(DEC-JSG12-029) | ||||
| Combo 連續對撞加成 v2+ 候選,CP1 後評估 |
✘ 否(比照削甲防滾雪球慣例) | ✔ 是(若上線,隨①一起乘) | ✔ 是(若上線) | ✘ 否 | ✔ 是(若上線) |
- ①基礎傷 + ③大招加成 → 一起乘④攻擊倍率、一起吃⑤防禦減傷
- ⑤防禦減傷後的傷害 + ⑦破防當下的 shatterBonus(一次性)
- Dash 若同幀也觸發一般對撞:兩筆血量傷害分開結算疊加(但削甲只算一次)
- 削甲⑥永遠不吃③大招加成、不看⑤守方 defense(固定值天生不滾雪球)
- Dash 傷害不接③大招加成、④攻擊倍率、②能量差(三個獨立系統各管各的)
- 能量差加成②已全域停用,不會出現在任何算式裡
- Combo(若上線)只加在①基礎傷,不疊加③大招——避免連撞+大招疊在一起爆表
6三大獨立系統對照 — 大招/爆衝/衝刺
三者觸發條件、效果數值完全獨立,只有大招與爆衝共用同一顆 Armed 開關(觸發爆衝會順便蓄好大招,但兩者的觸發條件跟數值效果毫無關係)。
⭐ 大招(Burst / ARMED)
觸發後進入「蓄好大招」狀態(HUD ★ARMED),等下一次對撞才釋放,不會馬上生效。釋放後對敵方額外造成固定 burstDamage(57.02)(會再乘攻擊倍率)。自己的能量打完後 clamp 到 burstFloor(60)——不是歸零,鼓勵持續搖、反覆衝頂再放。用完立刻重置,要重新蓄一次。
🔥 爆衝(Overdrive)
能量直接設到 cap×1.5=150(瞬間設定)。durationSec(5秒)內:移動追擊力增強(chaseForce)、搶球引力增強(×2.2)、攔截提前量開啟。結束後依 overflowDecay(80/秒)快速衰退回一般上限。爆衝本身不直接加傷害——CP0 移除②能量差加成後,「破表能量間接打更痛」的傷害槓桿已消失,戰術價值收斂為①更耐打的血量緩衝、②追擊/搶球物理增強、③順便蓄好大招三項。
⚡ 衝刺(Dash)
觸發看的是瞬間搖動強度,跟能量值高低無關。扣固定 energyCost(8)能量 → windupSec(0.35s)蓄力凍結(此時不受傷,HUD「⚡蓄力」)→ dashSpeed(30)直線衝向對手 durationSec(0.25s)→ cooldownSec(2s)冷卻。瞄準但不追尾:瞄準座標在蓄力結束、真正發動那一幀才鎖定,對手有完整視覺 tell 可先走位。
7防禦層 — 護甲/破防/擊飛
呼應線下賽制(Beyblade X 官方積分制擊飛/爆裂概念,原創命名不沿用官方 IP)加的加戲層,勝負判定仍唯一是能量歸零。
| 參數 | 只負責 | 備註 |
|---|---|---|
defense | 只保血(⑤防禦減傷) | 破防後永久失效,修不回 |
armorHp | 只決定幾撞破防 | armorHp÷3.92 口算:赤獄 9 撞/紫電 13 撞/玄武 26 撞(對上赤獄再 ÷1.25) |
knockResist | 只管擊飛門檻 | 與 defense/armorHp 互不影響 |
shakeRepairRate | 搖動回甲速率 | 目前刻意設 0(不開),破防前護甲修不回 |
knockThreshold(15)× knockResist =擊飛——護甲沒破一樣可能被擊飛,兩者互不依賴。
8三種終結判定
依歸零時距最後被撞 < 0.6 秒分流:
| 終結 | 觸發條件 | 演出 | 終結字卡(英文) |
|---|---|---|---|
| 力盡倒下 | 自然力盡(能量 < 12% 開始傾角進動搖晃,歸零後傾倒躺平) | 安靜特寫,不定格 | STILL SPINNING |
| 轟飛終結 | 被撞歸零、未破防 | 拋物線飛出碗外+翻滾+落地彈跳 | KNOCKED OUT |
| 擊碎終結 | 破防後被撞歸零 | hit-stop+特寫+輸家碎片爆裂,依贏家卡牌換終結特效 | TOTAL CRUSH |
鏡頭與演出
1兩種鏡頭觸發方式
演出結束後陀螺位置的處理方式完全不同,這是理解本節的關鍵。
| 程式控制 | Timeline 控制 | |
|---|---|---|
| 觸發條件 | 5 個「數值跨過門檻」事件+1 個平時基準鏡頭 | 撞擊事件觸發(終結/彈出/大絕) |
| 演出後陀螺位置 | 維持原場地位置,繼續打轉 | 不保證相同,通常結尾重置 |
| 流程 | 鏡頭切換+跟隨,無額外分鏡 | 撞擊觸發 → timeline 過場 MG → timeline 演出 → 結局或重置 |
| 技術方向 | 空物件讀 Quaternion.LookRotation 算朝向,Cinemachine Orbital Follow 跟隨;Quaternion.Slerp 平滑轉向 | 過場素材分階段交付:CP1 黑畫面淡入淡出佔位,CP2 換正式 motion graphic |
| 分工歸屬 | RD 跟撞擊判定綁在一起,走一般開發排程 | 美術(仁琪)自主範圍,非 RD 待辦;前置依賴僅「陀螺白模」,不需等 UV/貼圖 |
2CP1 程式鏡頭預覽規格(2026-07-21,6 組 Preset)
Jacfitness_Client 的 research/JSG12_BattleTop 分支已建立獨立鏡頭預覽台、6 組 preset、純運算測試(12/12 通過)。目前只完成角度/構圖驗證,尚未把正式 duration、cooldown 與事件觸發接進對局 Update。
Shattered 由 false 轉 true — 焦點向被破防者偏移 70%,攻擊者保留為次要主體,VFX 不可蓋掉輪廓
OverdriveTimer 由 0 轉正 — 啟動者單主體低角度特寫,沿移動方向預看 0.4 單位
wobbleStartNorm — 前兆中景,從低能量陀螺外側安靜推近,不震屏、不 hit-stop
構圖參考總覽
BattleController.Update。WobbleWarning(低能量前兆)與 NaturalFallFinal(傾倒約 88% 最後一刻)是兩個不同時間點,不可共用同一觸發點。
3鏡頭邊界(甜甜圈範圍限制)
場地上方設一個圓形(甜甜圈狀)範圍,限制程式控制鏡頭的活動邊界,避免特寫鏡頭跟隨陀螺移動時飛出場景外。鏡頭主體追隨「當下要拍的陀螺」(例如雙方 dash 互撞時,優先追隨先碰撞到的一方),在圓形邊界半徑內自由跟隨移動。
4Timeline 控制(腳本化演出)
適用場景:終結演出(碎裂)、彈出場外演出、能量滿必殺技撞擊(大絕)。
TransitionWipe_Spec。
三支 Timeline 演出交付清單
| Timeline | 對應機制 | 數量 | 負責 | 檢查點 |
|---|---|---|---|---|
| 終結動畫(碎裂) | 擊碎終結 | 3 個(依贏家卡牌換特效) | 仁琪 | CP2 |
| 彈出場外演出 | 轟飛終結 | 1 個 | 仁琪 | CP2 |
| 大絕(能量條滿的撞擊) | 大招/Burst 命中 | 3 個(依卡牌) | 仁琪 | CP2 |
5大絕 Cut-in — 陀螺渲染+招式字卡
大絕 timeline 第一拍=cut-in,並兼任大絕過場(斜帶蓋版滑入即擦除轉場,不疊共用 wipe)。
三卡招式名(中英對照,2026-07-16 拍板 DEC-JSG12-027)
英文大字=固定圖片資產,全球統一顯示英文(不進多國表);下方中文招式小字幕=TMP 動態文字,進多國表,英文語系拿掉不顯示。內容沿用 BT-022 正式陀螺 3D 資產做特寫渲染輸出 ×3(不另畫插畫立繪)。ARMED 蓄力期間不播 cut-in。
6撞擊演出分級表
逐行核對 BattleController.cs 七處呼叫點後收斂,拆成三層——不能全部一視同仁交給 RD「延用或微調」。
層 1:純打擊震動手感 RD 可直接延用
| 分級 | 觸發時機 | 震屏 Shake | Hit-stop(秒) | 特寫拉近 | 火花粒子 |
|---|---|---|---|---|---|
| 普通對撞 | 一般碰撞,無擊飛/大招 | 0.35 | 無 | 無 | 14 顆/1.0 |
| Dash 互撞 | Dash 命中 | 0.8 | 0.12 | 4.2/0.45 | 36 顆/1.5 |
| 擊飛 | 單次受傷超門檻 | 0.9 | 0.12 | 4.4/0.4 | 30 顆/1.4 |
| 大招/破防 | Burst 或 Shatter 觸發 | 1.2 | 0.25 | 3.4/0.6 | 60 顆/1.9 |
分級邏輯對齊格鬥遊戲慣例:普通不頓保流暢 → 擊飛輕頓 → 大招/破防重頓+受擊抖動。
層 2:原型現狀是程式控制,正式規劃轉 Timeline 美術範圍,數字僅供節奏參考
| 分級 | 觸發時機 | 原型現狀(僅供節奏參考) |
|---|---|---|
| 轟飛終結 | 被撞出場 | Shake 1.1/HitStop 0.18/CloseUp 5.2,1.5(拉遠讓飛出全程進畫面) |
| 擊碎終結 | 破防後歸零 | Shake 1.6/HitStop 0.55+慢動作0.5/CloseUp 4.2,1.9(不推太近,卡牌特效要進畫面) |
| 大絕 | 能量滿必殺技撞擊 | 目前跟「大招/破防」共用層1程式參數,尚未拆出獨立演出 |
層 3:鏡頭預覽已完成,正式觸發接線仍需開發
DashClash/ArmorBreak/OverdriveEntry/WobbleWarning/NaturalFallFinal 的角度、焦點與畫面尺度已在研究分支預覽驗證,可供 RD 落地時直接對照——但 duration、cooldown 與正式事件觸發仍需接進對局 Update。
7慢動作機制(2026-07-20 拍板)
特寫鏡頭的慢動作機制程式與美術完全分開,不混用:
| 模式 | 控制方 | 可調範圍 |
|---|---|---|
| 程式控制模式 | 純程式控制 | 不開放美術手調時間點 |
| Timeline 模式 | 程式提供可掛在 Highlight 區塊的慢動作腳本+兩個觸發點(開始/結束),預設開啟 | 美術只調倍速參數、自行決定觸發時機 |
規格:淡入淡出 10~15 幀、1.0x → 0.2x(也支援硬切);「進特寫前播慢動作撞擊 vs 進入後才慢」屬表現形式,兩案皆可行由美術選。
美術素材
1美術風格定調(已驗證,可沿用)
原型美術版(分支 feat/beyblade-x-art)對標 Beyblade X 視覺語言,全 code-gen(守公司「美術走 code 生成」原則)。
💡 配色/發光
HDR + Bloom(threshold 1.0,只有 HDR>1 的元素發光)+ Vignette,深色底盤 + 霓虹強調色。
🎬 鏡頭演出
hit-stop(撞擊瞬間 timeScale 定格)+ 撞點特寫急推 zoom-in + 震屏,全部走 unscaled time(慢動作中演出照跑)。完整觸發清單見「鏡頭與演出」分頁。
✨ 火花/衝擊
金屬火花(stretched-billboard,HDR 白熱→橙、重力墜落),依事件分級(普通對撞/擊飛/大招·擊碎三種強度)。
🏟️ 場地
六角紋深色地板(藍黑底+內建 emissive 發光六角線條)。亮度階層鐵律:環境 < 場地 < 陀螺(環境只在畫面邊緣 vignette 區活著,不搶戲)。
💡 打光
舞台聚光(正上方直下打)+ 底盤隊色光暈(誰是誰一眼懂)+ 方向光壓低當補光——自發光會把立體形狀吃掉,改走有方向性的燈光讀出形狀。
🏆 終結演出舞台調光
三種終結各自的舞台調光(撞擊瞬間全場壓暗只留中央聚光)+ 觀眾席相機閃光燈波次 + 依贏家卡牌換終結特效(烈焰處刑/重壓碎擊/紫電轟擊)。
三卡三視覺識別
尾流速度越快越誇張(高速加開火焰效果)。
2⚠️ 不可沿用的 demo 素材(商標/授權風險)
Jacfitness_Client/Jacfitness_Art 的正式交接分支,只留在 research 分支的 Reference 資料夾當「demo 長怎樣」的視覺參考。
| 檔案 | 實際來源 | 問題 |
|---|---|---|
| 三卡陀螺模型(赤獄戰斧用 Meteo L-Drago、玄武磐盾用 Guardian Driger、紫電迅雷用 burstkit) | Sketchfab | Meteo L-Drago/Guardian Driger 是官方 Beyblade(Takara Tomy)角色複製模型,即使上傳者標 CC 授權也不代表有權散布這些設計;burstkit 原型團隊自己標註「非 CC0、不隨綠燈出圈」 |
| 場館外殼(stadium_casing) | 「Beyblade Stadium」by theoplayz31(CC-BY) | 授權雖是 CC-BY,模型名稱本身沾了品牌 |
| 場館環境(env_arena) | 「Sci-fi arena」by Fermit0(CC-BY-NC) | 非商用授權,法律上不能出現在會出貨的商業產品 |
正式美術請重新設計三顆陀螺造型與場館,或從下方「可用資源」清單挑選乾淨素材。
3可用資源(CC0,已查證,可商用)
完整查證記錄與更多備選見 jsg-prototype-forge/prototypes/jsg12-battletop/art-resources.md(三輪獨立調研交叉驗證)。
判斷:程序化生成(primitive 組合 + URP metallic/emission)仍是最務實方案,換裝成本趨近零,正式開發可能不需要真的做 3D 掃描模型。
OpenGameArt – Spark effect/Ring Explosion/Explosion 50幀(皆 CC0)
Hit Impact Effects FREE/Cartoon FX Remaster FREE/Unity Particle Pack(Asset Store 免費 EULA,URP 相容)
Poly Haven – Metal Plate 系列(CC0,完整 PBR)
Unity Toon Shader UTS3(官方,Unity Companion License)
Anime-Speed-Lines by MirzaBeig(Unlicense,公有領域,Beyblade X 同款放射狀速度線)
4模型
| 內容 | 細項 | 數量 | 負責人 | 時間 | 檢查點 |
|---|---|---|---|---|---|
| 陀螺設計 | — | — | 品杰 | 1W | — |
| 陀螺建模 | 結晶輪盤 | 3 個 | 品杰 | 1+3W | CP1 |
| 陀螺建模 | 鋼鐵輪盤 | 3 個 | 品杰 | 1+3W | CP1 |
| 陀螺建模 | 軸心 | 3 個 | 品杰 | 1+3W | CP1 |
5場景
| 內容 | 數量 | 負責人 | 時間 | 檢查點 |
|---|---|---|---|---|
| 戰鬥盤 | 1 個 | 飯茄 | 4W+1W | CP1 色模 + CP2 |
| 背景 | 1 個 | 飯茄 | 4W+1W | CP1 色模 + CP2 |
甘特圖排程現況:資料參考 7/6~7/10(已完成)→ 戰鬥盤白模 7/13~7/24(進行中)→ 戰鬥盤/背景製作 7/27~8/7。
6特效(綠豆)
| 內容 | 細項 | 數量 | 時間 | 檢查點 |
|---|---|---|---|---|
| 碰撞火花 | — | 1 個 | 4W | CP1 |
| 能量球 | 黃點 | 1 個 | 4W | CP1 |
| 運行軌跡 | — | 3 個 | 4W | CP1 |
| 旋轉特效 | — | 1 個 | 4W | CP1 |
| 停頓時蓄力特效 | — | 3 個 | 4W | CP1 |
| 衝刺時火花 | — | 3 個 | 4W | CP1 |
| 暴衝模式狀態尾流 | — | 3 個 | 4W | CP1 |
| 滿能量的尾流 | — | 3 個 | 4W | CP1 |
| 破防碎裂演出 | — | 1 個 | 4W | CP1 |
| 防護罩狀態(表現尚未破防) | 敵方我方 | 2 個 | 4W | CP1 |
| 破防後冒煙 | — | 1 個 | 4W | CP1 |
| 擊飛特效 | — | 1 個 | 4W | CP1(「擊飛!」浮字動態移字卡動態列) |
| 終結特效 | 配合 timeline | 3 個 | 4W | CP2 |
| 大決特效 | 配合 timeline | 1 個(3 個) | 4W | CP2 |
| 彈出場外特效 | 配合 timeline | 1 個 | 4W | CP2 |
| timeline 轉場 | — | 1 個 | 4W | CP2 |
| 浮字動態 | 「擊飛!」「破防!!」 | 2 個 | — | 字卡動態列(8/31~9/4) |
| 終結字卡動態 | 三層堆疊進退場+招式名字卡動態 | 3+1 個 | — | 字卡動態列(8/31~9/4,上游字卡設計 8/28 交付) |
7音效(鏡)
| 內容 | 細項 | 數量 | 時間 | 檢查點 |
|---|---|---|---|---|
| BGM | — | 1 首 | 4W | CP1 |
| 音效 | 終結音效(配合 timeline) | 3 個 | 3W | CP2 |
| 音效 | 大決音效(配合 timeline) | 3 個 | 3W | CP2 |
| 音效 | 彈出場外音效(配合 timeline) | 1 個 | 3W | CP2 |
| 音效 | 撞擊音效 | 1 個 | 3W | CP2 |
| 音效 | 吃到能量球 | 1 個 | 3W | CP2 |
| 音效 | 停頓時蓄力音效 | 1 個 | 3W | CP2 |
| 音效 | 衝刺撞擊音效 | 1 個 | 3W | CP2 |
| 音效 | 進入暴衝模式的提示音 | 1 個 | 3W | CP2 |
| 音效 | 能量條滿的提示音 | 1 個 | 3W | CP2 |
| 音效 | 破防碎裂演出 | 1 個 | 3W | CP2 |
| 音效 | 擊飛音效 | 1 個 | 3W | CP2 |
BGM 切換比照 _shared/pause.md/_shared/result-screen.md 現行規範:對戰中不換 BGM,勝負才切換。
8動畫/Timeline(仁琪)
| 內容 | 細項 | 數量 | 時間 | 檢查點 |
|---|---|---|---|---|
| timeline | 終結動畫(碎裂) | 3 個 | 4W | CP2 |
| timeline | 彈出場外演出 | 1 個 | 4W | CP2 |
| timeline | 大絕(能量條滿的撞擊) | 3 個 | 4W | CP2 |
9教學影片(飯茄,2026-07-16 新增,DEC-JSG12-026/028)
| 內容 | 細項 | 數量 | 檢查點 |
|---|---|---|---|
| 教學影片 | 射擊(拋竿動作) | 1 支 | 已排甘特(8/17~9/4) |
| 教學影片 | 轉動陀螺(搖手環注能) | 1 支 | 同上 |
| 教學影片 | 技巧(Dash/大招/吃球) | 1 支 | 同上 |
放教學頁公版 Slot_Teach 影片區(16:9)。UI 素材(HUD 四態 icon/對戰 HUD 正式視覺/字卡落地)=他部門 UI 人力支援(DEC-028,人選待定),TM 備功能示意。
UI / UX 流程
1Figma 設計稿
JSG12 目前為低保真 wireframe 階段(版面/流程/文案已定,配色與字型走遊戲美術風格但尚未套正式視覺稿)。下方畫面清單的截圖皆為 Figma 即時匯出,非示意圖。
_Components_JSG12(17812:2)——master 改一次,所有畫面 instance 自動同步T_CharSelect_2P_Portrait 公版母版 clone+detach,數值 bar 已元件化(Bar/Track/Bar/Fill)references/figma-map.md「JSG12-battletop」章節;教學頁節點見同表「Tutorial」章節。畫面清單的截圖皆用 scripts/figma_export.py 透過 Figma REST API 即時匯出,非本機快取的舊圖。
2UX 流程總覽
暫停:對戰中觸發,走 _shared/pause.md v2.1(回藍牙列表/再次挑戰/回主選單)。
3畫面清單(JSG12 自製範圍,含 Figma 即時匯出截圖)
全部為低保真 wireframe(版面/流程/文案定案,正式配色/字型/icon 待美術),透過 scripts/figma_export.py 直接從 Figma REST API 匯出。
_shared/character-select.md 公版,Mirror Match 開放,無時間限制;數值 bar(攻擊倍率/護甲/能量增益/抗擊飛)已元件化,循環反白哪張即時更新
Bg/BattleArena instance 滿版全亮+中央大字倒數數字+「準備拋出你的陀螺!」提示(DEC-JSG12-022)
LaunchUI_B_拋竿揭曉版——原「A 版進度條」隨拋竿制自然淘汰(沒有連續值可跟)
_shared/pause.md v2.1 公版
CutIn_Demo_BastionQuake(17807:14)/CutIn_Demo_VoltTempestRush(17807:23)
FinishCard_Spec(17714:2)正式規格:Black 140px #FF4D2E 描邊14+陰影
T_Tutorial_JF 公版 3 頁精簡版4對戰 HUD 狀態標籤四態
| 狀態 | 原型顯示文字 | 正式版 icon | 型態 | 觸發時機 |
|---|---|---|---|---|
| 大招蓄好 | ★ARMED | 金色★徽章+脈動發光 | 持續(掛到釋放) | 能量搖到滿格或爆衝觸發瞬間 |
| Dash 蓄力 | ⚡蓄力 | 閃電 icon 充能閃現 | 瞬時 0.35s | windupSec 蓄力凍結期間,此時不受傷 |
| Dash 衝刺 | >> DASH! | 雙箭頭拖尾 icon 閃現 | 瞬時 0.25s | 蓄力結束、真正衝刺期間 |
| 爆衝 Overdrive | (原型無) | 火焰 icon 徽章(橙紅) | 持續 5s | 滿格吃球觸發,移動追擊力/搶球引力提升 |
5戰鬥浮字系統(瞬時顯示)
單次觸發、飄字後消失,出現在受擊陀螺上方(世界座標,非固定 UI 錨點)。
| 項目 | 擊飛! | 破防!! |
|---|---|---|
| 字級(@1920×1080) | 72px | 84px(強度升一級) |
| Fill | #FFD91A 黃 | #FF8A1E 橙 |
| Stroke | #241430 10px 外描邊 | #241430 12px 外描邊 |
分工:文字排版=UI(TM+AI),浮字進退場動態=VFX(綠豆)。兩浮字互斥不疊發。
6終結字卡三層堆疊
強度依「擊碎 > 轟飛 > 力盡」遞減:
| 擊碎終結(最強) | 轟飛終結(中) | 力盡倒下(安靜) | |
|---|---|---|---|
| 層1 大字(英文,固定圖片) | TOTAL CRUSH Black 140px #FF4D2E | KNOCKED OUT Black 120px #FFD91A | STILL SPINNING Bold 56px 白 85%(無描邊無陰影) |
| 中文小字幕(TMP,進多國表) | 擊碎終結 | 轟飛終結 | 力盡倒下 |
| 層2 勝方(TMP,真正在地化) | 1P/2P WINS Black 96px 隊色(粉/藍) | ||
7結算頁四鈕文案
| 鈕位 | 文案 | 備註 |
|---|---|---|
| 鈕1 | 回藍牙列表 | JSG 共用區文案 |
| 鈕2 | 再次挑戰 | 同樣兩張卡直接重開 |
| 鈕3 | 重新選卡 | JSG12 專屬——退回開局抽卡畫面(DEC-JSG12-011) |
| 鈕4 | 分享 | 佔位鈕,功能未上線,全遊戲統一 |
games/JSG12-battletop/(mechanics.md/cp0-briefing.md/ui-layout.md/art-sound.md)· 本文件為 v0.1 草案,會持續迭代