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");
        }
 }
经验分享 程序员 微信小程序 职场和发展