From 6bd66da29507c769efb4f4609c62a8d49d6d7b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com> Date: Mon, 11 Aug 2025 14:14:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runtime/UXComponent/UX/UXGroup.cs | 35 +++++++++++++------------------ 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/Runtime/UXComponent/UX/UXGroup.cs b/Runtime/UXComponent/UX/UXGroup.cs index 04a9d6d..fe40eea 100644 --- a/Runtime/UXComponent/UX/UXGroup.cs +++ b/Runtime/UXComponent/UX/UXGroup.cs @@ -137,7 +137,7 @@ public class UXGroup : UIBehaviour { if (m_Buttons.Count == 0) return; - int startIndex = _current ? m_Buttons.IndexOf(_current) : 0; + int startIndex = _current ? m_Buttons.IndexOf(_current) : -1; int newIndex = FindSelectableIndex(startIndex, 1); if (newIndex != -1) @@ -147,31 +147,24 @@ public class UXGroup : UIBehaviour } - private int FindSelectableIndex(int startIndex, int direction) - { + private int FindSelectableIndex(int startIndex, int direction) { if (m_Buttons.Count == 0) return -1; - startIndex = Mathf.Clamp(startIndex, -1, m_Buttons.Count - 1); + // 计算当前有效起点 + int current = (startIndex == -1) + ? (direction > 0 ? 0 : m_Buttons.Count - 1) + : startIndex; - int fallback = -1; + // 单次简单循环查找 + for (int i = 0; i < m_Buttons.Count; i++) { + int index = (current + direction * i + m_Buttons.Count) % m_Buttons.Count; - for (int i = 0; i < m_Buttons.Count; i++) - { - int index = (startIndex + direction + m_Buttons.Count + i * direction) % m_Buttons.Count; - - index = direction < 0 ? (m_Buttons.Count - index - 1) : index; - - var button = m_Buttons[index]; - - if (button == null || !button.isActiveAndEnabled || !button.Interactable) - continue; - - if (fallback == -1) fallback = index; - - if (_current == null) + if (m_Buttons[index] != null && + m_Buttons[index].isActiveAndEnabled && + m_Buttons[index].Interactable) { return index; + } } - - return fallback; + return -1; // 没有可用按钮 } }