Unity UI Button 具有疯狂的过渡状态行为 - 单击后仍保持突出显示

Posted

技术标签:

【中文标题】Unity UI Button 具有疯狂的过渡状态行为 - 单击后仍保持突出显示【英文标题】:Unity UI Button has insane transition state behaviour - it remains highlighted after being clicked 【发布时间】:2016-11-23 15:17:03 【问题描述】:

我花了一段时间才弄清楚 Unity UI 按钮转换的问题:

问题: 我将鼠标悬停在按钮对象上,它进入突出显示状态,这很好。如果我在按钮上按下鼠标并进入按下状态,那么我将鼠标移到按钮之外,因此它不再位于按钮上方。按钮进入突出显示状态而不是正常状态。我需要在空白处单击才能获得按钮的正常状态。

TLDR:

【问题讨论】:

这似乎是设计好的行为——对于交互式 UI 元素(例如,您可以通过 html 按钮和链接看到这一点),被点击的元素通常会在初始交互后保持“焦点”。单击此处将清除焦点,这就是当您这样做时按钮不再突出显示的原因。 【参考方案1】:

这是 Unity 中 Button 元素的默认行为 - 它在初始交互后保持焦点,使其显示突出显示的颜色。点击离开会清除焦点,因此不再突出显示。

要更改此行为,您可以切换导航设置。

目前,它设置为自动。根据the documentation,您要改用的选项是None,结果是:

没有键盘导航。还确保它不会通过单击/轻敲它而获得焦点。

希望这会有所帮助!如果您有任何问题,请告诉我。

【讨论】:

我看不出这是鼠标交互中的直观行为。但只要他们可以选择避免这种情况,我就可以走了。谢谢@Serlite【参考方案2】:

要保留键盘自动导航,您可能希望从 IPointerExitHandler 继承并在退出时取消选择:

public void OnPointerExit(PointerEventData data)

    EventSystem.current.SetSelectedGameObject(null);

您可以添加检查以仅取消选择 gameObject(如果已选择)。

【讨论】:

@UmairM:接受的答案不允许导航,我需要游戏手柄支持。【参考方案3】:

如果你想使用键盘导航,也想摆脱这个问题,你可以添加这个功能来更新:

void Update()

    if (Input.GetMouseButtonUp(0))
    
        EventSystem.current.SetSelectedGameObject(null);
    

【讨论】:

您可以以任何方式使用导航,它使您可以完全控制您想要如何进行转换,因此您不需要这样的解决方法。此外,此解决方案会影响游戏性能,并且可能会引入更多错误,具体取决于您在游戏中的其他输入行为。 如果您没有导航,则无法使用键盘导航 是的!但是要使用键盘导航,您可以将导航设置为手动并单击可视化按钮进行编辑。这就是我所说的完全控制的意思。 您的意思是我必须将导航更改为显式并为每个按钮分配更改“Select On Up”、“Select On Down”、“Select On Right”和“Select On Left”?

以上是关于Unity UI Button 具有疯狂的过渡状态行为 - 单击后仍保持突出显示的主要内容,如果未能解决你的问题,请参考以下文章

Unity 基础 之 代码动态监听UI交互组件汇总

Unity 之 UGUI Button按钮组件详解

关于Unity中UI中的Button节点

小功能⭐️Unity获取点击到的UI

小功能⭐️Unity获取点击到的UI

Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍