05. Lưới Điều Hướng AI (NavigationMeshes)

Nếu tựa game của bạn có kẻ địch (AI), NPC hoặc nhân vật điều khiển bằng chuột cần tìm đường di chuyển tự động (Pathfinding) qua các địa hình được vẽ bằng GridMap, bạn có thể tích hợp trực tiếp dữ liệu lưới điều hướng (NavigationMesh) vào từng ô gạch trong MeshLibrary.

Khi các ô này được đặt cạnh nhau trong màn chơi, Godot sẽ tự động ghép nối các phần lưới dẫn đường này thành một mạng lưới tìm đường liên tục.


🧭 Các bước thiết lập NavigationRegion3D cho từng Mesh

Để gắn dữ liệu điều hướng cho một ô trong scene nguồn:

  1. Thêm một node NavigationRegion3D làm con trực tiếp của node MeshInstance3D chính.
  2. Trong bảng Inspector của NavigationRegion3D, tạo một tài nguyên mới tại thuộc tính Navigation Mesh.
  3. Thêm các node hình học bổ sung (nếu cần) bên dưới để làm dữ liệu nguồn tính toán đường đi.
  4. Nhấn nút Bake NavigationMesh (Bake - tính toán sẵn lưới điều hướng) trên thanh công cụ phía trên khung nhìn 3D.

Thiết lập NavigationRegion3D cho từng ô trong MeshLibrary

📌 Lưu ý

Các node phụ nằm dưới NavigationRegion3D chỉ được dùng làm nguồn hình học phục vụ quá trình Bake lưới điều hướng. Khi xuất sang MeshLibrary, các node phụ này sẽ tự động bị bỏ qua và không bị xuất thành mô hình hiển thị ngoài màn hình.


⚙️ Các thông số quan trọng cần lưu ý

1. Bán kính nhân vật & Kích thước vùng tối thiểu

Khi kích thước mỗi ô lưới tương đối nhỏ (ví dụ ô sàn chỉ 1m x 1m hoặc 2m x 2m), thông số mặc định của Godot có thể khiến nhân vật không thể đi qua các cửa hẹp. Bạn nên mở tài nguyên NavigationMesh và điều chỉnh:

  • Agent > Radius: Giảm bán kính va chạm của nhân vật để AI có thể lọt qua các lối đi hẹp giữa các khối tường.
  • Region > Min Region Size: Giảm kích thước vùng tối thiểu để các ô nhỏ lẻ không bị loại bỏ khỏi bản đồ dẫn đường.

2. Đồng bộ kích thước ô Bake (Baked Cell Size Synchronization)

⚠️ Cảnh báo

Kích thước ô được Bake (Cell Size) trong tài nguyên NavigationMesh bắt buộc phải trùng khớp tuyệt đối với kích thước ô của bản đồ NavigationServer map (navigation_3d/cell_size trong Project Settings).
Nếu hai giá trị này lệch nhau, Godot sẽ không thể ghép nối các lưới điều hướng giữa hai ô gạch liền kề, khiến AI bị kẹt tại ranh giới của từng ô!