Contents
1. Collider là gì?
Collider là một thành phần (component) trong Unity cho phép các GameObject phát hiện va chạm và tương tác với nhau trong môi trường 3D hoặc 2D. Collider không hiển thị hình dạng trực quan mà chỉ định nghĩa vùng không gian vật lý mà vật thể chiếm giữ để xử lý va chạm.
Collider thường được sử dụng cùng với Rigidbody để tạo ra các tương tác vật lý thực tế, chẳng hạn như va chạm giữa các vật thể hoặc phát hiện khi một vật thể đi vào vùng cụ thể.
2. Các loại Collider chính trong Unity
a. Box Collider
- Mô tả: Box Collider xác định vùng va chạm hình hộp chữ nhật (rectangular box) bao quanh vật thể.
- Ứng dụng: Thường dùng cho các vật thể có hình dạng đơn giản như hộp, tường, sàn nhà.
- Thuộc tính chính:
- Center: Vị trí trung tâm của Collider so với GameObject.
- Size: Kích thước của Collider trên các trục X, Y, Z.
- Material: Vật liệu vật lý (Physic Material) quyết định ma sát và độ nảy khi va chạm.
- Contact Offset: Khoảng cách tối thiểu giữa các Collider khi va chạm.
- Layer Overrides:
- Layer Override Priority: Quy định độ ưu tiên của lớp ghi đè so với các lớp khác.
- Include Layers: Xác định những lớp nào sẽ được tính va chạm với Collider này. Khi sử dụng
Include Layers
, chỉ những lớp được chỉ định mới tham gia vào va chạm, bất chấp thiết lập trong Physics của Project Settings. - Exclude Layers: Xác định những lớp sẽ bị loại trừ khỏi va chạm với Collider này.
BoxCollider box = gameObject.AddComponent<BoxCollider>();
box.size = new Vector3(1, 1, 1);
box.center = new Vector3(0, 0.5f, 0);
box.material = new PhysicMaterial("Bouncy");
b. Sphere Collider
- Mô tả: Sphere Collider xác định vùng va chạm hình cầu bao quanh vật thể.
- Ứng dụng: Phù hợp cho các vật thể có hình dạng tròn hoặc gần tròn như quả bóng, hành tinh.
- Thuộc tính chính:
- Center: Vị trí trung tâm của Collider.
- Radius: Bán kính của hình cầu.
- Material: Vật liệu vật lý quyết định ma sát và độ nảy khi va chạm.
- Contact Offset: Khoảng cách tối thiểu giữa các Collider khi va chạm.
- Layer Overrides:
- Layer Override Priority: Điều chỉnh độ ưu tiên lớp của Collider so với các Collider khác.
- Include Layers: Chỉ định các lớp sẽ tham gia vào va chạm.
- Exclude Layers: Loại trừ các lớp không cần thiết.
SphereCollider sphere = gameObject.AddComponent<SphereCollider>();
sphere.radius = 0.5f;
sphere.center = new Vector3(0, 0, 0);
sphere.material = new PhysicMaterial("Slippery");
c. Capsule Collider
- Mô tả: Capsule Collider xác định vùng va chạm hình viên con nhộng (capsule).
- Ứng dụng: Thường dùng cho các nhân vật hoặc vật thể đứng thẳng như người, cột trụ.
- Thuộc tính chính:
- Center: Vị trí trung tâm của Collider.
- Radius: Bán kính của phần tròn ở hai đầu.
- Height: Chiều cao của hình viên con nhộng.
- Direction: Hướng của trục chính (X, Y hoặc Z).
- Material: Vật liệu vật lý quyết định ma sát và độ nảy khi va chạm.
- Layer Overrides:
- Layer Override Priority: Độ ưu tiên ghi đè lớp.
- Include Layers: Lựa chọn các lớp được tính va chạm.
- Exclude Layers: Lựa chọn các lớp bị loại trừ khỏi va chạm.
CapsuleCollider capsule = gameObject.AddComponent<CapsuleCollider>();
capsule.radius = 0.5f;
capsule.height = 2f;
capsule.direction = 1; // 1 đại diện cho trục Y
capsule.material = new PhysicMaterial("Sticky");
d. Mesh Collider
- Mô tả: Mesh Collider sử dụng hình dạng chi tiết của mô hình 3D để xác định vùng va chạm.
- Ứng dụng: Dùng cho các vật thể có hình dạng phức tạp, chẳng hạn như địa hình, mô hình nhân vật.
- Thuộc tính chính:
- Mesh: Mô hình 3D mà Collider sẽ dựa vào.
- Convex: Khi bật tùy chọn này, Collider sẽ được đơn giản hóa thành hình dạng lồi, giúp cải thiện hiệu suất.
- Material: Vật liệu vật lý quyết định ma sát và độ nảy khi va chạm.
- Layer Overrides:
- Layer Override Priority: Quyết định thứ tự ưu tiên lớp va chạm.
- Include Layers: Lựa chọn các lớp cho phép va chạm.
- Exclude Layers: Chỉ định các lớp loại trừ khỏi va chạm.
MeshCollider meshCollider = gameObject.AddComponent<MeshCollider>();
meshCollider.convex = true;
meshCollider.material = new PhysicMaterial("Rough");
- Lưu ý: Nếu sử dụng Mesh Collider với Rigidbody, bạn cần bật tùy chọn Convex để tránh lỗi.
e. Wheel Collider
- Mô tả: Wheel Collider được thiết kế đặc biệt để mô phỏng bánh xe và các hiệu ứng vật lý liên quan như ma sát, lực bám đường.
- Ứng dụng: Dùng cho các phương tiện như xe hơi, xe máy.
- Thuộc tính chính:
- Radius: Bán kính của bánh xe.
- Suspension Distance: Khoảng cách treo của bánh xe.
- Forward Friction và Sideways Friction: Ma sát theo phương chuyển động và phương ngang của bánh xe.
- Mass: Khối lượng của bánh xe.
- Material: Vật liệu vật lý quyết định ma sát và độ bám đường.
- Layer Overrides:
- Layer Override Priority: Điều chỉnh độ ưu tiên lớp va chạm.
- Include Layers: Các lớp cho phép tham gia va chạm.
- Exclude Layers: Các lớp bị loại trừ.
WheelCollider wheel = gameObject.AddComponent<WheelCollider>();
wheel.radius = 0.4f;
wheel.suspensionDistance = 0.2f;
wheel.forwardFriction = new WheelFrictionCurve { stiffness = 1.5f };
f. Terrain Collider
- Mô tả: Terrain Collider dùng để tạo vùng va chạm cho địa hình.
- Ứng dụng: Chỉ sử dụng với các đối tượng địa hình (Terrain) được tạo bằng công cụ Terrain của Unity.
- Thuộc tính chính:
- Terrain Data: Dữ liệu địa hình mà Collider sẽ dựa vào.
- Material: Vật liệu vật lý quyết định ma sát và độ nảy khi va chạm.
- Layer Overrides:
- Layer Override Priority: Độ ưu tiên khi ghi đè lớp va chạm.
- Include Layers: Các lớp được bao gồm trong va chạm.
- Exclude Layers: Các lớp bị loại trừ khỏi va chạm.
TerrainCollider terrainCollider = gameObject.AddComponent<TerrainCollider>();
terrainCollider.terrainData = terrain.terrainData;
terrainCollider.material = new PhysicMaterial("Grass");
g. Circle Collider 2D
- Mô tả: Circle Collider 2D xác định vùng va chạm hình tròn trong môi trường 2D.
- Ứng dụng: Thường dùng cho các vật thể có hình dạng tròn trong game 2D như quả bóng, bánh xe.
- Thuộc tính chính:
- Radius: Bán kính của hình tròn.
- Offset: Vị trí tương đối của hình tròn so với GameObject.
- Used By Effector: Xác định xem Collider có được sử dụng bởi Effector hay không.
- Layer Overrides:
- Layer Override Priority: Thứ tự ưu tiên khi xử lý lớp va chạm.
- Include Layers: Các lớp tham gia vào va chạm.
- Exclude Layers: Các lớp không được tham gia vào va chạm.
CircleCollider2D circle = gameObject.AddComponent<CircleCollider2D>();
circle.radius = 0.5f;
circle.offset = new Vector2(0, 0);
3. Trigger trong Collider
- Mô tả: Khi bật tùy chọn Is Trigger trong Collider, Collider sẽ không còn gây ra va chạm vật lý mà chỉ kích hoạt các sự kiện khi có vật thể đi vào hoặc đi ra.
- Sự kiện chính:
- OnTriggerEnter: Gọi khi một vật thể đi vào vùng Trigger.
- OnTriggerStay: Gọi khi một vật thể nằm trong vùng Trigger.
- OnTriggerExit: Gọi khi một vật thể rời khỏi vùng Trigger.
void OnTriggerEnter(Collider other) {
Debug.Log("Vật thể đi vào vùng Trigger: " + other.gameObject.name);
}
4. Phát hiện va chạm với Collider
- Mô tả: Khi Collider không được bật Is Trigger, các sự kiện va chạm sẽ được gọi khi có vật thể va chạm với nó.
- Sự kiện chính:
- OnCollisionEnter: Gọi khi bắt đầu va chạm.
- OnCollisionStay: Gọi khi vật thể vẫn đang va chạm.
- OnCollisionExit: Gọi khi kết thúc va chạm.
void OnCollisionEnter(Collision collision) {
Debug.Log("Va chạm với: " + collision.gameObject.name);
}
5. So sánh các loại Collider
Loại Collider | Hình dạng | Ứng dụng chính | Độ phức tạp | Hiệu suất |
---|---|---|---|---|
Box Collider | Hộp chữ nhật | Vật thể hình hộp, tường, sàn | Thấp | Cao |
Sphere Collider | Hình cầu | Vật thể hình tròn, quả bóng | Thấp | Cao |
Capsule Collider | Viên con nhộng | Nhân vật, cột trụ | Trung bình | Cao |
Mesh Collider | Hình dạng phức tạp | Địa hình, mô hình phức tạp | Cao | Thấp |
Wheel Collider | Bánh xe | Xe hơi, xe máy | Trung bình | Trung bình |
Terrain Collider | Địa hình | Địa hình tự nhiên được tạo bằng Terrain Tool | Cao | Thấp |
Circle Collider 2D | Hình tròn | Vật thể tròn trong game 2D | Thấp | Cao |
6. Kết luận
Collider là thành phần quan trọng trong Unity để xử lý các va chạm và tương tác vật lý. Việc hiểu rõ các loại Collider và cách sử dụng chúng giúp bạn xây dựng các trò chơi và ứng dụng tương tác một cách hiệu quả và chính xác. Khi làm việc với các vật thể có hình dạng đơn giản, hãy ưu tiên sử dụng các Collider cơ bản như Box Collider hoặc Sphere Collider để tối ưu hiệu suất. Đối với các vật thể phức tạp, Mesh Collider là lựa chọn phù hợp nhưng cần cẩn thận với hiệu suất và lỗi vật lý.