• 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();
  • 相关阅读:
    DFT
    BSDL
    穆尼里奥:未派上最好点球手;齐达内成功并不意外
    module使用和设置
    APU (美国AMD公司研发的加速处理器)
    Lucio: We avoided Mourinho after every loss
    高位压迫——萨基给世界足坛带来的技术革命
    穆里尼奥:曼联没有在今夏尝试过签下C罗
    Linux 的 Out-of-Memory (OOM) Killer
    shell source命令说明
  • 原文地址:https://www.cnblogs.com/123ing/p/3931679.html
Copyright © 2020-2023  润新知