RTS支持镜头Y轴旋转的圈选框
本文章是对老师视频的补充:


问题分析
创建可视化碰撞箱
1) 创建物体
2) 修改主摄的Camera组件
Projection改成正交的,更明显

2.约定
摄像机x轴旋转值[-90,90]、y轴任意、z轴为0
3.解析y轴旋转时的问题(x轴的旋转不会带来选取问题)
摄像机 Rotatio Y = 45,画出的框对应的box长这样。

解析出现这种问题的几何原理。
细白框即相机视野,白色物体即可视化的box。
从屏幕的左上拖到右下,创建了这么一个物体,给画一下问题。

红蓝矩形都是由start作为左上角,end作为右下角的矩形。
当镜头旋转了以后,Unity对你输入的start,end的解释输出是
创建=>宽为end.x-start-x,长为start.x-end.x的矩形
但我们实际想要的确实蓝色,那么要做的事情就很明显了,要进行几何转化。


这个稿子在我手里好久了(顶部视频发布日),现在(发帖日)才有空继续,没法拿出当时的代码够咩喵。
这里使用的破局方法是点到直线距离。
我们是已知点(start、end)和相对旋转(镜头y旋转)的。
这里我们自己写一个直线类(代码放最后),他可以通过一点加斜率构建直线,并且可以返回点到直线距离。
这样我们就可以通过 点:start,倾斜角90 - angle、180-angle来求得halfsize参数的值。
然后使用colliders = Physics.OverlapBox(center, halfSize, Quaternion.Euler(0, angle, 0));
就可以正确的碰撞对象了。

还有,要排除斜率不存在和算法上带来的疑惑,要对90度和180度做单独处理。
180°是对90°的先运算,%90==0的数字%180必然==0,整180度的镜头旋转按唐老师的来就可以了。
而整90°而不整180°的角,可以简单的将“宽为end.x-start-x,长为start.x-end.x的矩形”
改为“长为end.x-start-x,宽为start.x-end.x的矩形”