[Unity]射线的简单应用和对UGUI的检测

最近做的小游戏,需要通过触屏来控制移动,主要做法就是在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系列

posted @ 2020-05-25 22:21  wayneWy  阅读(2524)  评论(0编辑  收藏  举报