NGUI无法按住鼠标按住时无法监听OnHover事件

UICamera.cs

修改前:

 if ((!isPressed) && highlightChanged)
        {
            currentScheme = ControlScheme.Mouse;
            mTooltipTime = RealTime.time + tooltipDelay;
            mHover = mMouse[0].current;
            Notify(mHover, "OnHover", true);
        }

修改后:

 if ((!isPressed || isPressed) && highlightChanged)
        {
            currentScheme = ControlScheme.Mouse;
            mTooltipTime = RealTime.time + tooltipDelay;
            mHover = mMouse[0].current;
            Notify(mHover, "OnHover", true);
        }

或者加一个

if (Input.GetMouseButton(0) && highlightChanged)
        {
            currentScheme = ControlScheme.Mouse;
            mTooltipTime = RealTime.time + tooltipDelay;
            mHover = mMouse[0].current;
            Notify(mHover, "OnHover", true);
        }
if ((justPressed || !isPressed) && mHover != null && highlightChanged)
        {
            currentScheme = ControlScheme.Mouse;
            if (mTooltip != null) ShowTooltip(false);
            Notify(mHover, "OnHover", false);
            mHover = null;
        }

        if ((justPressed || Input.GetMouseButton(0)) && mHover != null && highlightChanged)
        {
            currentScheme = ControlScheme.Mouse;
            if (mTooltip != null) ShowTooltip(false);
            Notify(mHover, "OnHover", false);
            mHover = null;
        }

监听函数

 void OnHover(bool state)
    {
        Debug.Log(state+"OnHover"+gameObject.name);
    }

 补充:

因为UICamera.cs 的Update函数里处理是:

   void Update()
    {
        // Only the first UI layer should be processing events
#if UNITY_EDITOR
        if (!Application.isPlaying || !handlesEvents) return;
#else
        if (!handlesEvents) return;
#endif
        current = this;

        // Process touch events first  如果是移动平台就调用的ProcessTouches()函数所以之前加的方法 在两个函数里都加上。
        if (useTouch) ProcessTouches();
        else if (useMouse) ProcessMouse();
原文地址:https://www.cnblogs.com/123ing/p/3931679.html