KGUI Panel容器實現(xiàn)【區(qū)域內(nèi)判斷】與【左移/右移動作】

?????在項目開發(fā)中,也許我們會遇到這么一個問題? 該坐標點是否在范圍內(nèi)?也會遇到鼠標點在這個范圍內(nèi)是左移?還是右移?等等。

?因為需要這些信息來做滾動,當然不是UGUI自帶的滾動條,而是寫一套新的滾動實現(xiàn)方式或者去寫某個點是否在這個范圍內(nèi)。

?而我將這種需求,定義為一個容器Panel。當鼠標在Panel移入移出,按下左移右移時,傳遞出相應的事件。

?當然我這里將鼠標的光標作為一個點,其實也許是VR手柄或者其他的。

一、區(qū)域內(nèi)判斷

?????要判斷一個點是否在區(qū)域內(nèi),其實非常簡單的,我們只需要將坐標點轉(zhuǎn)化為屏幕坐標,然后區(qū)域內(nèi)Panel,計算出它的中心點以及獲取到它的大小。在將坐標點與這個Panel的坐標點和范圍大小進行比較即可。

?

?對坐標進行比較,記住一定要將坐標轉(zhuǎn)為屏幕坐標進行比較。

二、在區(qū)域內(nèi)移動

?????如何判斷在區(qū)域內(nèi)是否移動?

?????當鼠標移入到區(qū)域內(nèi),執(zhí)行按下操作時,記錄此時鼠標的屏幕坐標,然后每幀判斷,計算下一幀與上一幀的X軸范圍值大小,當范圍值大小大于你所定義的值時,那么就往右移。

?????什么意思呢?

?

?????定義一個可Null類型的float變量,screenX。

?

?在定義一個插值,就是當前值與最初記錄的值打差值大小,當大于這個值或小于這個值的負數(shù)時,則算進行了一次移動操作。

?

?

?????為什么會是差值的負數(shù)?

?????比如我們要獲取到右移這個動作、當鼠標按下時,最初按下的X坐標值為0,當我們往右移動時,X軸是增大的,那么計算出往右移大于10時,那么就算這一次操作滿足了右移動作。這是將此時滿足條件的值,重新賦到最初值中。

?????同理,當我們往左移時,X軸是變小的。所以當往左移小于-10時,這個操作過程算一次左移操作。

?

????完整代碼如上圖所示,完成一次操作則發(fā)送一次事件,這樣注冊這些事件的。注意,上圖的計算是放在Update上每幀運算的。

三、總結

?????Panel容器比較簡單,但是它又不得不介紹,因為它涉及到下一個控件(滾動視圖【ScrollView】)。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容