4 Rigibody

Rigidbody trong Unity là gì?

Rigidbody là một thành phần (component) trong Unity dùng để áp dụng các tính chất vật lý lên một GameObject. Khi một GameObject được thêm Rigidbody, nó sẽ chịu ảnh hưởng bởi:

  • Trọng lực (Gravity)
  • Lực (Force)
  • Mô-men xoắn (Torque)
  • Va chạm vật lý (Collisions)

Rigidbody kết hợp với Collider để tạo ra các tương tác vật lý thực tế.


Các thuộc tính chính của Rigidbody

Dưới đây là các thuộc tính quan trọng của Rigidbody, giải thích và cách sử dụng chúng:

1. Mass (Khối lượng)

  • Loại: Float
  • Mô tả: Khối lượng của GameObject (đơn vị là kg).
  • Ảnh hưởng: Khối lượng ảnh hưởng đến mức độ phản ứng của vật thể với lực (Force) và mô-men xoắn (Torque).
  • Mặc định: 1
  • Lưu ý: Vật thể có khối lượng lớn hơn sẽ khó bị đẩy hoặc di chuyển hơn.
rb.mass = 5f;

2. Drag (Lực cản)

  • Loại: Float
  • Mô tả: Lực cản làm giảm tốc độ di chuyển.
  • Ảnh hưởng: Giá trị càng lớn, vật thể càng chậm lại nhanh hơn khi không có lực tác dụng.
  • Mặc định: 0
  • Lưu ý: Không nên đặt giá trị quá cao để tránh việc vật thể dừng ngay lập tức.
rb.drag = 2f;

3. Angular Drag (Lực cản góc)

  • Loại: Float
  • Mô tả: Lực cản xoay, giảm tốc độ quay của vật thể.
  • Ảnh hưởng: Giá trị càng lớn, vật thể càng nhanh chóng ngừng quay.
  • Mặc định: 0.05
  • Lưu ý: Giá trị này quan trọng khi bạn áp dụng mô-men xoắn (Torque).
rb.angularDrag = 1f;

4. Use Gravity (Sử dụng trọng lực)

  • Loại: Bool
  • Mô tả: Cho biết vật thể có chịu ảnh hưởng của trọng lực hay không.
  • Ảnh hưởng: Khi bật, vật thể sẽ rơi theo trọng lực toàn cầu (mặc định -9.81 m/s² trên trục Y).
  • Mặc định: Bật (Checked)
  • Lưu ý: Nếu bạn muốn vật thể lơ lừng hoặc không bị kéo xuống, hãy tắt tùy chọn này.
rb.useGravity = false;

5. Is Kinematic (Tính động học)

  • Loại: Bool
  • Mô tả: Khi bật, Rigidbody không bị ảnh hưởng bởi các lực bên ngoài (trọng lực, va chạm, hoặc các lực vật lý khác).
  • Ảnh hưởng:
    • Các lực vật lý không làm di chuyển vật thể.
    • Vật thể chỉ di chuyển khi bạn thay đổi vị trí/tham số qua script.
  • Mặc định: Tắt (Unchecked)
  • Lưu ý: Thường được sử dụng cho các vật thể không cần tương tác vật lý nhưng vẫn có Collider để bắt sự kiện Trigger hoặc Collision.
rb.isKinematic = true;

6. Constraints (Ràng buộc)

  • Loại: Enum
  • Mô tả: Giới hạn chuyển động hoặc xoay của Rigidbody trên các trục X, Y, Z.
  • Tùy chọn:
    • Freeze Position: Giữ cố định vị trí trên các trục (X, Y, Z).
    • Freeze Rotation: Giữ cố định góc quay trên các trục (X, Y, Z).
  • Lưu ý: Rất hữu ích để ngăn vật thể bị lật hoặc di chuyển không mong muốn.
rb.constraints = RigidbodyConstraints.FreezePositionX;

7. Interpolate (Nội suy)

  • Loại: Enum
  • Mô tả: Kiểm soát cách Rigidbody tính toán chuyển động giữa các khung hình.
  • Tùy chọn:
    • None: Không nội suy.
    • Interpolate: Sử dụng vị trí trước đó để làm mềm chuyển động.
    • Extrapolate: Dự đoán vị trí tiếp theo để làm mềm chuyển động.
  • Lưu ý: Dùng khi bạn muốn chuyển động mềm hơn, đặc biệt ở FPS thấp.
rb.interpolation = RigidbodyInterpolation.Interpolate;

8. Collision Detection (Phát hiện va chạm)

  • Loại: Enum
  • Mô tả: Xác định cách phát hiện va chạm giữa các vật thể.
  • Tùy chọn:
    • Discrete: Chỉ kiểm tra va chạm tại mỗi khung hình (mặc định).
    • Continuous: Kiểm tra va chạm liên tục để ngăn vật thể đi xuyên qua nhau khi di chuyển nhanh.
    • Continuous Dynamic: Dùng cho vật thể di chuyển nhanh (chẳng hạn đạn).
    • Continuous Speculative: Kiểm tra va chạm cả hai phía (không chính xác bằng Continuous Dynamic).
  • Lưu ý: Sử dụng Continuous nếu bạn gặp vấn đề với vật thể di chuyển nhanh xuyên qua nhau.
rb.collisionDetectionMode = CollisionDetectionMode.Continuous;

9. Velocity (Vận tốc)

  • Loại: Vector3
  • Mô tả: Vận tốc của vật thể trong không gian thế giới.
  • Sử dụng: Có thể thay đổi trực tiếp bằng code để áp dụng vận tốc ngay lập tức.
Rigidbody rb = GetComponent<Rigidbody>();
rb.velocity = new Vector3(0, 5, 0); // Vật thể bay lên trên

10. Angular Velocity (Vận tốc góc)

  • Loại: Vector3
  • Mô tả: Tốc độ quay của vật thể xung quanh trục.
  • Sử dụng: Có thể thay đổi trực tiếp để làm vật thể quay theo một hướng cụ thể.
rb.angularVelocity = new Vector3(0, 10, 0); // Quay quanh trục Y

Các hàm phổ biến khi làm việc với Rigidbody

1. AddForce: Thêm lực lên vật thể.

rb.AddForce(Vector3.up * 10f, ForceMode.Impulse); // Thêm lực đẩy lên trên

2. AddTorque: Thêm mô-men xoắn để làm vật thể quay.

rb.AddTorque(Vector3.right * 5f, ForceMode.Impulse); // Làm vật thể quay quanh trục X

3. MovePosition: Di chuyển vật thể đến một vị trí cụ thể (dùng khi Is Kinematic bật).

rb.MovePosition(new Vector3(0, 5, 0));

4. MoveRotation: Quay vật thể đến một góc cụ thể.

rb.MoveRotation(Quaternion.Euler(0, 90, 0));

5. AddExplosionForce: Thêm lực nổ lan tỏa từ một điểm nhất định.

  • Mô tả: Hàm này giúp mô phỏng các vụ nổ bằng cách đẩy các vật thể ra xa từ một điểm phát nổ.
rb.AddExplosionForce(1000f, explosionPosition, explosionRadius);

6. AddForceAtPosition: Thêm lực tại một vị trí cụ thể trên vật thể.

  • Mô tả: Hàm này cho phép áp dụng lực tại một điểm cụ thể trên bề mặt vật thể, tạo ra cả chuyển động và mô-men xoắn.
Vector3 force = new Vector3(0, 10, 0); // Lực đẩy lên trên
Vector3 position = new Vector3(1, 0, 0); // Điểm áp dụng lực trên vật thể
rb.AddForceAtPosition(force, position, ForceMode.Impulse);

Ứng dụng của Rigidbody

1. Mô phỏng chuyển động tự nhiên

Rigidbody cho phép mô phỏng các chuyển động tự nhiên như rơi, lăn, bay và va chạm giữa các vật thể, tạo ra sự chân thực cho game hoặc ứng dụng.

2. Làm việc với cơ chế điều khiển nhân vật

Rigidbody thường được sử dụng để điều khiển các nhân vật trong game, cho phép áp dụng các lực nhảy, chạy hoặc va chạm vào môi trường.

3. Tạo hiệu ứng vật lý đặc biệt

Các hiệu ứng như vụ nổ, đẩy vật thể, hoặc các tương tác vật lý phức tạp đều có thể thực hiện dễ dàng thông qua Rigidbody.


Kết luận

Rigidbody là một công cụ mạnh mẽ trong Unity, cho phép các nhà phát triển tạo ra các hiệu ứng vật lý chân thực và tương tác phong phú. Việc hiểu rõ các thuộc tính và cách sử dụng Rigidbody giúp bạn xây dựng các trò chơi và ứng dụng có tính tương tác cao và sống động hơn.

Để lại một bình luận 0

Your email address will not be published. Required fields are marked *