RaycastHit2D的隐式转化

在学习Unity官方平台提供的ML-Agents强化学习示例时遇到了一个问题,以前没有注意过,记录一下。

ML-Agents强化学习示例:ML-Agents强化学习示例

在这个示例中,笔者在PlatformerAgent.cs中给出了一个IsGrounded的方法来判断主角是否站在地面上,代码如下:

public bool IsGrounded(Vector2 position)
    {
        Vector2 adjustedPosition = new Vector2(position.x, position.y + .5f);
        Vector2 direction = -Vector2.up;
        LayerMask layerMask = 1 << 31;
        RaycastHit2D grounded = Physics2D.Raycast(adjustedPosition, direction, 1f, layerMask);

        return grounded;
    }

在这个场景中,笔者将地面的layer设为了第31层,所以使用了layerMask = 1 << 31来指定Ground的layer。再往下看我就不太明白了,获得的grounded变量是RaycastHit2D类型,但是却能作为bool类型的返回值。到RaycastHit2D的声明中找到了这样一句话

 public static implicit operator bool(RaycastHit2D hit);

继续在网上查找资料后找到了git中一个unity反编译的工程:unity-decompiled

其中RaycastHit2D.cs中有这样一段

public static implicit operator bool(RaycastHit2D hit)  {  

    return (Object) hit.collider != (Object) null;  

}

所以RaycastHit2D重载了bool运算,做了隐式转换。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值