/// <summary> /// 委托list转换为字符串数组 /// </summary> static public string[] GetNames(List <Entry> list, string choice, out int index) { index = 0; string[] names = new string[list.Count + 1]; names[0] = "<GameObject>"; for (int i = 0; i < list.Count;) { Entry ent = list[i]; string del = GOGUITools.GetFuncName(ent.target, ent.name); names[++i] = del; if (index == 0 && string.Equals(del, choice)) { index = i; } } return(names); }
/// <summary> /// 收集从指定游戏对象的委托列表。 /// </summary> static public List <Entry> GetMethods(GameObject target) { MonoBehaviour[] comps = target.GetComponents <MonoBehaviour>(); List <Entry> list = new List <Entry>(); for (int i = 0, imax = comps.Length; i < imax; ++i) { MonoBehaviour mb = comps[i]; if (mb == null) { continue; } MethodInfo[] methods = mb.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public); for (int b = 0; b < methods.Length; ++b) { MethodInfo mi = methods[b]; if (mi.ReturnType == typeof(void)) { string name = mi.Name; if (name == "Invoke") { continue; } if (name == "InvokeRepeating") { continue; } if (name == "CancelInvoke") { continue; } if (name == "StopCoroutine") { continue; } if (name == "StopAllCoroutines") { continue; } if (name == "BroadcastMessage") { continue; } if (name.StartsWith("SendMessage")) { continue; } if (name.StartsWith("set_")) { continue; } Entry ent = new Entry(); ent.target = mb; ent.name = mi.Name; list.Add(ent); } } } return(list); }