为了账号安全,请及时绑定邮箱和手机立即绑定

unity Raycast2D 角色坐在角落时的问题

unity Raycast2D 角色坐在角落时的问题

Go
忽然笑 2022-11-21 20:12:08
您好,我对 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 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

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)使用触发器

将 aBoxCollider2D放在角色的脚下并将“isTrigger”设置为 true。当它进入另一个碰撞器时,它将调用“OnTriggerEnter2D”。


void OnTriggerEnter2D(Collider2D other)

{

    Destroy(other.gameObject);

}


查看完整回答
反对 回复 2022-11-21
  • 1 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号