Menu
CoddyTech

Ba làn đường

Bài học 1 trên 21 trong khóa học Trò chơi Unity: đường đua trên trời của Coddy.

Trong khóa học này, bạn sẽ xây dựng một trò chơi hoàn chỉnh, mỗi bài học thêm một tính năng. Chơi chạy trò chơi; Kiểm tra chấm bài. Một nhân vật chạy đua trên con đường cao giữa trời. Chướng ngại vật, thanh chắn và tường lao tới, xu xếp dọc các làn đường, còn con đường ngày càng nhanh hơn khi bạn trụ được lâu hơn.

Dự án đã có bốn script: Runner trên nhân vật, Road, GameManager và Coin. Hiện tại, hầu hết các script đều trống và sẽ được bổ sung dần qua từng bài học. Script thứ năm, CameraFit trên camera, đã có sẵn: script này mở rộng tầm nhìn trên màn hình điện thoại cao để cả ba làn đường đều vừa khung hình, và bạn không cần thay đổi nó.

Nhân vật không bao giờ di chuyển về phía trước. Nó chỉ di chuyển giữa ba làn đường: trái, giữa và phải. Hãy giữ làn đường dưới dạng số nguyên, -1, 0 hoặc 1, rồi tính vị trí của làn đường đó trên trục x:

float targetX = lane * laneWidth;

Nhân vật có một CharacterController, vì vậy nó di chuyển bằng controller.Move(motion): Move nhận khoảng cách cần di chuyển trong khung hình này, chứ không phải vị trí cần đến. Để đến targetX, hãy di chuyển một khoảng bằng hiệu giữa giá trị đó và vị trí hiện tại của nhân vật:

float x = targetX;
Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
controller.Move(move);

Mathf.Max(-1, lane - 1) trả về lane - 1, nhưng không bao giờ nhỏ hơn -1, nên nhân vật không thể sang làn nằm ngoài cùng bên trái.

challenge icon

Thử thách

Dễ

Di chuyển nhân vật chạy giữa ba làn.

  1. Trong Runner.Update, khi nhấn A hoặc phím mũi tên trái (Input.GetKeyDown), hãy đặt lane = Mathf.Max(-1, lane - 1).
  2. Khi nhấn D hoặc phím mũi tên phải, hãy đặt lane = Mathf.Min(1, lane + 1).
  3. Sau đó, tính targetX và di chuyển nhân vật chạy đến đó bằng controller.Move, như trên.

Nhấn Chơi, rồi nhấn A và D: nhân vật chạy sẽ nhảy qua lại giữa ba làn. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;

    public int lane;

    private CharacterController controller;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // chuyển làn ở đây
    }
}

Tất cả bài học trong Trò chơi Unity: đường đua trên trời

Tự luyện tập: Playground Unity