Menu
CoddyTech

物体间的距离

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 28 课,共 85 课。

Vector3.Distance(a, b) 表示两个点之间的直线距离,以单位计量,计算时考虑三个轴。它就是两点之间的步长 (a - b).magnitude,所以 a 和 b 的顺序无关紧要。从 (0, 0, 0) 到 (3, 0, 4) 的距离是 5。

将距离与一个数字进行比较,脚本就能知道某个东西何时在附近。这个露营者只有在距离营火 4 个单位以内时才能暖手,营火的位置由 Inspector 设置:

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");
    }
}

距离也会计算高度:位于火堆上方 5 个单位处的露营者,距离火堆是 5 个单位,而不是 0。当高度不应计入时,比较两个 y 坐标相同的点。

challenge icon

挑战

简单

让行者在沼泽中以一半的速度移动。

  1. 在 float s = speed; 下方,写入 if (Vector3.Distance(transform.position, swamp) < 3f)。
  2. 在其中设置 s = speed / 2;。保持 speed 字段和移动语句不变。

按下“开始”,直接穿过沼泽行走:行者会在沼泽中减速。然后点击“检查”。

亲手试试

using UnityEngine;

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

    void Update()
    {
        float s = speed;
        // 距离 swamp 不超过 3 个单位时,以一半的速度移动。

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

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器