射线广播未击中物体

时间:2019-07-02 19:29:16

标签: c# unity3d

这就像是马里奥游戏。玩家跳来跳去,必须收集一些物品。

问题是我的光线没有与项目框碰撞器碰撞。

我需要射线知道,所以我可以销毁玩家碰撞的正确物品。

void OnCollisionEnter2D(Collision2D colisor)
{
    if((colisor.gameObject.name == "floor" || colisor.gameObject.name == "floor2" || colisor.gameObject.name == "floor3"))
    {
        anim.SetBool("jump", false);
        anim.SetFloat("speed", 0);
    }

    if (colisor.gameObject.name == "space(Clone)")
    {
        RaycastHit hit;
        Ray ray = new Ray(player.position, transform.right);
        Debug.Log("hit1");

        if (Physics.Raycast(ray, out hit))
        {
            BoxCollider bc2d = hit.collider as BoxCollider;
            Debug.Log("hit2");

            if (bc2d != null)
            {
                Destroy(bc2d.gameObject);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您正在混合3d和2d物理; Physics只会查找3d对象,因此您应该改用Physics2D。如果投射开始于目标内部,则此射线投射仍可能失败,因为表面法线指向错误的方向。

还请注意,由于您已经拥有Collision2D,因此您只需抓住otherCollider,就不必首先进行射线广播。

答案 1 :(得分:0)

Physics.Raycast不适用于2D对象。相反,您需要使用Physics2D.RaycastGraphic Raycaster

Raycast2D-https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html

图形Raycaster-https://docs.unity3d.com/eng/current/Manual/script-GraphicRaycaster.html