public void Init() { if (argMode == ActionArgMode.NoArg) { action = Activator.CreateInstance(typeof(ActionVoid)) as DelegateBase; typeof(ActionVoid).GetMethod("Init").Invoke(action, new object[] { instance, actionName }); } else if (argMode == ActionArgMode.Arg1) { //一つ目の引数のタイプ(Typeがシリアル化不可のため) Type type1 = typeof(object); switch (argType1) { case ArgType.UnityObject: type1 = arg1.GetTypeArg(ArgType.UnityObject).GetType(); break; case ArgType.Bool: type1 = typeof(bool); break; case ArgType.Float: type1 = typeof(float); break; case ArgType.Int: type1 = typeof(int); break; case ArgType.String: type1 = typeof(string); break; } Type type = typeof(ActionVoid <>).MakeGenericType(type1); action = Activator.CreateInstance(type) as DelegateBase; //delegate作成 type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1) }); } else if (argMode == ActionArgMode.Arg2) { //一つ目の引数のタイプ(Typeがシリアル化不可のため) Type type1 = typeof(object); switch (argType1) { case ArgType.UnityObject: type1 = arg1.GetTypeArg(ArgType.UnityObject).GetType(); break; case ArgType.Bool: type1 = typeof(bool); break; case ArgType.Float: type1 = typeof(float); break; case ArgType.Int: type1 = typeof(int); break; case ArgType.String: type1 = typeof(string); break; } //二つ目の引数 Type type2 = typeof(object); switch (argType2) { case ArgType.UnityObject: type2 = arg2.GetTypeArg(ArgType.UnityObject).GetType(); break; case ArgType.Bool: type2 = typeof(bool); break; case ArgType.Float: type2 = typeof(float); break; case ArgType.Int: type2 = typeof(int); break; case ArgType.String: type2 = typeof(string); break; } Type type = typeof(ActionVoid <,>).MakeGenericType(type1, type2); action = Activator.CreateInstance(type) as DelegateBase; //delegate作成 type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1), arg2.GetTypeArg(argType2) }); } }
public void Init() { if (argMode == ActionArgMode.NoArg) { action = Activator.CreateInstance(typeof(ActionVoid)) as DelegateBase; typeof(ActionVoid).GetMethod("Init").Invoke(action, new object[] { instance, actionName }); } else if (argMode == ActionArgMode.Arg1) { //一つ目の引数のタイプ(Typeがシリアル化不可のため) Type type1 = typeof(object); switch (argType1) { case ArgType.UnityObject: type1 = arg1.GetTypeArg(ArgType.UnityObject).GetType(); break; case ArgType.Bool: type1 = typeof(bool); break; case ArgType.Float: type1 = typeof(float); break; case ArgType.Int: type1 = typeof(int); break; case ArgType.String: type1 = typeof(string); break; case ArgType.Enum: type1 = typeof(int); break; } Type type = typeof(ActionVoid <>).MakeGenericType(type1); action = Activator.CreateInstance(type) as DelegateBase; //delegate作成 if (argType1 == ArgType.Enum) { type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1), arg1.GetEnumType(), arg1.assembly_Name }); } else { type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1), null, null }); } } else if (argMode == ActionArgMode.Arg2) { //一つ目の引数のタイプ(Typeがシリアル化不可のため) Type type1 = typeof(object); switch (argType1) { case ArgType.UnityObject: type1 = arg1.GetTypeArg(ArgType.UnityObject).GetType(); break; case ArgType.Bool: type1 = typeof(bool); break; case ArgType.Float: type1 = typeof(float); break; case ArgType.Int: type1 = typeof(int); break; case ArgType.String: type1 = typeof(string); break; case ArgType.Enum: type1 = typeof(int); break; } //二つ目の引数 Type type2 = typeof(object); switch (argType2) { case ArgType.UnityObject: type2 = arg2.GetTypeArg(ArgType.UnityObject).GetType(); break; case ArgType.Bool: type2 = typeof(bool); break; case ArgType.Float: type2 = typeof(float); break; case ArgType.Int: type2 = typeof(int); break; case ArgType.String: type2 = typeof(string); break; case ArgType.Enum: type2 = typeof(int); break; } Type type = typeof(ActionVoid <,>).MakeGenericType(type1, type2); action = Activator.CreateInstance(type) as DelegateBase; string enum1 = null, enum2 = null, enumAs1 = null, enumAs2 = null; if (argType1 == ArgType.Enum) { enum1 = arg1.enum_Name; enumAs1 = arg1.assembly_Name; } if (argType2 == ArgType.Enum) { enum2 = arg2.enum_Name; enumAs2 = arg2.assembly_Name; } //delegate作成 type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1), arg2.GetTypeArg(argType2), enum1, enum2, enumAs1, enumAs2 }); } }