03. Thiết Lập Va Chạm (Collisions)
Trong hầu hết các tựa game 3D, nhân vật, quái vật hoặc đạn đạo cần phải va chạm với sàn nhà và các bức tường. Do đó, các ô khối trong MeshLibrary cần được tích hợp sẵn các thể vật lý va chạm (Physics Bodies & Collision Shapes).
🛠️ Hai cách thiết lập va chạm cho Mesh
Cách 1: Thiết lập thủ công
Bạn có thể tự tạo thủ công bằng cách:
1. Thêm một node StaticBody3D làm con trực tiếp của node MeshInstance3D.
2. Thêm một node CollisionShape3D làm con của StaticBody3D.
3. Trong bảng Inspector của CollisionShape3D, chọn hình dạng tương ứng (như BoxShape3D cho sàn hoặc tường vuông).
Cách 2: Tự động sinh từ menu Mesh (Khuyên dùng)
Godot Engine cung cấp công cụ tự động phân tích hình học của Mesh để sinh nhanh thể va chạm mà không tốn công căn chỉnh:
- Chọn node
MeshInstance3Dtrên cây Scene. - Trên thanh công cụ phía trên khung nhìn 3D Viewport, nhấp vào menu Mesh:

⚖️ Lựa chọn giữa Convex và Trimesh
Trong menu Mesh, bạn sẽ thấy hai tùy chọn quan trọng:
| Tùy chọn | Đặc điểm & Khuyên dùng | Hiệu năng |
|---|---|---|
| Create Simplified Convex Collision Sibling (Khối lồi đơn giản) | Tạo ra một hình dạng bao lồi khép kín quanh vật thể. Phù hợp nhất cho các vật thể đặc, dạng khối hộp, tường phẳng, cột trụ. | ⚡ Rất nhanh & tối ưu |
| Create Trimesh Static Body (Khối đa giác tam giác) | Tạo ra hình dạng va chạm khớp chính xác đến từng mặt tam giác của mô hình. Cần thiết khi vật thể có lỗ rỗng ở giữa (như khung cửa vòm, cầu thang xoắn rỗng ruột). | ⚠️ Tốn tài nguyên hơn |
Luôn ưu tiên dùng Convex cho các khối địa hình cơ bản để game duy trì chỉ số FPS cao nhất. Chỉ dùng Trimesh khi hình học của ô bắt buộc phải có lỗ rỗng để người chơi đi xuyên qua.
⚠️ Lưu ý quan trọng về vị trí node va chạm
Sau khi Godot sinh tự động node StaticBody3D, nó thường được đặt nằm ngang hàng (Sibling) với MeshInstance3D.
Bạn bắt buộc phải kéo thả node StaticBody3D vừa sinh ra vào bên trong để biến nó thành node con trực tiếp của MeshInstance3D tương ứng!
Cấu trúc hoàn chỉnh sẽ trông giống như hình dưới đây:
