fix
This commit is contained in:
parent
e1020fd308
commit
418db1838e
@ -38,6 +38,7 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
|
|||||||
private bool _mTogSelected;
|
private bool _mTogSelected;
|
||||||
private Coroutine _resetRoutine;
|
private Coroutine _resetRoutine;
|
||||||
private Coroutine _deferredDeselectRoutine;
|
private Coroutine _deferredDeselectRoutine;
|
||||||
|
private Coroutine _deferredLockRoutine; // 新增:用于 Focus 延迟锁定的协程
|
||||||
private WaitForSeconds _waitFadeDuration;
|
private WaitForSeconds _waitFadeDuration;
|
||||||
|
|
||||||
// 静态锁(用于 normal 模式点击后的“保持 Selected”并能转移)
|
// 静态锁(用于 normal 模式点击后的“保持 Selected”并能转移)
|
||||||
@ -118,6 +119,10 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
|
|||||||
{
|
{
|
||||||
if (_resetRoutine != null)
|
if (_resetRoutine != null)
|
||||||
StopCoroutine(_resetRoutine);
|
StopCoroutine(_resetRoutine);
|
||||||
|
if (_deferredDeselectRoutine != null)
|
||||||
|
StopCoroutine(_deferredDeselectRoutine);
|
||||||
|
if (_deferredLockRoutine != null)
|
||||||
|
StopCoroutine(_deferredLockRoutine);
|
||||||
base.OnDestroy();
|
base.OnDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,7 +415,6 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public override void OnDeselect(BaseEventData eventData)
|
public override void OnDeselect(BaseEventData eventData)
|
||||||
{
|
{
|
||||||
base.OnDeselect(eventData);
|
base.OnDeselect(eventData);
|
||||||
@ -594,6 +598,7 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
|
|||||||
if (!IsInteractable())
|
if (!IsInteractable())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// 先发起选中请求
|
||||||
if (EventSystem.current != null)
|
if (EventSystem.current != null)
|
||||||
{
|
{
|
||||||
EventSystem.current.SetSelectedGameObject(gameObject, new BaseEventData(EventSystem.current));
|
EventSystem.current.SetSelectedGameObject(gameObject, new BaseEventData(EventSystem.current));
|
||||||
@ -601,9 +606,32 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
|
|||||||
|
|
||||||
m_IsNavFocused = true;
|
m_IsNavFocused = true;
|
||||||
|
|
||||||
if ((s_LockedButton != null && s_LockedButton != this) || s_LockedButton == null)
|
// 停掉已有的延迟锁协程(如果有)
|
||||||
|
if (_deferredLockRoutine != null)
|
||||||
|
{
|
||||||
|
StopCoroutine(_deferredLockRoutine);
|
||||||
|
_deferredLockRoutine = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果已经成为 EventSystem 的 selected,则立即锁定;否则延迟一帧再确认并锁定
|
||||||
|
if (IsStillSelected())
|
||||||
{
|
{
|
||||||
SetLockedButton(this);
|
SetLockedButton(this);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_deferredLockRoutine = StartCoroutine(DeferredLockAfterFocus());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator DeferredLockAfterFocus()
|
||||||
|
{
|
||||||
|
// 等一帧,让 EventSystem 完成 selected 的更新和分发(OnDeselect/OnSelect 等)
|
||||||
|
yield return null;
|
||||||
|
|
||||||
|
if (IsStillSelected())
|
||||||
|
SetLockedButton(this);
|
||||||
|
|
||||||
|
_deferredLockRoutine = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user