unity防止ui点击事件被子物体拦截

实现脚本

using UnityEngine;
using UnityEngine.EventSystems;

public class EventTriggerListener : EventTrigger
{
    public delegate void VoidDelegate(GameObject go);
    public VoidDelegate onClick;
    public VoidDelegate onDown;
    public VoidDelegate onEnter;
    public VoidDelegate onExit;
    public VoidDelegate onUp;
    public VoidDelegate onSelect;
    public VoidDelegate onUpdateSelect;
    public VoidDelegate onDrag;
    public VoidDelegate onDrop;
    public VoidDelegate onDeselect;
    public VoidDelegate onScroll;
    public VoidDelegate onMove;
    public VoidDelegate onInitializePotentialDrag;
    public VoidDelegate onBeginDrag;
    public VoidDelegate onEndDrag;
    public VoidDelegate onSubmit;
    public VoidDelegate onCancel;

    public override void OnPointerClick(PointerEventData eventData)
    {
        if (onClick != null) onClick(gameObject);
    }
    public override void OnPointerDown(PointerEventData eventData)
    {
        if (onDown != null) onDown(gameObject);
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        if (onEnter != null) onEnter(gameObject);
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        if (onExit != null) onExit(gameObject);
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        if (onUp != null) onUp(gameObject);
    }
    public override void OnSelect(BaseEventData eventData)
    {
        if (onSelect != null) onSelect(gameObject);
    }
    public override void OnUpdateSelected(BaseEventData eventData)
    {
        if (onUpdateSelect != null) onUpdateSelect(gameObject);
    }

    public override void OnDrag(PointerEventData eventData)
    {
        if (onDrag != null) onDrag(gameObject);
    }

    public override void OnDrop(PointerEventData eventData)
    {
        if (onDrop != null) onDrop(gameObject);
    }

    public override void OnDeselect(BaseEventData eventData)
    {
        if (onDeselect != null) onDeselect(gameObject);
    }

    public override void OnScroll(PointerEventData eventData)
    {
        if (onScroll != null) onScroll(gameObject);
    }

    public override void OnMove(AxisEventData eventData)
    {
        if (onMove != null) onMove(gameObject);
    }

    public override void OnInitializePotentialDrag(PointerEventData eventData)
    {
        if (onInitializePotentialDrag != null) onInitializePotentialDrag(gameObject);
    }

    public override void OnBeginDrag(PointerEventData eventData)
    {
        if (onBeginDrag != null) onBeginDrag(gameObject);
    }

    public override void OnEndDrag(PointerEventData eventData)
    {
        if (onEndDrag != null) onEndDrag(gameObject);
    }

    public override void OnSubmit(BaseEventData eventData)
    {
        if (onSubmit != null) onSubmit(gameObject);
    }

    public override void OnCancel(BaseEventData eventData)
    {
        if (onCancel != null) onCancel(gameObject);
    }

    /// <summary>
    /// 获取或添加一个事件侦听器到指定的游戏对象。用法和NGUI一样
    /// </summary>

    public static EventTriggerListener Get(GameObject go)
    {
        EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
        if (listener == null) listener = go.AddComponent<EventTriggerListener>();
        return listener;
    }

}

物体挂载脚本示例

using UnityEngine;
using UnityEngine.UI;

public class TestScripts : MonoBehaviour
{
    void Start()
    {
        //添加点击事件
        Graphic horizontalGraphic = gameObject.GetComponent<Graphic>();
        if (horizontalGraphic != null && horizontalGraphic.raycastTarget)
        {
            EventTriggerListener.Get(gameObject).onClick = EvenOnClick;
        }
    }

    private void EvenOnClick(GameObject obj)
    {
        Debug.Log("===name===" + gameObject.name);
    }
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一款强大的游戏开发引擎,它不仅可以用于开发游戏,还可以用于创建各种交互式应用程序。在Unity中,我们可以使用UI界面展示3D物体。 首先,我们需要在Unity中创建一个UI界面。可以通过在层次视图中创建一个空的Canvas对象来实现,然后在该Canvas对象下创建一个Image对象。可以选择一个合适的背景图片或颜色来作为Image对象的背景。 然后,我们需要将要展示的3D物体添加到UI界面中。可以通过在层次视图中创建一个空的GameObject对象,并将其作为Image对象的子物体。然后,在该GameObject上添加3D物体的模型组件,例如Mesh Renderer和Collider组件。还可以为该GameObject添加其他脚本组件,以实现特定的功能或交互效果。 接下来,我们需要将3D物体UI界面中进行适当的定位和缩放。可以通过调整该GameObject的Transform属性来实现。可以使用Position属性来设置物体界面上的位置,使用Scale属性来设置物体的大小和比例。 最后,我们可以通过添加和调整UI界面上的其他元素,例如按钮、文本框等,来进一步扩展和美化UI界面。可以使用Unity提供的UI组件来快速创建这些元素,并设置其属性和样式。 在编写代码时,可以通过UI界面上的按钮或其他交互元素来实现对3D物体的操作和控制。可以通过监听按钮的点击事件或其他用户输入事件,来调用相应的函数或方法来实现特定的行为。 总而言之,Unity提供了丰富的功能和工具,使得我们可以在UI界面中展示3D物体。通过合理地使用UnityUI系统和具体的编程技巧,我们可以创造出各种炫酷的用户界面,并将3D物体集成到其中,提供更加丰富和互动的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值