Unity 场景中不同分辨率下相机可滑动边界问题

场景相机可滑动的边界

在这里插入图片描述
如图,我希望把相机左右移动来查看全部场景的内容,但是在移动过程中又不能超过场景的边界,这个时候我们需要设置相机的边界值,我一开始想到的方式是给定两边一个一值,移动的时候判断相机的X坐标在不在设定的范围之内。这样做法是有问题的,比如我当前的设置的分辨是19201080相机移动的边界刚刚好,
在这里插入图片描述
当我的分辨率和我的标准分辨不一样的时候问题就出现了比如这样的情况:分辨率 :2160
1080
在这里插入图片描述
你会发现相机的的可视范围超过了场景范围,在这里插入图片描述
因为我们是不改变相机和场景的距离和相机的视图夹角,所以就需要算出当前分辨率和标准分辨率下他们之间X的偏移的差值。在计算差值过程中,又碰到了一个问题,因为相机的高度和宽度都会影响到这个偏移的值。也是有两个变量。我们需要先算一个值,在算计另一个值。只恨高中数学没有学好。找不出合理的方程式。

另辟捷径

思考了好几天,之前都在想计算偏移的方程式,在一个谈论到射线检测中,突发奇想:我可以在场景中加入两个临界的碰撞体,判断这两个碰撞体在不在相机范围内就可以了,如果在相机范围内,则相机就移动到了边界。
在这里插入图片描述
检测代码

    // 是否超过了场景的边界
    public bool IsExceedSceneBoundary()
    {
        GameObject go = GameObject.Find("CJ/Colliders/Buildings/you");
        GameObject go1 = GameObject.Find("CJ/Colliders/Buildings/zuo");
        if (go == null || go1 == null)
        {
            return true;
        }

        Vector3 tmp = TPCamera.instance.mainUICamera.WorldToScreenPoint(go.transform.position);
        if (tmp.x > 0 && tmp.x < Screen.width)
        {
            return true;
        }

        Vector3 tmp1 = TPCamera.instance.mainUICamera.WorldToScreenPoint(go1.transform.position);
        if (tmp1.x > 0 && tmp1.x < Screen.width)
        {
            return true;
        }
        return false;
    }

使用向量的点剩

点乘公式
在这里插入图片描述
在这里插入图片描述
取边界点的法向量和相机的法向量,根据公式算出夹角,在和相机的视角比较,也能判断边界。

发布了37 篇原创文章 · 获赞 11 · 访问量 6161

猜你喜欢

转载自blog.csdn.net/weixin_42422809/article/details/103903747
今日推荐