private static void AddButtonListener(GameObject _go) { Button[] bts = _go.GetComponentsInChildren <Button>(); foreach (Button bt in bts) { int num = bt.onClick.GetPersistentEventCount(); for (int i = 0; i < num; i++) { if (bt.onClick.GetPersistentTarget(i) is MonoBehaviour) { MonoBehaviour target = (MonoBehaviour)bt.onClick.GetPersistentTarget(i); AddButtonListener addButtonListener = target.gameObject.AddComponent <AddButtonListener>(); addButtonListener.button = bt; addButtonListener.scriptName = target.name; addButtonListener.methodName = bt.onClick.GetPersistentMethodName(i); } } } }
private static void AddButtonListener(GameObject _go, ref bool _hasChange) { Button bt = _go.GetComponent <Button>(); if (bt != null) { int num = bt.onClick.GetPersistentEventCount(); List <int> delList = null; for (int i = 0; i < num; i++) { UnityEngine.Object t = bt.onClick.GetPersistentTarget(i); string methodName = bt.onClick.GetPersistentMethodName(i); if (t is MonoBehaviour) { if (delList == null) { delList = new List <int>(); } delList.Add(i); MonoBehaviour target = t as MonoBehaviour; AddButtonListener addButtonListener = target.gameObject.AddComponent <AddButtonListener>(); addButtonListener.button = bt; addButtonListener.scriptName = target.name; addButtonListener.methodName = methodName; _hasChange = true; } } if (delList != null) { for (int i = 0; i < delList.Count; i++) { UnityEventTools.RemovePersistentListener(bt.onClick, delList[i] - i); } } } for (int i = 0; i < _go.transform.childCount; i++) { AddButtonListener(_go.transform.GetChild(i).gameObject, ref _hasChange); } }