问题
项目中需要让模型可以点击,再使用的时候发现当模型被ui遮挡以后,点击ui的时候,模型能被触发点击事件,造成不必要的麻烦.
方案一
EventSystem.current.IsPointerOverGameObject()
通过查询发现unity其实给与了一个解决这种冲突的函数,能够让我们知道当前点击是否点击在了ui之上.所以直接上手测试.悲催的是使用该方法在pc端能够正常检测,一旦到了移动端就毫无反应,包括此函数的另外一个变种给定触摸触发的id号
无奈只好放弃此种方法
方案二
通过EventSystem 发射射线 通过射线的碰撞结果来检测是否点击到UI
public bool IsPointerOverUIObject(Vector2 screenPosition)
{
PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
eventDataCurrentPosition.position = new Vector2(screenPosition.x, screenPosition.y);
List<RaycastResult> results = new List<RaycastResult>();
EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
return results.Count > 0;
}
在使用时调用这个函数搞定在点击在UI上的检测,打完收工
网友评论