使用EventTrigger来实现
只能检测挂载EventTrigger组件的子对象
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class EventTriggerController : MonoBehaviour
{
void Awake()
{
EventTrigger eventTrigger = gameObject.AddComponent<EventTrigger>();
EventTrigger.TriggerEvent pointerDown = new EventTrigger.TriggerEvent();
EventTrigger.TriggerEvent move = new EventTrigger.TriggerEvent();
EventTrigger.TriggerEvent pointeUp = new EventTrigger.TriggerEvent();
pointerDown.AddListener(OnPointerDown);
move.AddListener(OnMove);
pointeUp.AddListener(OnPointerUp);
eventTrigger.triggers.Add(new EventTrigger.Entry() { eventID = EventTriggerType.PointerDown, callback = pointerDown });
eventTrigger.triggers.Add(new EventTrigger.Entry() { eventID = EventTriggerType.Drag, callback = move });
eventTrigger.triggers.Add(new EventTrigger.Entry() { eventID = EventTriggerType.PointerUp, callback = pointeUp });
}
private void OnPointerDown(BaseEventData eventData)
{
GetRaycastResult((eventData as PointerEventData).position);
}
private void OnMove(BaseEventData eventData)
{
GetRaycastResult((eventData as PointerEventData).position);
}
private void OnPointerUp(BaseEventData eventData)
{
GetRaycastResult((eventData as PointerEventData).position);
}
private List<RaycastResult> GetRaycastResult(Vector2 pos)
{
List<RaycastResult> raycastResults = new List<RaycastResult>();
PointerEventData eventData = new PointerEventData(EventSystem.current);
eventData.position = pos;
EventSystem.current.RaycastAll(eventData, raycastResults);
for (int i = 0; i < raycastResults.Count; i++)
{
Debug.Log($"射线碰到了UI对象:{raycastResults[i].gameObject.name}");
}
return raycastResults;
}
}

示例.jpeg