using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(ToggleGroup))] public class SystemLogicList : MonoBehaviour { public static SystemLogicList Instance; public GameObject[] views; private string[] names = { "#{3816}", "#{86717}", "#{4344}" }; public Toggle toggle; public Sprite bgCloseSprite; public Sprite arrowCloseSprite; private void Awake() { Instance = this; var toggleGroup = GetComponent(); for (var i = 0; i < views.Length; i++) { // 最后一个直接使用样例 Toggle target; if (i < views.Length - 1) { target = Instantiate(toggle); target.transform.SetParent(toggle.transform.parent, false); } else target = toggle; var item = new SystemLogicItem(); var isOn = i == 0; target.group = toggleGroup; string title = GCGame.Table.StrDictionary.GetClientDictionaryString(names[i]); item.Init(target, title, views[i], arrowCloseSprite, bgCloseSprite, isOn); target.transform.SetAsLastSibling(); views[i].transform.SetAsLastSibling(); } } // 等待页面本身的Init完全执行 private void Start() { for (var i = 0; i < views.Length; i++) { var isOn = i == 0; views[i].gameObject.SetActive(isOn); } } private class SystemLogicItem { private Image _arrow; private Image _backGround; private GameObject _view; private Sprite _arrowCloseSprite; private Sprite _arrowSprite; private Sprite _bgCloseSprite; private Sprite _bgSprite; public void Init(Toggle toggle, string name, GameObject view, Sprite arrowCloseSprite, Sprite bgCloseSprite, bool isOn) { toggle.isOn = isOn; toggle.transform.Find("Name").GetComponent().text = name; _arrow = toggle.transform.Find("Arrow").GetComponent(); _backGround = toggle.transform.Find("BackGround").GetComponent(); _view = view; _arrowSprite = _arrow.sprite; _arrowCloseSprite = arrowCloseSprite; _bgSprite = _backGround.sprite; _bgCloseSprite = bgCloseSprite; toggle.onValueChanged.AddListener(OnToggleUpdate); _arrow.sprite = isOn ? _arrowSprite : _arrowCloseSprite; _backGround.sprite = isOn ? _bgSprite : _bgCloseSprite; } private void OnToggleUpdate(bool isOn) { _arrow.sprite = isOn ? _arrowSprite : _arrowCloseSprite; _backGround.sprite = isOn ? _bgSprite : _bgCloseSprite; _view.SetActive(isOn); } } private void OnDestroy() { Instance = null; } public void ShowTeamSeting() { toggle.isOn = true; } }