问题: 判断鼠标是否在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上
}
}