将空间的一个点与另一个点相减,所得结果为从一个对象“指向”另一个对象的向量。
// 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