Raycast 2d在Unity3d中不起作用

时间:2017-09-21 17:22:47

标签: c# unity3d unity5 unity3d-2dtools

我是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的盒子对撞机。我已经禁用了“点击自己”功能,如下所述: http://answers.unity3d.com/questions/756380/raycast-ignore-itself.html 执行所有这些步骤后,光线投射不会发生任何事情,命中对象的对撞机始终为空(在调试模式下检查此项,在控制台中也没有任何内容)。我绘制了一个调试行,实际上它指向了截图中的目标方块。 enter image description here enter image description here

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

1 个答案:

答案 0 :(得分:1)

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

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

修改

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