This commit is contained in:
陈思海 2025-12-17 15:33:10 +08:00
parent c25f3f46d6
commit ca28bb2c55

View File

@ -343,13 +343,17 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
m_IsNavFocused = true; m_IsNavFocused = true;
if (s_LockedButton != null && s_LockedButton != this) // 变更:当通过 EventSystem.current.SetSelectedGameObject(...) 选中时,
// 也要像 Focus() 一样将静态锁设置到当前按钮(除非已经是自己)。
// 这样外部直接调用 EventSystem.current.SetSelectedGameObject(...) 就能生效,
// 无需再调用 Focus().
if (s_LockedButton != this)
{ {
SetLockedButton(this); SetLockedButton(this);
return; return;
} }
// 聚焦时无论逻辑是否选中Toggle 显示 Selected // 如果聚焦时无论逻辑是否选中Toggle 显示 Selected
if (m_Mode == ButtonModeType.Toggle) if (m_Mode == ButtonModeType.Toggle)
{ {
SetState(SelectionState.Selected); SetState(SelectionState.Selected);
@ -371,7 +375,6 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
private IEnumerator DeferredDeselectCheck() private IEnumerator DeferredDeselectCheck()
{ {
// 等一帧,保证 EventSystem 更新 currentSelectedGameObject
yield return null; yield return null;
bool selectionIsNull = EventSystem.current == null || EventSystem.current.currentSelectedGameObject == null; bool selectionIsNull = EventSystem.current == null || EventSystem.current.currentSelectedGameObject == null;
@ -569,19 +572,9 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
public void Focus() public void Focus()
{ {
if (!IsInteractable()) if (gameObject != null && EventSystem.current != null)
return;
if (EventSystem.current != null)
{ {
EventSystem.current.SetSelectedGameObject(gameObject, new BaseEventData(EventSystem.current)); EventSystem.current.SetSelectedGameObject(gameObject);
}
m_IsNavFocused = true;
if ((s_LockedButton != null && s_LockedButton != this) || s_LockedButton == null)
{
SetLockedButton(this);
} }
} }
} }