From 68566ef5d53f222cdf7a54f15dde3e4ad94a4826 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, 23 Mar 2026 14:04:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ControllerDefion=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E7=9B=B4=E6=8E=A5=E7=94=9F=E6=95=88=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UXComponent/Controller/UXController.cs | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/Runtime/UXComponent/Controller/UXController.cs b/Runtime/UXComponent/Controller/UXController.cs index 43b0097..e5ab88c 100644 --- a/Runtime/UXComponent/Controller/UXController.cs +++ b/Runtime/UXComponent/Controller/UXController.cs @@ -19,6 +19,7 @@ namespace AlicizaX.UI [SerializeField] private int _length = 2; [SerializeField] private string _description = string.Empty; [NonSerialized] private int _selectedIndex = -1; + [NonSerialized] private UXController _owner; public string Id => _id; @@ -43,7 +44,16 @@ namespace AlicizaX.UI public int SelectedIndex { get => _selectedIndex; - internal set => _selectedIndex = value; + set + { + if (_owner == null) + { + SetSelectedIndexSilently(Mathf.Clamp(value, 0, Length - 1)); + return; + } + + _owner.SetControllerIndexInternal(this, value); + } } internal void EnsureId() @@ -53,6 +63,16 @@ namespace AlicizaX.UI _id = Guid.NewGuid().ToString("N"); } } + + internal void SetOwner(UXController owner) + { + _owner = owner; + } + + internal void SetSelectedIndexSilently(int selectedIndex) + { + _selectedIndex = selectedIndex; + } } [SerializeField] private List _controllers = new List(); @@ -61,7 +81,14 @@ namespace AlicizaX.UI private readonly Dictionary _controllerIdMap = new Dictionary(); private readonly Dictionary _controllerNameMap = new Dictionary(); - public IReadOnlyList Controllers => _controllers; + public IReadOnlyList Controllers + { + get + { + EnsureInitialized(); + return _controllers; + } + } public IReadOnlyList Bindings => _bindings; public int ControllerCount => _controllers.Count; @@ -103,6 +130,8 @@ namespace AlicizaX.UI public ControllerDefinition GetControllerAt(int index) { + EnsureInitialized(); + if (index < 0 || index >= _controllers.Count) { return null; @@ -243,7 +272,8 @@ namespace AlicizaX.UI } controller.EnsureId(); - controller.SelectedIndex = Mathf.Clamp(controller.SelectedIndex, -1, controller.Length - 1); + controller.SetOwner(this); + controller.SetSelectedIndexSilently(Mathf.Clamp(controller.SelectedIndex, -1, controller.Length - 1)); if (string.IsNullOrWhiteSpace(controller.Name)) { @@ -285,7 +315,7 @@ namespace AlicizaX.UI return false; } - controller.SelectedIndex = selectedIndex; + controller.SetSelectedIndexSilently(selectedIndex); NotifyBindings(controller.Id, selectedIndex); return true; }