RTS支持鏡頭Y軸旋轉(zhuǎn)的圈選框
本文章是對(duì)老師視頻的補(bǔ)充:


問題分析
創(chuàng)建可視化碰撞箱
1) 創(chuàng)建物體
????? 2) 修改主攝的Camera組件
?????????Projection改成正交的,更明顯

2.約定
????攝像機(jī)x軸旋轉(zhuǎn)值[-90,90]、y軸任意、z軸為0
3.解析y軸旋轉(zhuǎn)時(shí)的問題(x軸的旋轉(zhuǎn)不會(huì)帶來選取問題)
????攝像機(jī) Rotatio Y = 45,畫出的框?qū)?yīng)的box長這樣。

??? 解析出現(xiàn)這種問題的幾何原理。
????細(xì)白框即相機(jī)視野,白色物體即可視化的box。
????從屏幕的左上拖到右下,創(chuàng)建了這么一個(gè)物體,給畫一下問題。

紅藍(lán)矩形都是由start作為左上角,end作為右下角的矩形。
當(dāng)鏡頭旋轉(zhuǎn)了以后,Unity對(duì)你輸入的start,end的解釋輸出是
????創(chuàng)建=>寬為end.x-start-x,長為start.x-end.x的矩形
但我們實(shí)際想要的確實(shí)藍(lán)色,那么要做的事情就很明顯了,要進(jìn)行幾何轉(zhuǎn)化。


這個(gè)稿子在我手里好久了(頂部視頻發(fā)布日),現(xiàn)在(發(fā)帖日)才有空繼續(xù),沒法拿出當(dāng)時(shí)的代碼夠咩喵。
這里使用的破局方法是點(diǎn)到直線距離。
我們是已知點(diǎn)(start、end)和相對(duì)旋轉(zhuǎn)(鏡頭y旋轉(zhuǎn))的。
這里我們自己寫一個(gè)直線類(代碼放最后),他可以通過一點(diǎn)加斜率構(gòu)建直線,并且可以返回點(diǎn)到直線距離。
這樣我們就可以通過 點(diǎn):start,傾斜角90 - angle、180-angle來求得halfsize參數(shù)的值。
然后使用colliders = Physics.OverlapBox(center, halfSize, Quaternion.Euler(0, angle, 0));
就可以正確的碰撞對(duì)象了。

還有,要排除斜率不存在和算法上帶來的疑惑,要對(duì)90度和180度做單獨(dú)處理。
180°是對(duì)90°的先運(yùn)算,%90==0的數(shù)字%180必然==0,整180度的鏡頭旋轉(zhuǎn)按唐老師的來就可以了。
而整90°而不整180°的角,可以簡單的將“寬為end.x-start-x,長為start.x-end.x的矩形”
改為“長為end.x-start-x,寬為start.x-end.x的矩形”