您的位置:首页 > 产品设计 > UI/UE

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

2014-08-23 20:08 183 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: