Vận tốc
Thuộc phần Vật lý và lối chơi trong hành trình Unity của Coddy. Bài học 5 trên 71.
rb.linearVelocity cho biết vật thể đang chuyển động như thế nào tại thời điểm này: một giá trị Vector3 tính bằng mét trên giây theo các trục x, y và z. Đọc giá trị này sẽ cho bạn biết vật thể đang hướng về đâu, còn rb.linearVelocity.magnitude là tốc độ của nó. Đặt giá trị này sẽ thay đổi chuyển động ngay lập tức, không tăng tốc dần và không phụ thuộc vào khối lượng: một chiếc hộp 1 kg và một chiếc két sắt 50 kg được đặt ở tốc độ 2 m/s đều sẽ chuyển động chính xác ở tốc độ 2 m/s từ bước vật lý tiếp theo. Sau đó, trọng lực, ma sát và va chạm vẫn tiếp tục tác động lên vật thể.
Chiếc xe go-kart này chạy về phía trước với tốc độ chính xác là cruise m/s. Nó sao chép vận tốc, chỉ thay đổi z rồi gán lại, nên giá trị y do trọng lực tạo ra vẫn được giữ nguyên và xe vẫn rơi khỏi đầu dốc:
void FixedUpdate()
{
Vector3 vel = rb.linearVelocity;
vel.z = cruise; // tiến về phía trước với tốc độ đúng bằng cruise m/s
rb.linearVelocity = vel; // y giữ nguyên giá trị do trọng lực tạo ra
}Nếu đặt y về 0, bạn cũng sẽ loại bỏ tốc độ do trọng lực tạo ra ở mỗi bước, khiến xe trôi xuống khỏi đầu dốc thay vì rơi. Trước Unity 6, thuộc tính này có tên là velocity. Các bài hướng dẫn cũ vẫn viết rb.velocity: trong Unity 6, code này vẫn biên dịch, nhưng có cảnh báo rằng velocity đã lỗi thời và được đổi tên thành linearVelocity. drag cũng được đổi tên thành linearDamping theo cách tương tự. Hãy dùng tên mới.
Thử thách
DễĐiều khiển robot đi với tốc độ đúng bằng speed m/s và để nó rơi khỏi mép.
- Trong
FixedUpdate(), đọcfloat h = Input.GetAxisRaw("Horizontal");và lấyfloat vtừ"Vertical". - Đặt
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, v * speed);, giữ nguyên thành phần y do trọng lực.
Nhấn nút "Chơi" rồi đi khỏi mép: robot sẽ dừng lại khi bạn nhả phím và rơi xuống. Sau đó nhấn "Kiểm tra".
Tự làm thử
using UnityEngine;
public class RobotWalk : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Di chuyển bằng các phím mũi tên với tốc độ đúng bằng speed, giữ nguyên thành phần y do trọng lực tạo ra
}
}
Tất cả bài học trong Vật lý và lối chơi
1Rigidbody
Trọng lực và khối lượngĐẩy bằng AddForceNhảy bằng xung lựcFixedUpdate cho vật lýVận tốcVật thể động họcÔn tập: Bệ phóng4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine đầu tiên của bạnVòng lặp trong CoroutineDừng CoroutineÔn tập: đếm ngược10Dự án: Thoát khỏi đấu trường
Đấu trườngThợ săn2Va chạm
OnCollisionEnterMình đã va chạm với gì?Vỡ khi va chạmĐứng trên mặt đấtĐộ nảy và ma sátHình dạng colliderÔn tập: Tường có thể phá vỡ5Dự án: Cuộc đua thu thập xu
Quả bóng lănThu thập xuTự luyện tập: Playground Unity