Cách tạo Minimap trong EzyTank
Back to ezytankMinimap 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

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

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
MinimapRenderTexturevừa tạo

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)

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

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...)


Kết quả
Ở thời điểm này:
-
MinimapCamerachỉ render các GameObjectMinimapIcon - Output của camera được render vào
MinimapRenderTexture -
Raw Imagetrong 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:

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