Unity-EventSystem和射线检测

  • Post author:
  • Post category:其他


IsPointerOverGameObject:

判断鼠标或者手指是否悬停在UI上。

注意:

1.默认参数为-1,为鼠标,如果想判断手指的话,需要入参为fingerId

2.如果场景中添加了PhysicsRaycaster这个组件的话,那么3D对象也可以被检测到

EventSystem.current.IsPointerOverGameObject();

currentSelectedGameObject

获取到被点击的UI的信息

注意:需要点击到button等有点击事件的对象,image无法获取到点击事件

EventSystem.current.currentSelectedGameObject

射线检测UI方式一:

PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
List<RaycastResult> results = new List<RaycastResult>();
EventSystem.current.RaycastAll(eventDataCurrentPosition, results);

射线检测UI方式二:

using UnityEngine.EventSystems;
using UnityEngine.UI;

public GraphicRaycaster graphicRaycaster;

// 代码逻辑
PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
List<RaycastResult> results = new List<RaycastResult>();
graphicRaycaster.Raycast(eventDataCurrentPosition, results);

射线检测对象:

float maxDistance = 1000;
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, maxDistance, LayerMask.GetMask("需要检测的层级")))
{
    // 执行检测到对象后需要执行的逻辑
}



版权声明:本文为qq_33808037原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。