角色坐在角落时出现Unity Raycast2D问题

时间:2019-04-01 09:33:50

标签: c# unity3d raycasting

嗨,我对Raycast2D有问题。当角色坐在平台上(如图像上)时,Raycast2D无法正常工作。我已经尝试了Raycast和RaycastAll。当角色在拐角处时,如何检测角色下方的平台?

https://imgur.com/z7VMRq5

    if(Input.GetMouseButton(0))
    {
        RaycastHit2D[] hit = Physics2D.RaycastAll(transform.position, -Vector2.up, 2f, layerMask);
        if(hit[0].collider != null)
        {
            Destroy(hit[0].collider.gameObject);
        }
    }

1 个答案:

答案 0 :(得分:1)

1)使用多个射线广播

在您的代码中,只有当玩家的中心位于平台上方时,游戏才会检测到平台。要始终检测平台,您应该在角色对撞机的边界使用两个射线广播。

void Update()
{
    // Cast the rays
    castRays(transform.localScale.x / 2f);
}

private void castRays(float distanceFromCenter)
{
    // Return if the ray on the left hit something
    if(castRay(new Vector2(-distanceFromCenter, 0f) == true) { return; }
    // Return if the ray on the right hit something
    else if(castRay(new Vector2(distanceFromCenter, 0f) == true) { return; }
}


private bool castRay(Vector2 offset)
{
    RaycastHit2D hit; // Stores the result of the raycast

    // Cast the ray and store the result in hit
    hit = Physics2D.Raycast(transform.position + offset, -Vector2.up, 2f, layerMask);

    // If the ray hit a collider...
    if(hit.collider != null)
    {
        // Destroy it
        Destroy(hit.collider.gameObject);

        // Return true      
        return true;
    }

    // Else, return false
    return false;
}

可选:如果平台比播放器小,或者出于安全考虑,您可以在中心重新包含光线。

2)使用触发器

在字符的脚下放置BoxCollider2D,并将'isTrigger'设置为true。当它进入另一个对撞机时,它将称为“ OnTriggerEnter2D”。

void OnTriggerEnter2D(Collider2D other)
{
    Destroy(other.gameObject);
}