(039)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");
        }
 }       

问题:给子组件添加 Canvas 组件后,点击事件不响应?

  1. 可能原因一:子Canvas上需要有 Graphic Raycaster 组件,以确保可以接收输入事件。
    在这里插入图片描述
  2. 可能原因二:UI被反转了180度。
    在这里插入图片描述
    解决:
    在这里插入图片描述

附录

[1] 01_Unity事件函数OnMouseDown生效条件

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值