Menu
CoddyTech

Người chạy

Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 75 trên 85.

Chương này hướng dẫn bạn xây dựng một trò chơi nhỏ, Dodge the Blocks. Bạn điều khiển nhân vật chạy dọc theo một làn đường trong khi các khối rơi từ trên trời xuống, và chỉ cần chạm một lần là lượt chơi kết thúc. Toàn bộ trò chơi nằm trong một script, Runner, được bổ sung một tính năng trong mỗi bài học: điều khiển, các khối rơi, dọn chúng đi, va chạm và điểm số.

Tính năng đầu tiên là điều khiển để nhân vật luôn ở trên làn đường, bằng Mathf.Clamp(value, min, max) trong Catch the Star: hàm này trả về min khi giá trị nhỏ hơn phạm vi, max khi giá trị lớn hơn phạm vi, còn lại thì trả về chính giá trị đó. Vị trí đặt hàm giới hạn rất quan trọng. Thanh năng lượng này đầy lên khi bạn giữ Space, cạn dần khi bạn không giữ phím và luôn nằm trong khoảng từ 0 đến 10:

[SerializeField] private float charge = 0f;

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        charge += 4f * Time.deltaTime;
    }
    else
    {
        charge -= 2f * Time.deltaTime;
    }
    charge = Mathf.Clamp(charge, 0f, 10f);
    transform.localScale = new Vector3(0.5f, charge, 0.5f);
}

Hãy đặt hàm giới hạn sau khi thay đổi giá trị. Nếu giới hạn giá trị trước, nó có thể vượt quá giới hạn một bước khi kết thúc khung hình, và thanh sẽ được vẽ theo giá trị đó. Mathf.Clamp cũng trả về một số mới thay vì thay đổi biến bạn truyền vào, vì vậy hãy gán kết quả trở lại biến.

challenge icon

Thử thách

Trung bình

Bắt đầu trò Dodge the Blocks: điều khiển nhân vật chạy dọc theo làn đường.

  1. Trong Update(), sao chép transform.position vào Vector3 p, rồi cộng Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime vào p.x. Trục thô giúp nhân vật di chuyển ngay ở tốc độ tối đa.
  2. Đặt p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);, sau đó đặt transform.position = p;.

Nhấn Chơi, nhấp vào trò chơi rồi chạy đến cả hai đầu: nhân vật sẽ dừng ở mép đường. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;

    void Update()
    {
        // Di chuyển dọc theo trục x bằng các phím mũi tên, rồi giữ x trong làn đường
    }
}

Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity

Tự luyện tập: Playground Unity