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 具有疯狂的过渡状态行为 - 单击后仍保持突出显示的主要内容,如果未能解决你的问题,请参考以下文章