Menu
CoddyTech

Khoảng cách giữa các vật

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

Vector3.Distance(a, b) cho biết khoảng cách giữa hai điểm, tính bằng đơn vị theo đường thẳng qua cả ba trục. Đây là độ dài bước giữa chúng, (a - b).magnitude, nên thứ tự của a và b không quan trọng. Khoảng cách từ (0, 0, 0) đến (3, 0, 4) là 5.

So sánh khoảng cách với một con số để tập lệnh biết khi nào có thứ gì đó ở gần. Người cắm trại này chỉ có thể sưởi ấm tay khi cách lửa trại không quá 4 đơn vị. Inspector thiết lập vị trí của lửa trại:

public Vector3 campfire = new Vector3(3, 0, 4);

void Update()
{
    float d = Vector3.Distance(transform.position, campfire);
    if (d < 4f && Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("You warm your hands");
    }
}

Khoảng cách cũng tính cả độ cao: người cắm trại ở phía trên lửa trại 5 đơn vị thì cách lửa trại 5 đơn vị, không phải 0. Khi không cần tính độ cao, hãy so sánh hai điểm có cùng giá trị y.

challenge icon

Thử thách

Dễ

Làm cho người đi bộ di chuyển với nửa tốc độ trong đầm lầy.

  1. Bên dưới float s = speed;, viết if (Vector3.Distance(transform.position, swamp) < 3f).
  2. Bên trong câu lệnh đó, đặt s = speed / 2;. Giữ nguyên trường speed và các dòng di chuyển.

Nhấn “Chơi” rồi đi thẳng qua đầm lầy: người đi bộ sẽ chậm lại khi ở trong đó. Sau đó nhấn “Kiểm tra”.

Tự làm thử

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;
    public Vector3 swamp = new Vector3(0, 0.5f, 0);

    void Update()
    {
        float s = speed;
        // Khi ở cách swamp không quá 3 đơn vị, di chuyển với tốc độ bằng một nửa.

        Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        transform.position += direction.normalized * s * Time.deltaTime;
    }
}

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