Minimap là một trong những tính năng quan trọng của hầu hết các game có bản đồ rộng, giúp người chơi nhanh chóng định vị bản thân, đồng đội và các đối tượng quan trọng trên bản đồ.
Trong hệ sinh thái EzyPlatform, các bạn có thể tham khảo cách triển khai minimap cho Unity project thuần GameObject từ mã nguồn của EzySmashers.
Tuy nhiên, dự án EzyTank sử dụng kết hợp Unity ECS (Entities) và Unity GameObject, nên cách tiếp cận sẽ có một số khác biệt. Bài viết này sẽ hướng dẫn từng bước cách xây dựng minimap phù hợp với kiến trúc đó.
Tổng quan giải pháp
Ý tưởng chính của minimap trong EzyTank gồm 3 phần:
  • Minimap Camera: Một camera riêng, chỉ render các đối tượng cần hiển thị trên minimap
  • Render Texture: Dùng để render output của Minimap Camera
  • UI Minimap: Hiển thị Render Texture này lên Canvas thông qua Raw Image
Việc tách minimap sang một camera và layer riêng giúp:
  • Tránh ảnh hưởng tới camera chính
  • Dễ kiểm soát những đối tượng nào xuất hiện trên minimap
  • Tối ưu hiệu năng và mở rộng trong tương lai

Tạo Layer cho Minimap

Đầu tiên, chúng ta cần một layer riêng để đánh dấu các đối tượng sẽ xuất hiện trên minimap.
  • Mở Inspector
  • Chọn Add Layer
  • Thêm một layer mới với tên: Minimap
Screenshot from 2025-12-14 12-56-30.png
Layer này sẽ được dùng để:
  • Minimap Camera chỉ render các đối tượng thuộc layer Minimap
  • Camera chính không render layer này

Tạo Render Texture cho Minimap

Tiếp theo, tạo một Render Texture để chứa hình ảnh được render từ Minimap Camera.
  • Vào thư mục: Assets/Resources/Textures
  • Chuột phải → Create → Render Texture
  • Đặt tên: MinimapRenderTexture
  • Giữ nguyên các giá trị mặc định
Screenshot from 2026-01-20 22-25-58.png
Render Texture này sẽ đóng vai trò là cầu nối giữa camera và UI.

Hiển thị Minimap lên Canvas

Bây giờ chúng ta cần hiển thị minimap trên UI.
  • Trong Canvas, tạo một GameObject mới, đặt tên: MinimapRenderTexture
  • Thêm component Raw Image
  • Ở field Texture, chọn MinimapRenderTexture vừa tạo
Screenshot from 2026-01-20 22-27-00.png
Tại thời điểm này, Raw Image chưa hiển thị gì vì chúng ta chưa gắn camera.

Tạo Minimap Camera

Tiếp theo, tạo camera chuyên dùng cho minimap.
  • Tạo một Camera mới
  • Đặt tên: MinimapCamera
  • Thiết lập các thông số quan trọng:
    • Output → Output Texture: chọn MinimapRenderTexture
    • Rendering → Culling Mask: chỉ chọn layer Minimap
  • Căn chỉnh vị trí và góc nhìn camera sao cho bao quát khu vực bản đồ mong muốn (thường là camera nhìn từ trên xuống – Top-down)
Screenshot from 2026-01-20 22-28-07.png
Từ thời điểm này, mọi đối tượng thuộc layer Minimap sẽ được camera này render ra minimap.

Cấu hình Camera chính

Để tránh việc các icon minimap xuất hiện trong gameplay chính, cần loại bỏ layer Minimap khỏi camera chính.
  • Chọn Main Camera
  • Ở Rendering → Culling Mask
  • Bỏ chọn layer Minimap
Screenshot from 2026-01-20 22-28-59.png
Như vậy:
  • Camera chính: không thấy minimap icon
  • Minimap Camera: chỉ thấy minimap icon

Tạo Minimap Icon cho Tank

Cuối cùng, chúng ta cần chỉ định những đối tượng nào sẽ xuất hiện trên minimap.
  • Mở prefab:
    • TankRenderers
    • TankSharkRenderers
  • Tạo một GameObject con, đặt tên: MinimapIcon
  • Gán layer: Minimap
  • Có thể gắn:
    • Sprite đơn giản
    • Mesh nhỏ
    • Hoặc hình học cơ bản (Sphere, Cube...)

Screenshot from 2026-01-20 22-32-01.png
Screenshot from 2026-01-20 22-32-47.png
Kết quả
Ở thời điểm này:
  • MinimapCamera chỉ render các GameObject MinimapIcon
  • Output của camera được render vào MinimapRenderTexture
  • Raw Image trong Canvas hiển thị minimap theo thời gian thực
Để UI trông đẹp và rõ ràng hơn, bạn có thể:
  • Thêm viền cho minimap
  • Bo góc (mask + image)
  • Thêm background mờ
Ví dụ, tạo một GameObject MinimapBorder trong Canvas:
Screenshot from 2026-01-20 22-34-52.png

Kết luận

Cách tiếp cận này giúp minimap trong EzyTank:
  • Hoạt động độc lập với gameplay chính
  • Dễ mở rộng (thêm icon, zoom, rotate theo hướng tank…)
  • Phù hợp với kiến trúc hybrid ECS + GameObject