Raycast 2d 在 Unity3d 中不起作用

Raycast 2d is not working in Unity3d

我是 Unity 的新手,第二天因为简单的光线投射尝试而受阻。这是我用于光线投射的脚本:

void Update () {
    Debug.DrawLine(transform.position, transform.position - transform.up);
    RaycastHit2D[] hits = Physics2D.RaycastAll(transform.position, transform.position - transform.up, Mathf.Infinity);
    if(hits.Length > 0)
    {
        Debug.Log("Hit");
    }
}

我已将此脚本附加到一个正方形,并在它附近放置另一个像目标一样的正方形,还向目标添加了一个 2d 盒子对撞机。我已经禁用了 "hit itself" 功能,如下所述: http://answers.unity3d.com/questions/756380/raycast-ignore-itself.html 执行所有这些步骤后,光线投射什么都没有命中,命中对象的碰撞器始终为空(在调试模式下检查过,控制台中也没有写入任何内容)。我画了一条调试线,它确实像屏幕截图中那样指向目标方块。

请帮我找出我做错了什么。

Physics.Raycast 适用于 3D 碰撞体,包括 Box Collider、Sphere Collider 等。他们的名字中没有二维。

Physics2D.Raycast 用于 2D 碰撞器。您需要一个 Box Collider 2D,因为这是一个 2D 对象的 Sprite 渲染器。

编辑:

根据您的编辑,问题是光线投射的方向太短。你必须将它乘以一个数字。 100的值应该没问题。

public float distance = 100f;

void Update()
{
    Debug.DrawLine(transform.position, transform.position + transform.right);
    RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.position + transform.right * distance, Mathf.Infinity);
    if (hit.collider != null)
    {
        Debug.Log("hit: " + hit.collider.name);
    }
}