Si un punto en el espacio es restado de otro entonces el resultado es un vector que “apunta” de un objeto al otro.
// Gets a vector that points from the player's position to the target's.
var heading = target.position - player.position;
Además de apuntar en la dirección del objeto de destino, la magnitud de este vector es igual a la distancia entre las dos posiciones. Es común necesitar un vector normalizado dando la dirección al objeto destino y también la distancia al objeto destino (digamos para direccionar un proyectil). La distancia entre los objetos es igual a la magnitud del vector en cabeza y este vector puede ser normalizado dividiéndolo por su magnitud:-
var distance = heading.magnitude;
var direction = heading / distance; // This is now the normalized direction.
Este acercamiento es preferible para utilizar ambas propiedades de magnitud y normales separadamente, ya que ambas son bastante “hambrientas” en CPU (ambas involucran calcular una raíz cuadrada).
Si usted solo necesita utilizar la distancia para comparación (para una revisión aproximada, digamos) entonces usted puede evitar los cálculos de magnitud todo juntos. La propiedad sqrMagnitud da el cuadrado del valor de la magnitud, y está calculado como la magnitud pero sin la operación que toma tiempo de la raíz cuadrada. En vez de comparar la magnitud contra una distancia conocida, usted puede compara la magnitud cuadrada contra la distancia cuadrada:-
if (heading.sqrMagnitude < maxRange * maxRange) {
// Target is within range.
}
Esto es más eficiente que utilizar magnitud verdadera en la comparación.
Algunas veces, la superficie yendo hacia un objetivo es requerida. Por ejemplo, imagine un jugador parándose en la superficie quién necesita acercarse a un objeto flotando en el aire. Si usted resta la posición del jugador desde la del objeto, entonces el vector resultante va a apuntar hacia arriba del objeto. Esto no es adecuado para orientar el transform del jugador ya que él va a también apuntar hacia arriba; lo que realmente se necesita es un vector desde la posición del jugador en el suelo directamente debajo del objeto. Esto es fácilmente obtenido tomando el resultado de la resta y ajustando la coordenada Y a cero:-
var heading = target.position - player.position;
heading.y = 0; // This is the overground heading.