← Về blog

Nine-Slice UI Game và Bảng Co Giãn: Đánh Dấu Figma / PSD và QA Cắt Lát Trong Engine

Khi bảng và trường cần 9-slice, cách đánh dấu viền và tỷ lệ xuất trong thiết kế, cách pass/fail Unity UGUI Sliced, Godot StyleBox, Cocos caps—kèm hướng khắc phục.

Đăng ngày
  • game-ui-design
  • game-dev-ai
  • ui-slicing
  • figma-to-unity
  • psd-to-unity
  • nine-slice
  • vberai
  • ai-studio
  • unity
  • godot
  • cocos
  • 2026
Nine-Slice UI Game và Bảng Co Giãn: Đánh Dấu Figma / PSD và QA Cắt Lát Trong Engine

Khi một bảng bị kéo rộng hơn, góc mờ, họa tiết trung tâm lặp lại, hoặc góc bị oval thường có nghĩa là nine-slice (9-slice / cap insets) chưa được chỉ định khi bàn giao, hoặc engine đang dùng scale Simple trên toàn bộ sprite. Chỉnh Image Type và border trong Unity Editor có thể cứu được một màn hình, nhưng lần thiết kế tiếp theo sẽ ghi đè—nếu border không khớp tỷ lệ xuất, vòng lặp làm lại sẽ tiếp diễn.

Các ví dụ dưới đây tập trung vào Unity UGUI Image (Sliced / Tiled). Godot StyleBoxTexture và nine-slice sprite của Cocos ánh xạ tới cùng các ý tưởng, bao gồm content padding. Anchor và Safe Area: checklist engine + MCP mục 6. Padding vùng co giãn với locale: tràn locale kiểm tra thiết kế 7.

Checklist bàn giao thiết kế mục 6 yêu cầu vùng nine-slice / co giãn rõ ràng. Bài này bao gồm khi nào cần cắt lát, đánh dấu Figma/PSD, nghiệm thu ba engine, và đường đi canvas toàn màn hình, kèm bảng khắc phục.

Tiêu chí fail (bất kỳ một cái = không đạt): art góc biến dạng khi co giãn; lặp lại hoặc đường nối ngoài ý muốn trong vùng co giãn; bán kính góc thay đổi theo kích thước bảng; nền co giãn bị scale chung với icon/avatar cố định; tỷ lệ xuất không khớp pixel border trong engine (khe 1px hoặc cạnh mềm).


Khi nào bắt buộc nine-slice vs cấm co giãn cứng

Loại assetNênKhông nên
Nền dialog / bảng cài đặtNine-slice + content paddingMột sprite Simple tràn viền
Container input / thanhNine-slice hoặc cap trái/phải + lặp giữaÉp chiều cao không theo quy tắc art
Nút chính (kích thước cố định)Sprite cố định hoặc nine-slice + chiều rộng tối thiểuNút bo góc rộng vô hạn như một ảnh co giãn
Icon, avatar, khung kỹ năngKích thước cố định, không nine-sliceGộp với nền bảng thành một ảnh co giãn
Nền toàn màn hình (không khung)Ảnh đầy đủ hoặc chiến lược tile trong specDùng lại border bảng trên nền tràn viền

Quy tắc: Nếu chiều rộng hoặc chiều cao thay đổi theo độ phân giải, nội dung chữ, hoặc nội dung danh sách và góc phải giữ hình dạng → nine-slice hoặc tương đương trong engine. Control kích thước cố định → sprite cố định + ràng buộc layout.


Đánh dấu bàn giao Figma / PSD (danh sách tick)

#Kiểm traTiêu chuẩn đạt
1Layer co giãn tách khỏi decor / icon / textNền bảng reskin + slice; icon không bị scale theo nền
2Border / cap inset tính bằng px (bốn cạnh)Khớp @1x hoặc tỷ lệ xuất của team trong ghi chú bàn giao
3Tỷ lệ xuất cố định (@1x/@2x hoặc baseline 1080)Kỹ thuật không phải đoán phép tính border
4Bán kính góc nằm ngoài vùng co giãn hoặc spec cho phép góc không co giãnKhông chấp nhận kiểu “góc biến thành viên nang”
5Vùng co giãn thân thiện tile hoặc đặcLặp giữa không có lệch rõ ràng
6Tên ngữ nghĩaVí dụ Panel_Shop_9s, Input_Field_9s
7Đa trạng thái (normal / disabled) cùng borderInset khớp; chỉ đổi màu/skin
8Ghi chú slice PSD hoặc xuất Figma padding trong suốtKhông tính shadow vào border trừ khi spec nói vậy
9Bàn giao kèm mục 5 của handoff trạng thái nútKhông vá trạng thái thiếu bằng art 9s sai
10Reskin sự kiện chỉ đổi art, border không đổiXem spec reskin

Figma: đặt cap inset trong tài liệu component khi dùng frame co giãn hoặc plugin slice. PSD: căn slice với PSD sang Unity trong 5 phút.


Ba engine: component và nghiệm thu

MụcUnity UGUIGodot 4 ControlCocos UI
ComponentImage → Sliced / TiledStyleBoxTexture (patch margin)Sprite nine-slice / Sliced
Nguồn borderSprite Editor Border (L/T/R/B px)content_margin / patchCap insets (LTRB)
Vùng nội dungRectTransform + padding conMarginContainer + ThemeWidget / padding layout
Fail điển hìnhDùng Simple sai; border sai tỷ lệPatch không khớp kích thước textureXoay atlas phá inset
ĐạtỞ chiều rộng 150% / 200%: góc sắc, giữa sạchTương tự; preview Theme khớp PlayTương tự; kiểm tra thiết bị với danh sách dài

Nghiệm thu trong Unity Editor (ánh xạ sang engine khác):

  1. Đặt Prefab Image thành Sliced với border khớp thiết kế.
  2. Kéo RectTransform của bảng tới chiều rộng thiết kế tối thiểu và tối đa.
  3. So sánh góc, cạnh, và trung tâm với ảnh chụp Figma/PSD.
  4. Nếu Play mode ổn → một lượt kiểm tra thiết bị theo checklist trước khi ship.

Khái niệm toàn màn hình: tách canvas và xuất lại

Với chỉ art toàn màn hình dạng PNG hoặc AI, không thể suy ra border. Đường đi: VberAI Studio (AI Studio, ≠ Google AI Studio) tách tại chỗ → đánh dấu bảng co giãn → xuất Prefab (tất định, không phải YAML do LLM).

BướcHành độngNghiệm thu
1Toàn màn hình trên canvas; tách Panel_* và icon cố địnhPhân cấp có tên
2Xác nhận ý định 9-slice của bảng trên canvas hoặc trước khi xuấtNgười chịu trách nhiệm cho inset được ghi lại
3Xuất Prefab Unity / Godot / CocosQA Sliced theo bảng trên
4Sau reskin / locale, xuất lại toàn bộ câyNếu spec border không đổi, inset không đổi

Figma/PSD phân lớp: ưu tiên Figma → Unity hoặc PSD sang UGUI, sau đó chỉnh border nhỏ trong engine—tránh xuất lại 20 PNG rời mỗi sự kiện.


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

Triệu chứngNguyên nhân khả dĩHành độngNgười phụ trách
Góc mờScale Simple trên toàn ảnhSliced + border đúng; thiết kế thêm dấu insetKỹ thuật + Thiết kế
Đường nối / khối lặp giữainset lệch 1–2px; sai tỷ lệKhớp px thiết kế; nhập lại spriteKỹ thuật
Góc co giãn thành ovalArt không nên nine-sliceKích thước cố định hoặc art góc mớiThiết kế
Border đổi sau reskinKích thước art mới hoặc paddingKhóa kích thước canvas trong spec reskin; QA lại sau reskinThiết kế
Nền hàng danh sách biến dạngNền hàng bị co giãn như cả bảng9s riêng cho hàng hoặc chiều cao cố địnhThiết kế
Chỉ fail ở một số độ phân giảiCanvas Scaler scale không nguyênChecklist engine Anchor/ScalerKỹ thuật

Quy tắc: Nếu border ≠ thiết kế → sửa dấu hoặc nguồn sprite trước, rồi mới tới Prefab. Chỉ sửa trong Inspector mà không cập nhật bàn giao → mất khi xuất lần sau.


So với bàn giao “chỉ gói PNG”

Cách tiếp cậnPhù hợpKhông phù hợp
Xuất thủ công + kỹ thuật tự điền borderÍt bảng, demoReskin thường xuyên, nhiều màn hình
Figma/PSD + xuất có cấu trúc bằng VberAI StudioĐa màn hình, đa engine, sự kiệnThay thế dấu inset và QA
Sliced tạm trong engineHotfix một màn hìnhDài hạn mà không có nguồn thiết kế

Khuyến nghị: dấu inset trong thiết kế → xuất Prefab có cấu trúc → Unity Editor Sliced ở hai chiều rộng → MCP cho logic. Raycast và binding: checklist engine + MCP.


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

Bảng bo góc có dùng được nine-slice không?
Có, nhưng inset phải nằm trên cạnh co giãn thẳng; góc nằm trong ô góc không co giãn. Nếu bán kính góc tăng theo kích thước bảng → fail; sửa art hoặc giới hạn kích thước tối đa.

Shadow có tính vào border không?
Spec sản phẩm quyết định. Nếu shadow không co giãn, tách layer hoặc đánh dấu inset trên hình chữ nhật đặc không có glow ngoài.

Tiled vs Sliced?
Sliced cho bảng có khung; Tiled (hoặc art giữa thân thiện tile) cho họa tiết giữa lặp lại. Ghi rõ trong spec—đừng để kỹ thuật phải đoán.

Có cần slice riêng cho Godot / Cocos không?
Một ngữ nghĩa inset; chuyển target xuất qua xuất canvas đa engine và xác minh patch/cap theo bảng.

VberAI Studio có tự động điền border không?
Phụ thuộc vào xuất và asset; nghiệm thu luôn là Sliced/StyleBox trong engine. Không có inset trong thiết kế → kỹ thuật đặt border trong Editor và ghi lại trong spec.

VberAI Studio có giống Google AI Studio không?
Không. Xem so sánh.

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