Collider
Collider là hình dạng vô hình bao quanh GameObject — xác định ranh giới va chạm vật lý mà không cần hình học Mesh chính xác cho từng điểm tiếp xúc trong scene.
Hãy tưởng tượng...
Collider giống như bong bóng bảo vệ quanh vật thể. Một nhân vật phức tạp với hàng nghìn đa giác không thể để game tính va chạm từng tam giác — quá chậm. Thay vào đó, Unity bao nhân vật bằng một hình đơn giản (hộp, cầu, viên nang) để tính toán. Đó chính là Collider. Bóng bảo vệ không nhìn thấy được, nhưng mọi va chạm đều "cảm nhận" qua nó.
Khái niệm chi tiết
Collider là Component định nghĩa hình dạng vật lý của
GameObject trong Unity Physics. Nó tách biệt hoàn toàn khỏi Mesh Renderer — một object có thể
có Collider mà không cần hình ảnh (vùng ẩn), hoặc có hình ảnh mà không cần Collider (vật trang
trí). Unity hỗ trợ 4 loại Collider 3D chính: BoxCollider,
SphereCollider, CapsuleCollider, và MeshCollider.
Về hiệu năng, thứ tự ưu tiên từ nhanh đến chậm là:
Sphere → Box → Capsule → Mesh. MeshCollider sao chép
đúng hình dạng Mesh nhưng rất tốn kém — chỉ dùng khi cần độ chính xác tuyệt đối cho địa hình
hoặc vật thể tĩnh. Đối với nhân vật di chuyển, CapsuleCollider là lựa chọn tối ưu
vì khớp với thân người và xử lý cầu thang mượt mà.
Collider có thể được đặt ở chế độ Trigger (bật
isTrigger = true) để phát hiện va chạm mà không tạo phản ứng vật lý. Khi Collider
không phải trigger, nó tạo phản lực vật lý thực sự. Nhiều Collider trên cùng một object hoặc
object con được gọi là Compound Collider — kỹ thuật phổ
biến để xấp xỉ hình dạng phức tạp mà không cần MeshCollider.
Từ Unity 6 trở đi, Physics Shapes 2D và Physics Material đều gắn trực tiếp vào Collider để kiểm soát ma sát và độ nảy tại từng bề mặt.
Các loại Collider
BoxCollider
Hộp chữ nhật. Nhanh, dùng cho tường, sàn, hộp.
SphereCollider
Hình cầu. Nhanh nhất, dùng cho đạn, trái cây, tảng đá tròn.
CapsuleCollider
Viên nang. Tối ưu cho nhân vật đứng thẳng.
MeshCollider
Khớp Mesh chính xác. Chậm nhất, chỉ dùng cho vật tĩnh.
Compound Collider
Kết hợp nhiều Collider đơn giản (Box + Sphere...) trên cùng object/object con để xấp xỉ hình dạng phức tạp — nhanh hơn MeshCollider nhưng vẫn chính xác hơn dùng 1 hình.
Hướng dẫn thực hành
Chọn loại Collider phù hợp
Add Component → Physics → chọn Box/Sphere/Capsule/MeshCollider dựa vào hình dạng object.
Điều chỉnh kích thước trong Inspector
Nhấn "Edit Collider" (icon bút chì) để chỉnh trực quan, hoặc thay đổi Center, Size, Radius trong Inspector.
Kiểm tra màu Gizmo
Collider hiển thị màu xanh lá khi không va chạm, màu đỏ khi đang chạm. Bật Gizmo trong Scene View để thấy.
Thêm Physics Material (tuỳ chọn)
Create → Physics Material → gán vào slot Material của Collider để điều chỉnh ma sát và độ nảy.
Đặt Layer cho Collision Matrix
Project Settings → Physics → Layer Collision Matrix: kiểm soát layer nào va chạm với layer nào, tối ưu hiệu năng.
Trình mô phỏng tương tác
Chọn loại Collider và thả hình dạng để xem cách chúng va chạm với sàn và nhau.
Ví dụ Code
Cơ bảnTruy cập và chỉnh sửa Collider qua script tại runtime.
using UnityEngine;
public class ColliderExample : MonoBehaviour
{
void Start()
{
// Lấy Collider đang gắn trên object này
Collider col = GetComponent<Collider>();
// Kiểm tra bounds (hộp bao quanh) của Collider
Debug.Log("Kích thước: " + col.bounds.size);
Debug.Log("Tâm: " + col.bounds.center);
// Bật/tắt Collider
col.enabled = false; // Tạm vô hiệu hoá va chạm
col.enabled = true;
// Truy cập BoxCollider cụ thể để đổi kích thước
BoxCollider box = GetComponent<BoxCollider>();
if (box != null)
box.size = new Vector3(2f, 1f, 2f);
}
}Ví dụ Code
Nâng caoTạo vùng phát hiện bằng OverlapBox — không cần Rigidbody.
using UnityEngine;
// Phát hiện tất cả vật thể trong vùng hộp mà không cần va chạm vật lý
public class AreaDetector : MonoBehaviour
{
public Vector3 detectionSize = new Vector3(5f, 5f, 5f);
public LayerMask targetLayer;
void Update()
{
// OverlapBox: tìm tất cả Collider trong hộp, không cần Rigidbody
Collider[] hits = Physics.OverlapBox(
transform.position,
detectionSize / 2f,
transform.rotation,
targetLayer
);
foreach (Collider hit in hits)
{
Debug.Log("Phát hiện: " + hit.name);
}
}
// Vẽ vùng phát hiện trong Scene View để debug
void OnDrawGizmosSelected()
{
Gizmos.color = new Color(0.2f, 1f, 0.2f, 0.3f);
Gizmos.DrawCube(transform.position, detectionSize);
Gizmos.color = new Color(0.2f, 1f, 0.2f, 1f);
Gizmos.DrawWireCube(transform.position, detectionSize);
}
}📌 Ghi nhớ nhanh
- ▸Sphere nhanh nhất, Mesh chính xác nhất nhưng chậm nhất
- ▸CapsuleCollider là chuẩn cho nhân vật người
- ▸Compound = nhiều Collider đơn thay cho MeshCollider
- ▸isTrigger=true → phát hiện mà không tạo phản lực
- ▸Layer Collision Matrix kiểm soát ai-chạm-ai
⚠️ Lỗi thường gặp
❌ Dùng MeshCollider Convex=false cho vật di động
Non-convex MeshCollider không thể dùng với Dynamic Rigidbody, gây lỗi
✅ Bật Convex hoặc dùng Compound Collider thay thế
❌ Collider quá nhỏ so với mesh nhìn thấy
Người chơi thấy đạn chưa chạm nhưng đã chết — trải nghiệm tệ
✅ Bật Gizmo, kiểm tra kích thước Collider khớp mesh