unity3d 3D UI响应事件点击

场景设置:
在这里插入图片描述对应相机上挂载 Physics Raycaster 组件:
在这里插入图片描述

方法一:OnMouseDown

1.给 UI 加上碰撞体:
在这里插入图片描述2.在 CubeClick 脚本实现 OnMouseDown 函数的:

在这里插入图片描述

方法二: IPointerClickHandler

在这里插入图片描述如果 3D 物体被 UI 遮挡,可以通过 UI 上的控件向下传递事件的方式,实现事件的响应:

UI 物体上实现方法:

 public class UIClick : MonoBehaviour, IPointerClickHandler
 {
        public void OnPointerClick(PointerEventData eventData)
        {
            List<RaycastResult> raycastResults = new List<RaycastResult>();
            
            EventSystem.current.RaycastAll(eventData, raycastResults);

            foreach (var raycastResult in raycastResults)
            {
                if (raycastResult.gameObject != gameObject)
                {
                    ExecuteEvents.Execute(raycastResult.gameObject, eventData, ExecuteEvents.pointerClickHandler);
                }
            }
            Debug.Log("ui click");
        }
}

3D 物体上实现方法:

 public class CubeClick : MonoBehaviour, IPointerClickHandler
    {
        private void OnMouseDown()
        {
            Debug.Log(nameof(OnMouseDown));
        }
        
        public void OnPointerClick(PointerEventData eventData)
        {
            Debug.Log("Cube Click");
        }
 }