Unity判断物体是否被某个相机可见

第一种方式:

将物体的世界坐标转换为视口坐标(Viewport Coordinates),得到的坐标值会在[0,1]的范围内,表示物体在相机视口中的位置。如果物体的位置在这个范围内,就说明它被相机看到了。

public bool ObjectVisible(Camera camera, GameObject obj)
    {
        //将物体的世界坐标转换为视口坐标
        Vector3 viewportPosition = camera.WorldToViewportPoint(obj.transform.position);
        //如果视口坐标在[0,1]的范围内,表示可以被相机看到
        if (viewportPosition.x > 0 && viewportPosition.x < 1 && viewportPosition.y > 0 && viewportPosition.y < 1 && viewportPosition.z > 0)
        {
            return true;
        }       
          return false;        
    }

第二种方式:

判断物体是否完全在相机的视锥体内,可以使用相机的GeometryUtility.TestPlanesAABB()方法,该方法可以检测一个AABB包围盒(即物体的边界框)是否在视锥体内,返回一个bool值。如果返回值为true,则表示物体完全在视锥体内;如果返回值为false,则表示物体不在视锥体内。

 public bool ObjectVisible(Camera camera, GameObject obj)
    {
        Bounds bounds = obj.GetComponent<Renderer>().bounds;
        //GeometryUtility.TestPlanesAABB()方法,该方法可以检测一个AABB包围盒(即物体的边界框)是否在视锥体内,
        //返回一个bool值。如果返回值为true,则表示物体在视锥体内;如果返回值为false,则表示物体不在视锥体内。
        return GeometryUtility.TestPlanesAABB(GeometryUtility.CalculateFrustumPlanes(camera), bounds);       
    }

在Update中调用该方法。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值