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

Posted 小星河丨U3D开发支持

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity精华☀️UI和物体可见性的判断方法相关的知识,希望对你有一定的参考价值。

文章目录


🟥 判断UI的可见性

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

    /// <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;
    



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

    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包围盒内

在范围内,即可见。

    /// <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);
    





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



如果你有 技术的问题 项目开发

都可以加下方联系方式

和我聊一聊你的故事🧡

以上是关于Unity精华☀️UI和物体可见性的判断方法的主要内容,如果未能解决你的问题,请参考以下文章

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

Unity精华☀️GetInstanceID 和 GetHashCode 的区别

Unity精华☀️GetInstanceID 和 GetHashCode 的区别

小功能⭐️Unity获取点击到的UI

小功能⭐️Unity获取点击到的UI

小功能⭐️Unity 如何判断物体是否在摄像机视野内或外