← Về blog

Số Sát Thương Nổi: Nghiệm Thu Bàn Giao và Triển Khai Trong Engine

Tiêu chí thất bại khi popup mờ, thiếu ký tự, sắp xếp sai hay giật lag; chọn TMP hay chữ số bitmap, pool và thứ tự Canvas, các bước nghiệm thu Unity UGUI, và cách art chữ số từ design được tích hợp.

Đăng ngày
  • game-ui-design
  • game-dev-ai
  • ui-to-engine
  • bitmap-font
  • unity
  • godot
  • cocos
  • vberai
  • 2026
Số Sát Thương Nổi: Nghiệm Thu Bàn Giao và Triển Khai Trong Engine

Khi mười đòn đánh trúng đích trong một giây, các vấn đề về văn bản nổi hiếm khi được giải quyết bằng “phông chữ to hơn”: nét trong Editor, mờ trên thiết bị; màu chí mạng hoạt động nhưng thiếu chữ “K” hoặc dấu trừ; các con số nằm trên nút HUD và cướp cú chạm; hoặc Instantiate gây đột biến GC. Popup là UI tần suất cao, tồn tại ngắn—hãy nghiệm thu chúng tách biệt với HUD tĩnh.

Phần dưới tập trung vào Unity UGUI / TextMeshPro (RectTransform, Canvas, sortingOrder). Godot: Label + Theme / bitmap; Cocos: Label + bitmap font + pool—cùng tiêu chí và thứ tự bước. Vỏ HUD tĩnh: danh sách kiểm tra engine + MCP. Mục 3 trước khi phát hành (“art mờ / số sát thương”)—kiểm tra lại trên thiết bị Release.

Tiêu chí thất bại (bất kỳ một cái nào = không đạt): khả năng đọc bị ảnh hưởng (mờ, cắt, thiếu ký tự); thời gian khung hình chiến đấu rõ ràng tệ hơn so với đường cơ sở không có popup trên thiết bị mục tiêu; popup chặn các cú chạm cần thiết trong khi raycast vẫn bật; hình ảnh chí mạng/hồi máu/trượt không khớp với đặc tả dựa trên dữ liệu; định dạng số không nhất quán với bảng thiết kế (ví dụ 1.2K lẫn với 1200).


Chọn trước: TMP hay chữ số bitmap

Tình huốngPhù hợp hơnCạm bẫy thường gặp
Chữ số + vài ký hiệu (0-9 . + - %)Bitmap / lưới chữ số tùy chỉnhThiếu ký tự trong bộ ký tự; filter sai → mờ
Chuỗi bản địa hóa đầy đủ (“Critical”, “Immune”)TMP + bảng chuỗiChiều rộng rung lắc khi trộn với chữ số
Viền đậm, gradient, kiểu độngBitmap hoặc chuỗi khung hìnhThiếu trạng thái → màu dự phòng sai
Nguyên mẫuTMP SDF mặc địnhKhông có độ phân giải tham chiếu → mờ trên thiết bị

Nếu tình trạng mờ trên thiết bị vẫn còn: Canvas Scaler tham chiếu, TMP padding/atlas, bitmap Filter Mode (thường là Point)—sau đó mới đến bộ ký tự hoặc chất lượng SDF. Xem lập kế hoạch bộ ký tự bitmap font và mục 3 trước khi phát hành.

Sharp in Editor vs soft on device

Bitmap digit atlas vs TMP/SDF text


Unity: xây dựng và nghiệm thu (6 bước)

1. Canvas chuyên dụng hoặc sắp xếp rõ ràng

  • Dùng một Canvas chuyên dụng (Screen Space - Camera căn chỉnh với camera chiến đấu) hoặc một lớp con của HUD.
  • Đặt sortingOrder trên world UI, dưới popup dạng modal; raycastTarget = false trên đồ họa popup.
  • Popup trong thế giới: một World Canvas dùng chung—không phải một Canvas cho mỗi con số.

Popup Canvas sort above HUD, below modals, raycasts off

2. Pool đối tượng

  • Làm nóng trước ≥ số lượng tối đa trên màn hình (căng thẳng từ kỹ năng; thường tối thiểu 16–32).
  • Khi tái chế: đặt lại vị trí, alpha, tỷ lệ, trạng thái hoạt ảnh, văn bản.
  • Không Instantiate/Destroy cho mỗi đòn đánh.

3. Tách dữ liệu khỏi phần trình bày

  • Chiến đấu phát ra DamagePopupEvent (giá trị, loại, vị trí thế giới/điểm gắn, cờ chí mạng).
  • Phần trình bày chọn màu, tiền tố, viết tắt (K/M/B), đường cong.
  • Bảng thiết kế ánh xạ loại → Prefab kiểu (Normal / Crit / Heal / Miss / Block).

4. Chuyển động và khả năng đọc

  • Điển hình: nổi lên + mờ dần + tỷ lệ nhẹ; 0.4–0.8s; so le hoặc xếp hàng trên cùng một điểm neo.
  • Nhiều đòn trong cùng khung hình: gộp hoặc lệch 1–2 khung hình để tránh chồng lấn.
  • Nếu kích thước theo khoảng cách camera, dùng một quy tắc tỷ lệ thế giới—đừng trộn với tỷ lệ Canvas UI hai lần.

Multiple popup states with horizontal stagger

5. Bộ ký tự và định dạng

  • Bitmap: xác minh 0-9 . , + - % x K M B và quy tắc viết tắt của dự án.
  • TMP: tách trường hoặc sprite—đừng dựa vào một chuỗi để chuyển phông chữ.
  • Với tràn văn bản đa ngôn ngữ: đừng raster hóa toàn bộ câu đã bản địa hóa thành art popup.

6. Kiểm tra khói trên thiết bị

  • Dev và Release: 30 giây quái vật tràn lan, kỹ năng boss nhiều nhịp, thiết bị RAM thấp.
  • So sánh thời gian khung hình có so với không có popup; chụp ảnh chí mạng/hồi máu/trượt mỗi loại một lần.
  • Tiêu chí đạt nằm trong Prefab + cấu hình pool, không chỉ trong Scene kiểm thử.

Bàn giao thiết kế (chữ số và trạng thái)

Bàn giaoSử dụng
Art chữ số hoặc kiểu TMP theo từng trạng thái (Normal/Crit/Heal/Miss)Prefab/Material dựa trên bảng
Viền/đổ bóng ở độ phân giải mục tiêuKiểm tra độ nét trên thiết bị
Màu + biểu tượng chí mạng/combo trên chữ sốTránh tô màu cứng trong code
Phạm vi bộ ký tự (chỉ chữ số so với đơn vị bản địa hóa)Bitmap hoặc bảng chuỗi

Danh sách kiểm tra bàn giao thiết kế: nếu popup là raster, ghi rõ theo từng ngôn ngữ hay không; mặc định chữ số bitmap + nhãn TMP.


Định tuyến khắc phục

Triệu chứngNguyên nhân khả dĩHành độngBên phụ trách
Mờ trên thiết bị, nét trong EditorScaler / SDF / filter bitmapCăn chỉnh độ phân giải tham chiếu; filter Point; padding SDFKỹ thuật
Thiếu ký tựBộ ký tự / ký hiệuMở rộng bộ ký tự; hoặc TMPKỹ thuật + Thiết kế
Chặn nútSắp xếp / raycastHạ thứ tự hoặc tắt raycastKỹ thuật
Giật lagKhông có pool / quá nhiều FX + văn bảnPool; gộp popup cùng khung hìnhKỹ thuật
Hình chí mạng saiMàu cứngLoại→Prefab; trạng thái thiết kếKỹ thuật + Thiết kế
Tách khỏi kiểu HUDHai pipeline phông chữHợp nhất nguồn phông chữ hoặc ThemeThiết kế + Kỹ thuật

Câu hỏi thường gặp

Popup có nhất thiết phải là World Space?
Không. 2D cố định thường dùng Screen Space - Camera; camera 3D tự do thường dùng World Canvas. Chọn một và ghi tài liệu.

Dùng hạt UI để tạo điểm nhấn?
Được cho FX; chữ số vẫn là Label/TMP/mesh để bản địa hóa và pool.

Một script với logic sát thương?
Phát sự kiện từ logic; công tắc trình bày (ShowDamageNumbers) cho kiểm thử và khả năng tiếp cận.

Số lớn?
Một quy tắc định dạng từ thiết kế; một triển khai duy nhất—không sao chép dán giữa các script UI.

Các bài hướng dẫn bạn có thể thích