using System; using System.Reflection; using UnityEngine; public static class ProcessExecutor { public static void ExecuteProcessAddMethods(string selectedProcessName) { // 获取当前项目中的所有程序集 var assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assembly in assemblies) { // 查找每个程序集中的所有类型 Type[] types = assembly.GetTypes(); foreach (var type in types) { // // 判断类名是否包含当前选择的流程名称 if (type.Name.Contains(selectedProcessName)) { // 查找类中所有标记了 ProcessAction 属性的方法 var methods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); foreach (var method in methods) { // 检查方法是否有 ProcessAction 属性 if (method.GetCustomAttribute() != null) { // 如果是实例方法,先创建实例再调用 if (!method.IsStatic) { var instance = Activator.CreateInstance(type); method.Invoke(instance, null); Debug.Log($"执行实例方法: {method.Name} 在 {type.FullName}"); } else { // 如果是静态方法,直接调用 method.Invoke(null, null); Debug.Log($"执行静态方法: {method.Name} 在 {type.FullName}"); } } } } } } } }