如何知道光线是否有东西被击中?

时间:2017-03-06 15:51:40

标签: c# unity3d raycasting

我有一个脚本,我使用一个对象的多个光线投射来检查是否有特定的图层蒙版被击中,我在它们之间使用for循环并且它工作正常。

但问题是:如果其中一条光线被点击boolean将是true,如果"全部"光线没有被击中,boolean将是false。但问题是我不知道如何检查。

for (int i = 0; i < rays; i++) 
{
    Vector2 raysStart = raysStart.topLeft + Vector2.right * (raysSpacing * i);
    RaycastHit2D hit = Physics2D.Raycast (raysStart, Vector2.up, 10, checkMask);

    if (hit)
    {                     
        Debug.DrawLine (raysStart, raysStart + Vector2.up * 10, Color.red);
        boolean= true;
    } 
    else if (!hit)
    {                     
        Debug.DrawLine (raysStart, raysStart + Vector2.up * 10, Color.green);
        boolean= false;
    }
}

我还尝试使用else而没有else if (!hit),但效果相同。

所以有4条射线,如果其中一条射线击中另外三条射线没有击中,所以它总是让我没有击中接受。

如果我在播种时以任何方式击中循环中的最后一条光线,如果你可以告诉我如果4条光线中的一条射线被击中,如果boolean成为true并且如果所有未点击的4条光线变为false

2 个答案:

答案 0 :(得分:2)

根据documentationhit.collider如果没有任何内容,则会null

bool anyHit = false;
for (int i = 0; i < rays; i++) 
{
    Vector2 raysStart = raysStart.topLeft + Vector2.right * (raysSpacing * i);
    RaycastHit2D hit = Physics2D.Raycast (raysStart, Vector2.up, 10, checkMask);
    if (hit.collider != null)
    {
        anyHit = true;
        break; // Don't need to check the rest after we found one hit.
    }
}

答案 1 :(得分:0)

Crusha K. Rool已经回答了正确答案,我找到了另一个答案

boolean= false;

    for (int i = 0; i < rays; i++) 

    {

        Vector2 raysStart = raysStart.topLeft + Vector2.right * (raysSpacing * i);
        RaycastHit2D hit = Physics2D.Raycast (raysStart, Vector2.up, 10, checkMask);

        if (hit)
        {                     
            Debug.DrawLine (raysStart, raysStart + Vector2.up * 10, Color.red);
            boolean= true;
        } 
        else if (!hit)
        {                     
            Debug.DrawLine (raysStart, raysStart + Vector2.up * 10, Color.green);

        }
    }

这里的想法是布尔默认值为false,并且每次调用函数时它都会更新,因此您检查是否命中布尔值是否为真,如果没有命中,则不需要检查其自动返回如果更新功能

,则为false