Unity Rigidbody: Dynamic, Kinematic và Static Khác Nhau Thế Nào?
Minh Khoa
Tác giả
Câu trả lời ngắn: Physics di chuyển nó → Dynamic. Code di chuyển nó → Kinematic. Nó không bao giờ di chuyển → Static.
## So sánh nhanh
| Đặc điểm | Dynamic | Kinematic | Static |
|---|---|---|---|
| Ai điều khiển? | Physics Engine | Code hoặc Animation | Không ai, vì nó đứng yên |
| Gravity và Force | Có tác dụng | Không có tác dụng | Không có tác dụng |
| Bị object khác đẩy | Có | Không | Không |
| Tác động lên Dynamic | Va chạm và phản ứng | Có thể đẩy Dynamic | Chặn Dynamic như sàn, tường |
| Cách di chuyển | Force, velocity, collision | MovePosition, MoveRotation | Không nên di chuyển |
| Ví dụ | Thùng rơi, quả bóng, xe | Cửa, thang máy, moving platform | Sàn, tường, địa hình |
| Chi phí mô phỏng | Cao nhất | Thấp hơn Dynamic | Thấp nhất nếu đứng yên |
Giải thích như trong phỏng vấn
Dynamic là gì?
Dynamic là object được Physics Engine mô phỏng hoàn toàn. Nó chịu gravity, force và phản ứng khi va chạm.
Ví dụ: Một thùng gỗ rơi từ trên cao, chạm sàn rồi nảy hoặc lăn đi.
Dùng khi: Object cần chuyển động tự nhiên theo vật lý.
Kinematic là gì?
Kinematic vẫn tham gia hệ thống va chạm, nhưng Physics Engine không quyết định chuyển động của nó. Gravity và force không thể đẩy nó; code hoặc animation sẽ điều khiển vị trí.
Kinematic có thể đẩy một Dynamic Rigidbody, nhưng Dynamic Rigidbody không thể đẩy ngược lại nó.
Ví dụ: Moving platform chạy theo một đường cố định và chở player đi cùng.
Dùng khi: Object phải di chuyển chính xác theo thiết kế nhưng vẫn tương tác với các object vật lý.
Static là gì?
Static là collider không di chuyển trong suốt quá trình chơi. Physics Engine có thể tối ưu nó vì vị trí không thay đổi.
Ví dụ: Sàn nhà, tường, vách đá hoặc địa hình.
Nếu một “Static” collider phải di chuyển thường xuyên, nó không còn phù hợp để làm Static nữa; hãy cân nhắc Kinematic.