最近做的小游戲,需要通過觸屏來控制移動,主要做法就是在Update中檢測Input.TouchCount,但是問題是會蓋住UGUI的Button事件,第一時間想到射線檢測
常用射線
Unity有射線類Ray和Physics.Raycast()Physics.Linecast()等,他提供強大的API,主要可以從某點發射射線,包括給射線長度和在哪一層檢測(LayerMask)
通常的應用就是鼠標點擊位置發射射線,對碰到的第一個物體做出反應(FPS游戲)
或者以角色為中心,向一個方向發射射線檢測是否在邊緣或者是否在地面上(比如向下發射一個很短的射線,如果碰到了地面則表示角色處於地面上而非落下或者跳起狀態)
但是這種射線要求被檢測物體必須有碰撞器(Collider)
UGUI的檢測
所以當想要用射線對UGUI檢測時,必須給UGUI綁定碰撞器
而除了加碰撞器外,還可以利用UGUI的EventSystem檢測
EventSystem.current.IsPointerOverGameObject();//此方法返回bool值
(如果檢測觸摸Input.Touch,參數傳入Input.GetTouch(0).fingerId)
此方法可以判斷是否點擊到了UI,但是被檢測UI必須勾選RayCast Target
當然還有很多檢測方法,比如重載Unity的一些接口如IPointerXXX系列