← 返回部落格

戰鬥飄字與傷害數字:交接驗收與引擎實作要點

飄字糊、缺字、疊層錯亂或同屏卡頓時的失敗判據;TMP 與位圖字選型、物件池與 Canvas 排序、Unity UGUI 驗收步驟,以及設計稿數字字圖如何對接。

發布於
  • 遊戲UI設計
  • 遊戲開發AI提效
  • ui-to-engine
  • bitmap-font
  • unity
  • godot
  • cocos
  • vberai
  • 2026
戰鬥飄字與傷害數字:交接驗收與引擎實作要點

同屏十幾次受擊時,飄字問題通常不是「再調大字號」:Editor 裡清晰、真機發糊;暴擊換色但 缺「萬」「K」或負號;飄字疊在 HUD 按鈕上 擋點擊;或 Instantiate 太猛 GC 卡頓。飄字屬於高頻、短生命週期 UI,要和靜態 HUD 分開驗收。

下文以 Unity UGUI / TextMeshPro 為主(RectTransform、Canvas、sortingOrder);Godot 用 Label + Theme / 位圖字,Cocos 用 Label + 位圖字型 / 物件池,判據與步驟同構。靜態 HUD 殼層仍按 進引擎 MCP 清單 驗收;發布前自查 第 3 項「藝術字 / 傷害數字糊」在真機 Release 包再測一遍。

失敗判據(任一即未通過): 主流程可讀性受損(糊、裁切、缺 glyph);同屏常規戰鬥幀率明顯低於無飄字 baseline(需記錄機型);飄字擋住必填互動且無 raycastTarget 關閉;暴擊/治療/免疫等狀態 視覺規範與表驅動不一致;大數或縮寫規則與策劃表不一致(如 1.2K 與 1200 混用)。


先選型:TMP 還是位圖字

場景更合適常見坑
僅數字 + 少量符號(0-9 . + - %)位圖字 / 自訂 mesh 數字字集漏字元;圖集 filter 錯導致糊
需多語言整句(「暴擊」「免疫」)TMP + 字串表與數字混排時寬度抖動;Auto Size 壓過頭
強風格描邊、漸層、逐幀動畫字位圖字或序列幀每套狀態一張圖,缺狀態就臨時用錯色
快速原型TMP 預設 SDF未設 Reference Resolution 時,真機 scale 發糊

真機發糊時先查:Canvas Scaler 基準解析度、TMP Padding / Atlas、位圖 Filter Mode(多為 Point);仍糊再換字集或提高 SDF 取樣,見 位圖字型生成與字集規劃 與 發布前第 3 項。

Editor 清晰與真機發糊對比示意

位圖數字字集與 TMP/SDF 對比示意


Unity:推薦實作與驗收(6 步)

1. 單獨 Canvas 或明確排序

  • 飄字用 獨立 Canvas(Screen Space - Camera 與戰鬥相機一致)或 HUD 子節點下專用層。
  • 設定 sortingOrder 高於場景、低於模態彈窗;關閉 Graphic 的 raycastTarget(飄字不應吃點擊)。
  • 世界空間飄字:統一 同一 World Canvas,勿每個數字一個 Canvas。

飄字 Canvas 排序:高於 HUD、低於彈窗,且不擋點擊

2. 物件池

  • 預熱池大小 ≥ 同屏峰值(按技能配置壓測,常見 16~32 起)。
  • 回收時重置:位置、alpha、scale、動畫狀態、文字內容。
  • 禁止每幀 new/Destroy 飄字節點。

3. 資料與表現分離

  • 戰鬥邏輯只拋 DamagePopupEvent(數值、類型、世界座標/掛點、是否暴擊)。
  • 表現層負責:配色、前綴、縮寫(K/M/B/萬)、動畫曲線。
  • 策劃表驅動 類型 → 樣式 Prefab(Normal / Crit / Heal / Miss / Block)。

4. 動畫與可讀性

  • 典型:上飄 + 淡出 + 輕微 scale;時長 0.4~0.8s,同位置連擊可 橫向錯開或佇列。
  • 同幀多段傷害:合併顯示或 幀間錯開 1~2 幀,避免完全重疊。
  • 字號隨相機距離變化時,用 統一 World Scale 規則,勿與 UI Canvas 混算兩套 scale。

同屏多種飄字狀態與橫向錯開示意

5. 字集與格式

  • 位圖字提交前核對字元表:0-9 . , + - % x K M B 萬 億 與專案 縮寫規則 一致。
  • TMP 用 <sprite> 或分欄位:數字與「暴擊」文案分 Label,避免單一字串換字型。
  • 與 多語言爆框 交叉:整句本地化文字不要 raster 成一張飄字圖。

6. 真機 smoke

  • Dev / Release 各測:密集小怪戰 30s、單次多段 BOSS 技能、低記憶體機型。
  • 對比 無飄字 / 有飄字 幀時間;截圖存檔暴擊/治療/免疫各一。
  • 通過標準寫入 Prefab + 池配置,不是 Scene 臨時物件。

設計稿交接(數字與狀態)

交付用途
各狀態 數字字圖或 TMP 樣式規範(Normal/Crit/Heal/Miss)表驅動換 Prefab 或 Material
描邊/投影 在目標解析度下的 1:1 範例真機對比是否糊
連擊/暴擊 配色與圖示 是否疊加在數字上避免程式臨時 Color.red 代替
字集範圍說明(僅數字 vs 含中文單位)生成位圖字或字串表

交稿自查 中藝術字項:飄字若走 raster,須在規格寫明 是否隨語言替換;預設建議 數字位圖 + 文案 TMP。


回修路徑表

現象最可能原因建議動作負責
真機糊、Editor 清晰Scaler / SDF scale / 位圖 filter對齊基準解析度;Point filter;加 SDF padding程式
缺字、方塊字集未含符號或單位補 charset 重導;或改 TMP程式 + 設計
擋按鈕排序過高或未關 raycast調 sortingOrder;raycastTarget=false程式
同屏卡頓未池化或粒子+文字過量上池;合併同幀跳字程式
暴擊樣式不對硬編碼色,未走表類型→樣式 Prefab;設計補狀態稿程式 + 策劃
與 HUD 靜態字風格分裂飄字與 HUD 各做一套統一字型源或 Theme設計 + 程式

常見問題

飄字必須 World Space 嗎?
不是。2D/固定視角常用 Screen Space - Camera 跟戰鬥相機;3D 自由視角常用 World Canvas。團隊選一種並寫進規範。

可以用 UI Particle 嗎?
可以作裝飾,數字本身仍建議 Label/TMP/位圖 mesh,避免粒子文字難本地化、難池化。

和傷害邏輯寫在一個腳本行嗎?
表現應可關(ShowDamageNumbers),邏輯層只發事件,方便測試與無障礙開關。

大數怎麼顯示?
策劃定 唯一規則(如 4 位起縮寫、保留幾位小數),程式只實作 formatter,勿在多個 UI 腳本重複演算法。

你可能還會喜歡這些文章