public override void OnInspectorGUI() { FuncCaller Target = (FuncCaller)target; comps = Target.gameObject.GetComponents <Component>(); List <GUIContent> guiContents = new List <GUIContent>(); foreach (Component comp in comps) { guiContents.Add(new GUIContent(comp.ToString())); } int newCompIndex = EditorGUILayout.Popup(CompIndex, guiContents.ToArray()); if (newCompIndex != CompIndex) { CompIndex = newCompIndex; Component comp = comps[CompIndex]; methods = comp.GetType().GetMethods(); //System.Reflection.BindingFlags.DeclaredOnly | //System.Reflection.BindingFlags.Public); } if (methods != null) { List <GUIContent> guiContents2 = new List <GUIContent>(); foreach (MethodInfo method in methods) { guiContents2.Add(new GUIContent(method.Name)); } FuncIndex = EditorGUILayout.Popup(FuncIndex, guiContents2.ToArray()); if (FuncIndex != -1) { if (GUILayout.Button("调用")) { methods[FuncIndex].Invoke(comps[CompIndex], null); } } } }
public EvaluationResult Evaluate(EvaluationState state, ReadOnlyList <IEvaluate> args, ReadOnlyList <Object> data) { Combat.Character character = state.Character as Combat.Character; if (character == null) { return(new EvaluationResult()); } EvaluationResult result = args[1].Evaluate(state); if (result.ResultType == ResultType.None) { return(new EvaluationResult()); } FuncCaller varcaller = args[0] as FuncCaller; if (varcaller == null) { return(new EvaluationResult()); } if (varcaller.Function is Triggers.Var) { EvaluationResult varindex = varcaller.Args[0].Evaluate(state); if (varindex.ResultType == ResultType.None) { return(new EvaluationResult()); } if (character.Variables.SetInterger(varindex.IntValue, false, result.IntValue) == false) { return(new EvaluationResult()); } } else if (varcaller.Function is Triggers.FVar) { EvaluationResult varindex = varcaller.Args[0].Evaluate(state); if (varindex.ResultType == ResultType.None) { return(new EvaluationResult()); } if (character.Variables.SetFloat(varindex.IntValue, false, result.FloatValue) == false) { return(new EvaluationResult()); } } else if (varcaller.Function is Triggers.SysVar) { EvaluationResult varindex = varcaller.Args[0].Evaluate(state); if (varindex.ResultType == ResultType.None) { return(new EvaluationResult()); } if (character.Variables.SetInterger(varindex.IntValue, true, result.IntValue) == false) { return(new EvaluationResult()); } } else if (varcaller.Function is Triggers.SysFVar) { EvaluationResult varindex = varcaller.Args[0].Evaluate(state); if (varindex.ResultType == ResultType.None) { return(new EvaluationResult()); } if (character.Variables.SetFloat(varindex.IntValue, true, result.FloatValue) == false) { return(new EvaluationResult()); } } else { return(new EvaluationResult()); } return(result); }