¿Por qué Debug.DrawRay devuelve estas líneas raras?

Estoy trabajando en una pequeña característica de un juego mobile 2D donde un indicador apunta hacia un object en el espacio 2D. Estoy tratando de hacer que el indicador gire hacia el object, sin embargo, el vector que estoy tratando de build apunta hacia el object está un poco apagado.

Cuando decidí dibujar un rayo de debugging desde la position del indicador hasta la position de los objects, también se desconectó un poco. Entonces decidí dibujar el rayo de debugging al revés, lo que me dio una línea diferente. Si mi comprensión es correcta, si cambia el punto de inicio y el punto final de un rayo, la línea debería permanecer exactamente igual ¿no?

using UnityEngine; using System.Collections.Generic; public class Tracker : MonoBehaviour { public GameObject goToTrack; private List<Renderer> renderers = new List<Renderer>(); void Start(){ foreach (Transform child in transform) { renderers.Add (child.gameObject.GetComponent<Renderer>()); } } void Update () { } void OnGUI(){ Vector3 v3Screen = Camera.main.WorldToViewportPoint(goToTrack.transform.position); // if the target is within the viewable screen the indicator shouldn't be rendenetworking) if (v3Screen.x > -0.01f && v3Screen.x < 1.01f && v3Screen.y > -0.01f && v3Screen.y < 1.01f) { foreach (Renderer renderableObject in renderers) { //renderableObject.enabled = false; } } else { foreach (Renderer renderableObject in renderers) { //renderableObject.enabled = false; } v3Screen.x = Mathf.Clamp (v3Screen.x, 0.01f, 0.99f) -0.04f; v3Screen.y = Mathf.Clamp (v3Screen.y, 0.01f, 0.99f) -0.04f; transform.position = Camera.main.ViewportToWorldPoint (v3Screen); Debug.Log ("Target planet position: " + goToTrack.transform.position.ToString()); Debug.DrawRay(Camera.main.ViewportToWorldPoint (v3Screen), goToTrack.transform.position, Color.networking, 5.0f); Debug.DrawRay(goToTrack.transform.position, Camera.main.ViewportToWorldPoint (v3Screen), Color.green, 5.0f); //Debug.Log ("Tracker angle: " + angle); //transform.Rotate(0,0, angle, Space.Self); } } } 

Salida: Captura de pantalla de los rayos

ACTUALIZACIÓN: Me he dado count de que cuando resta el segundo vector con el primer vector de Debug.DrawRay dibuja el rayo como quiero.

De esto estoy tomando que la function Debug.DrawRay dibuja el segundo vector en la parte superior del primer vector. (algo así como que el primer vector es Vector (0,0,0) y el segundo vector es el rayo real que quieres dibujar)

Estás dibujando Rayos, no Líneas. Esto significa que el segundo parámetro es una dirección, no un punto en el espacio.

https://docs.unity3d.com/ScriptReference/Debug.DrawRay.html

Dibuja una línea desde el start hasta el start + dir en coorderadas mundiales.

Es por eso que sus dos líneas de debugging no son lo mismo. Si desea dibujar líneas, use Debug.DrawLine() lugar.