首页 > 解决方案 > 如何统一禁用/启用特定的 EventTrigger

问题描述

我有一个附加到图像的 5 个 EventTrigger。有
“开始拖动”、“拖动”、“结束拖动”、“指针回车”。"指针退出"

喜欢这张图片

在此处输入图像描述



我可以一次禁用所有这些

eventTrigger.enabled = false;

但是我想要实现的只是禁用“开始拖动”事件。
有谁知道该怎么做?

标签: c#unity3d

解决方案


UIDragableScript而是插上一面旗帜。

public bool allowBeginDrag; 

设置布尔值。

indicatorWidgetObject.GetComponent<UIDragableScript>().allowBeginDrag = false;

然后,使UIdragableScript.BeginDrag依赖它。

UIdragableScript.BeginDrag()
{
    if(!allowBeginDrag) return;

    // ...
}

您可能需要考虑使用IDragXHandlerIPointerXHandler接口而不是EventTrigger将逻辑实现到脚本本身中:

UIDragableScript

public class UIDragableScript : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    public bool allowBeginDrag;

    public void OnBeginDrag(PointerEventData eventData)
    {
        if(!allowBeginDrag) return;

        // ...
    }

    public void OnDrag(PointerEventData eventData)
    {
        // ...
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        // ...
    }
}

UIHoverScript

public class UIHoverScript : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    public void OnPointerEnter(PointerEventData pointerEventData)
    {
        // ...
    }

    //Detect when Cursor leaves the GameObject
    public void OnPointerExit(PointerEventData pointerEventData)
    {
        // ...
    }
}

确保EventSystem场景中存在允许点击/悬停/等检测。对于非 UI 游戏对象的点击/悬停/等检测,请确保将 aPhysicsRaycaster附加到Camera. (来自IPointerClickHandler

然后,根本不要使用EventTrigger


推荐阅读