首页 文章

Raycast 2d在Unity3d中不起作用

提问于
浏览
0

我是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执行完所有这些步骤后,光线投射没有任何内容,命中对象的对撞机始终为空(在调试模式下检查此项,也没有在控制台中写入任何内容) . 我绘制了一个调试行,实际上它指向了截图中的目标方块 .
enter image description here

enter image description here

请帮我弄清楚我做错了什么 .

1 回答

  • 1

    Physics.Raycast 适用于3D碰撞器,包括Box Collider,Sphere Collider等 . 他们的名字没有2D .

    Physics2D.Raycast 适用于2D对撞机 . 你需要一个Box Collider 2D,因为这是一个Sprite渲染器,它是一个2D对象 .

    EDIT

    通过编辑,问题在于光线投射的方向太短 . 你必须乘以一个数字 . 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);
        }
    }
    

相关问题