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

时间:2023-03-10 07:28:04
NGUI无法按住鼠标按住时无法监听OnHover事件

UICamera.cs

修改前:

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

修改后:

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

或者加一个

if (Input.GetMouseButton() && highlightChanged)
{
currentScheme = ControlScheme.Mouse;
mTooltipTime = RealTime.time + tooltipDelay;
mHover = mMouse[].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()) && 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();