Menu
CoddyTech

Chuyển làn mượt mà

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

Nhân vật chạy nhảy từ làn này sang làn khác chỉ trong một khung hình. Cách này hiệu quả, nhưng trông như dịch chuyển tức thời. Việc đổi làn nên mất một chút thời gian để mắt bạn theo kịp.

Mathf.MoveTowards(current, target, maxStep) di chuyển một số về phía mục tiêu tối đa maxStep, và không bao giờ vượt quá mục tiêu. Khi được gọi mỗi khung hình với bước di chuyển bằng tốc độ nhân với Time.deltaTime, hàm này di chuyển với tốc độ đó tính theo đơn vị mỗi giây, bất kể tốc độ khung hình:

float x = Mathf.MoveTowards(transform.position.x, targetX, laneSpeed * Time.deltaTime);

Với laneSpeed bằng 16, việc đổi làn 2.5 đơn vị mất khoảng 0.16 giây: nhanh, nhưng bạn vẫn nhìn thấy chuyển động.

challenge icon

Thử thách

Dễ

Giúp nhân vật đổi làn mượt mà thay vì nhảy tức thì.

  1. Thêm public float laneSpeed = 16f; bên dưới laneWidth.
  2. Thay float x = targetX; bằng dòng Mathf.MoveTowards ở trên.

Nhấn Chơi rồi đổi làn: nhân vật sẽ lướt ngang. 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()
    {
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) lane = Mathf.Max(-1, lane - 1);
        if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) lane = Mathf.Min(1, lane + 1);

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

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