欢迎光临散文网 会员登陆 & 注册

RTS支持镜头Y轴旋转的圈选框

2023-04-23 22:30 作者:莫末陌寞  | 我要投稿

本文章是对老师视频的补充:

问题分析

  1. 创建可视化碰撞箱

    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的矩形”


RTS支持镜头Y轴旋转的圈选框的评论 (共 条)

分享到微博请遵守国家法律