Collision Detection
Khái niệm
- Cách Unity/PhysX (3D) hoặc Box2D (2D) xác định hai collider có chạm nhau trong bước mô phỏng.
- Mục tiêu: tránh “xuyên vật” (tunneling) khi vật thể di chuyển nhanh hoặc collider mỏng.
Rigidbody 3D
Chế độ | Mô tả | Dùng khi |
|---|---|---|
Discrete | Mặc định. Kiểm tra tại các mẫu thời gian rời rạc (mỗi bước physics). Nhanh nhất nhưng có thể xuyên nếu quá nhanh/mỏng. | Hầu hết vật thể di chuyển chậm/trung bình. |
Continuous | Kiểm tra swept giữa hai vị trí (last→new) để giảm xuyên qua static colliders. | Vật thể di chuyển nhanh, va tường mỏng. |
Continuous Dynamic | Nâng cấp của Continuous cho Rigidbody động nhanh va vào đối tượng continuous khác. Tốn chi phí hơn. | Đạn/vật thể rất nhanh, va chạm động–động. |
Continuous Speculative | Dự đoán va chạm (speculative) ở bước kế tiếp. Ổn định, chi phí vừa, hiệu quả với vật nhỏ/nhanh. | Vật thể nhỏ, tốc độ cao, cần chi phí hợp lý. |
Continuous/Continuous Dynamic tốn hiệu năng hơn Discrete; chỉ bật cho vật thể thật sự cần.
Rigidbody 2D
Chế độ | Mô tả | Dùng khi |
|---|---|---|
Discrete | Mặc định, rẻ. Có thể xuyên khi rất nhanh. | Vật thể chậm/trung bình. |
Continuous | Giảm xuyên qua bằng kiểm tra swept 2D. | Vật thể nhanh hoặc collider mỏng. |
Trigger vs Collision
Loại | Dùng cho | Callback |
|---|---|---|
Collision (va chạm) | Vật thể chặn nhau (phản lực, ma sát…) |
|
Trigger | Không chặn, chỉ để bắt sự kiện |
|
Best Practice
- Vật nhanh/nhỏ: dùng Continuous/Continuous Dynamic (3D) hoặc Continuous (2D).
- Giữ collider đơn giản (hộp/cầu/capsule) để giảm chi phí và ổn định tiếp xúc.
- Di chuyển Rigidbody bằng physics (
AddForce,MovePosition) — tránhtransform.Translateđể không bỏ qua mô phỏng. - Interpolate (Rigidbody Interpolate) chỉ mượt hình ảnh, không thay đổi va chạm.
- Kiểm soát va chạm bằng Layer Collision Matrix; tắt những lớp không cần để tiết kiệm.
- Nếu vẫn bị “xuyên”: tăng Fixed Timestep (mô phỏng dày hơn), giảm tốc độ đỉnh, hoặc tăng độ dày collider.
No comments to display
No comments to display