Menu
CoddyTech

Di chuyển đến một điểm

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 35 trên 85.

Vector3.MoveTowards(current, target, maxStep) trả về một điểm gần target hơn tối đa maxStep. Nếu mục tiêu ở gần hơn khoảng đó, hàm trả về chính mục tiêu, nên nó không bao giờ đi quá đích. Khi dùng speed * Time.deltaTime làm bước di chuyển, đối tượng di chuyển với tốc độ ổn định và dừng chính xác tại mục tiêu. Cáp treo này lướt đến ga với tốc độ 2 đơn vị mỗi giây:

public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;

void Update()
{
    transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}

Khi đến nơi, mọi lần gọi sau đó đều trả về station, nên cáp treo đứng yên, và transform.position == station là true. Với một số đơn lẻ, Mathf.MoveTowards hoạt động theo cách tương tự.

Vector3.Lerp(a, b, t) là điểm nằm cách a một phần t quãng đường đến b: với t = 0.5, điểm đó nằm giữa quãng đường. Khi viết Lerp(transform.position, station, 2f * Time.deltaTime) trong Update(), đối tượng đi được một phần của quãng đường còn lại ở mỗi khung hình: lúc đầu nhanh, sau đó chậm dần khi gần đến đích, tiến lại gần thay vì đến nơi với tốc độ cố định. Dùng MoveTowards khi đối tượng cần di chuyển với tốc độ cố định và dừng chính xác; dùng mẫu Lerp đó để giảm tốc nhẹ nhàng.

challenge icon

Thử thách

Trung bình

Điều khiển drone bay đến bãi đáp khi nhấn phím Space.

  1. Thêm các trường bool flying; và bool landed;. Khi Input.GetKeyDown(KeyCode.Space), đặt flying = true;.
  2. Khi flying && !landed, di chuyển bằng Vector3.MoveTowards(transform.position, pad, speed * Time.deltaTime).
  3. Khi transform.position == pad, đặt landed và ghi nhật ký Landed.

Nhấn Chơi, rồi nhấn Space: drone sẽ hạ cánh xuống bãi đáp. Sau đó, nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class Drone : MonoBehaviour
{
    public Vector3 pad = new Vector3(0, 0.25f, 0);
    public float speed = 2f;

    void Update()
    {
        // Sau khi nhấn Space: bay đến pad với tốc độ speed và ghi log Landed một lần khi đến nơi
    }
}

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