Menu
CoddyTech

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.

challenge icon

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.

  1. Trong FixedUpdate(), đọc float h = Input.GetAxisRaw("Horizontal"); và lấy float v từ "Vertical".
  2. Đặ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

Tự luyện tập: Playground Unity