Debug.DrawRay() 在 Unity2D 中指向错误的方向

Debug.DrawRay() pointing to wrong direction in Unity2D

我正在尝试学习如何在 Unity2D 中进行 Raycast。

这是我的代码:

Ray ray;
void Update()
{
    ray = new Ray(transform.position, Input.mousePosition);
    Debug.DrawRay(transform.position,Input.mousePosition);
}

这会导致奇怪的行为。
transform.position是player对象的Vector3。

我想通过鼠标位置从玩家对象发射光线。

然而,这似乎不起作用。

线条已绘制,但表现异常。它根本不指向它。很难准确地将其行为描述为不稳定以外的任何行为。

我做错了什么?

我认为输入 Input.mousePosition 和一般说明可能有问题。如果您能提供任何帮助,我将不胜感激。

注意:我使用的是Unity 2D。

当您使用 Input.mousePosition 时,您会得到一个 Vector2,它表示鼠标相对于相机的位置。这意味着你得到的X和Y实际上是鼠标在屏幕上的位置的X和Y。

这些坐标不是世界坐标。

例如,如果您要从站在 0,0,0 的玩家的 transform.position 绘制一条射线到 500, 250 的鼠标位置,您会得到一条巨大且看似随机指向的射线.

将鼠标在屏幕上的位置(屏幕坐标)转换为它在游戏中指向的位置(世界坐标)you can use Camera.ScreenToWorldPoint

例如

Ray ray;
void Update()
{
    // get the mouse screen pos
    Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y);
    
    // convert it
    Vector3 worldMousePosition = Camera.Main.ScreenToWorldPoint(mousePosition);

    ray = new Ray(transform.position, );
    Debug.DrawRay(transform.position, worldMousePosition);
}