返回介绍

从一个对象到另一个对象的方向和距离

发布于 2021-06-19 18:03:25 字数 988 浏览 942 评论 0 收藏 0

将空间的一个点与另一个点相减,所得结果为从一个对象“指向”另一个对象的向量。

// Gets a vector that points from the player's position to the target's.
var heading = target.position - player.position;

此向量指向目标对象方向,其量值等于两点之间的距离。这通常需要使用单位向量来指示其与目标的方向和距离(如抛射子弹)。对象之间的距离等于指向向量的量值,将该向量除以自身量值即为单位向量:

var distance = heading.magnitude;
var direction = heading / distance;  // This is now the normalized direction.

最好不要将此方法同时用于量值和单位化属性,因为这两者都会占用很大的 CPU(两者都需要计算平方根)。

如果只需比较距离(如执行大致检查),则完全无需计算量值。sqrMagnitude 属性将计算量值的平方值,计算方法与量值相似,但无需消耗时间计算平方根。这样,就可以比较量值的平方值与距离的平方值,而非量值和已知的距离:

if (heading.sqrMagnitude < maxRange * maxRange) {
	// Target is within range.
}

相对于比较真实的量值,此方法效率更高。

有时候,我们需要计算地上的点与目标之间的距离。例如,想象一名站在地上的玩家需要碰到悬浮在空中的目标。如果将目标位置与玩家位置的坐标值相减,则结果向量将向上指向目标。此变换不适合为此玩家定向,因为他也将指向上方;真正需要的是一个从玩家位置指向目标正下方的地面位置的向量。只需将 Y 轴坐标设为 0,再将两个向量相减即可计算出两者的距离:-

var heading = target.position - player.position;
heading.y = 0;	// This is the overground heading.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文