在做背包物品的拖動,以及技能快捷鍵的拖動設置時,都涉及到了針對UI的射線穿透問題.在處理這兩個應用場景時,我采用了不同的UI射線穿透方式.
方法一
主要是用到了 IsRaycastLocationValid(Vector2 sp, Camera eventCamera)
這個函數.具體的介紹請移步官網.
一句話介紹它的主要功能,是用來設置當前腳本所對應的UI是否被射線檢測. 因為我針對背包物品拖動所寫的腳本是綁定在物品自身的,所以這個函數就很適用啦.
當然,它的主要應用場景不是這個.最常見的是針對不規則圖片,以及疊加的圖片.下面有兩個博文介紹:
針對疊加圖片
針對不規則圖形
方法二
當你想要拖動的UI圖形不是當前腳本所綁定的物體時,該怎么辦? 除了重寫腳本之外,我們還可以使用 CanvasGroup
組件來控制射線穿透.CanvasGroup
的具體介紹也請移步官網.
CanvasGroup
下的 Block Raycasts
可以用來控制組件對應物體的所有子物體是否被射線穿透.當然,因為它的威力太大,所以最好是用一個不帶任何子物體的空物體管理,需要時我們再把UI綁定到該空物體上.
反思
以上是我在學習過程中總結的一點經驗.學得越深入,越發現其實所有的問題都是很簡單的.比如以上的應用場景,說白了就是針對射線穿透的控制.如果能對API很熟悉,甚至對原理也十分了解,那么解決這種問題就不在話下了.