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

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

// 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.

Page last updated: 2013-06-27