Menu
CoddyTech

Quả bóng lăn

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 28 trên 71.

Chương này xây dựng một trò chơi nhỏ, Coin Rush. Bạn lăn một quả bóng quanh đấu trường có tường bằng các phím mũi tên và thu thập xu trước khi hết giờ. Hai tập lệnh cùng đảm nhiệm công việc, như trong một dự án Unity: Ball di chuyển quả bóng, đồng thời theo dõi điểm số và thời gian, còn Coin nằm trên mỗi đồng xu. Coin.cs bắt đầu dưới dạng một lớp trống, và bài học tiếp theo sẽ bổ sung nội dung cho lớp này.

Bóng lăn khi bạn đẩy nó thay vì đặt nó vào vị trí mong muốn. Đẩy Rigidbody bằng AddForce và để bóng tự do xoay: lực làm bóng di chuyển, còn ma sát từ sàn bám vào phần đáy của bóng và làm nó xoay. Quả bóng bowling này lăn xuống đường băng khi bạn giữ phím Space:

public float push = 6f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(Vector3.forward * push);
    }
}

Bóng lăn không trượt sẽ xoay với tốc độ bằng tốc độ di chuyển chia cho bán kính. Vì vậy, quả bóng có bán kính 0.5, di chuyển với tốc độ 3 đơn vị mỗi giây, sẽ xoay với tốc độ 6 radian mỗi giây (rb.angularVelocity). Thay vào đó, hãy thay đổi transform.position, hoặc khóa chuyển động xoay của bóng trong mục Constraints của Rigidbody, thì bóng sẽ trượt như một chiếc đĩa mà không xoay. Một quả cầu đơn sắc trơn trông vẫn như nhau trong cả hai trường hợp: để thấy bóng lăn, hãy theo dõi Angular Velocity trong mục Info của Rigidbody khi trò chơi đang chạy.

challenge icon

Thử thách

Trung bình

Bắt đầu Coin Rush: dùng các phím mũi tên để lăn quả bóng.

  1. Trong Start() của Ball.cs, gán rb = GetComponent<Rigidbody>();.
  2. Trong FixedUpdate(), đọc float x = Input.GetAxis("Horizontal"); và float z = Input.GetAxis("Vertical");, sau đó gọi rb.AddForce(new Vector3(x, 0f, z) * force);.

Nhấn Chơi, nhấp vào trò chơi rồi lăn bóng: quả bóng xoay khi di chuyển. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class Ball : MonoBehaviour
{
    public float force = 10f;
    private Rigidbody rb;

    void Start()
    {
    }

    void FixedUpdate()
    {
        // Dùng các phím mũi tên để đẩy quả bóng: Horizontal theo trục x, Vertical theo trục z.
    }
}

Tất cả bài học trong Vật lý và lối chơi

Tự luyện tập: Playground Unity