问题: 判断鼠标是否在ui上用的最多的就是EventSystem.current.IsPointerOverGameObject()了,但是当鼠标点击到有碰撞体的对象的时候,这个方法返回的也是true,用来判断在ui上就有问题了。
解决:在EventSystem.current.IsPointerOverGameObject()中添加射线判断,射线正常情况下不会触发ui。
if (EventSystem.current.IsPointerOverGameObject())
{
//进入条件:要么鼠标在有碰撞体的模型上,要么在ui上
ray = mCamera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
//进入条件:鼠标在有碰撞体的模型上
if (hit.collider.gameObject.layer != LayerMask.NameToLayer("UI"))
mBIsControl = true;
}
else
{
//否则:鼠标在ui上
}
}
文章讨论了在Unity中使用EventSystem.current.IsPointerOverGameObject()判断鼠标是否在UI上的常见问题,即当鼠标点击到带有碰撞体的游戏对象时,该方法也会返回true。为了解决这个问题,作者提出了添加射线判断的解决方案,通过Physics.Raycast检测鼠标是否落在非UI的碰撞体上,从而更准确地区分鼠标是在UI上还是在模型上。
2616

被折叠的 条评论
为什么被折叠?



