物体间的距离
本课属于 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 坐标相同的点。
挑战
简单让行者在沼泽中以一半的速度移动。
- 在
float s = speed;下方,写入if (Vector3.Distance(transform.position, swamp) < 3f)。 - 在其中设置
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 在线编辑器