前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity精华☀️UI和物体可见性的判断方法

Unity精华☀️UI和物体可见性的判断方法

作者头像
星河造梦坊官方
发布2024-08-15 20:09:29
700
发布2024-08-15 20:09:29
举报
文章被收录于专栏:星河造梦坊专栏

🟥 判断UI的可见性

该方法适用于3D Canvas, 和 2D且赋值了相机的Canvas。 不适合2D没有赋值相机的Canvas。

代码语言:javascript
复制
    /// <summary>
    /// 判断ui是否能被cam可见
    /// </summary>
    public bool GetUIVisable(Camera cam, RectTransform ui)
    {
        bool value = true;

        Vector3 pos = cam.WorldToScreenPoint(ui.position);
        if (pos.z < 0 || pos.x < 0 || pos.x > Screen.width || pos.y < 0 || pos.y > Screen.height)
            value = false;

        return value;
    }

🟧 判断物体中心点的可见性

代码语言:javascript
复制
    public bool GetObjCenterVisable(Camera cam, Transform obj)
    {
        //转化为视角坐标
        Vector3 viewPos = cam.WorldToViewportPoint(obj.position);

        //  z<0代表在相机背后
        if (viewPos.z < 0)
            return false;

        //  距离farClipPlane太远,摄像机看不到了
        if (viewPos.z > cam.farClipPlane)
            return false;

        //  x,y取值在 0~1之外时代表在视角范围外
        if (viewPos.x < 0 || viewPos.y < 0 || viewPos.x > 1 || viewPos.y > 1)
            return false;

        return true;
    }

🟨 判断物体包围盒是否在Camera包围盒内

在范围内,即可见。

代码语言:javascript
复制
    /// <summary>
    /// 相机包围盒
    /// </summary>
    private Plane[] _mTempCameraPlanes = new Plane[6];

    private void Update()
    {
        //使用方法;
        print(GetBondsVisable(transform.position, GetComponent<BoxCollider>().size));
    }

    private void LateUpdate()
    {
        //调用Unity的API,获取相机包围盒
        GeometryUtility.CalculateFrustumPlanes(Camera.main, _mTempCameraPlanes);
    }

    /// <summary>
    /// 通过相机包围盒来判定物体是否在视野中。
    /// </summary>
    public bool GetBondsVisable(Vector3 center, Vector3 size)
    {
        Bounds bound = new Bounds(center, size); //这里的Size是半径
        return GeometryUtility.TestPlanesAABB(_mTempCameraPlanes, bound);
    }

大家还有什么问题,欢迎在下方留言!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🟥 判断UI的可见性
  • 🟧 判断物体中心点的可见性
  • 🟨 判断物体包围盒是否在Camera包围盒内
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档