void ShowAddMemberMenu(Rect rect, SerializedProperty componentProperty, SerializedProperty memberNameProperty) { GameObject gameObject = null; if (componentProperty.objectReferenceValue is GameObject) { gameObject = componentProperty.objectReferenceValue as GameObject; } else if (componentProperty.objectReferenceValue is Component) { gameObject = (componentProperty.objectReferenceValue as Component).gameObject; } GenericMenu menu = new GenericMenu(); foreach (Component component in gameObject.GetComponents(typeof(Component))) { List <MemberInfo> memberInfoList = ReflectionMemberUtility.GetMembers(component.GetType()); foreach (MemberInfo memberInfo in memberInfoList) { GUIContent content = new GUIContent(component.GetType().Name + "/" + ReflectionMemberUtility.FormatMemberName(memberInfo)); menu.AddItem(content, false, () => { memberNameProperty.stringValue = memberInfo.Name; componentProperty.objectReferenceValue = component; memberNameProperty.serializedObject.ApplyModifiedProperties(); }); } } menu.DropDown(rect); }
void AddMemberMenu(GenericMenu menu, MemberInfo memberInfo, System.Type paramType) { GUIContent content = new GUIContent(ReflectionMemberUtility.FormatMemberName(memberInfo)); if (paramType == null) { if (memberInfo.MemberType == MemberTypes.Method) { MethodInfo methodInfo = memberInfo as MethodInfo; if (methodInfo.GetParameters().Length == 0) { menu.AddItem(content, false, OnAddMemberBinding, memberInfo); return; } } } else { switch (memberInfo.MemberType) { case MemberTypes.Field: FieldInfo fieldInfo = memberInfo as FieldInfo; if (paramType.IsAssignableFrom(fieldInfo.FieldType)) { menu.AddItem(content, false, OnAddMemberBinding, memberInfo); return; } break; case MemberTypes.Property: PropertyInfo propertyInfo = memberInfo as PropertyInfo; if (paramType.IsAssignableFrom(propertyInfo.PropertyType)) { menu.AddItem(content, false, OnAddMemberBinding, memberInfo); return; } break; case MemberTypes.Method: MethodInfo methodInfo = memberInfo as MethodInfo; ParameterInfo[] parameters = methodInfo.GetParameters(); if (parameters.Length == 0 || paramType.IsAssignableFrom(parameters[0].GetType())) { menu.AddItem(content, false, OnAddMemberBinding, memberInfo); return; } break; } } menu.AddDisabledItem(content); }
protected virtual void AddMembers(GenericMenu menu, string modelId, System.Type paramType) { List <System.Type> modelTypeList = ReflectionUtility.GetModelTypeList(); System.Type type = modelTypeList.Find((t) => t.FullName == modelId); if (type == null) { return; } List <MemberInfo> memberInfoList = ReflectionMemberUtility.GetMembers(type); foreach (MemberInfo memberInfo in memberInfoList) { AddMemberMenu(menu, memberInfo, paramType); } }
void ShowAddMemberMenu(Rect rect, GameObject gameObject, SerializedObject serializedObject, string propertyPath) { GenericMenu menu = new GenericMenu(); foreach (Component component in gameObject.GetComponents(typeof(Component))) { List <MemberInfo> memberInfoList = ReflectionMemberUtility.GetMembers(component.GetType()); foreach (MemberInfo memberInfo in memberInfoList) { GUIContent content = new GUIContent(component.GetType().Name + "/" + ReflectionMemberUtility.FormatMemberName(memberInfo)); menu.AddItem(content, false, () => { SerializedProperty property = serializedObject.FindProperty(propertyPath); SerializedProperty componentProperty = serializedObject.FindProperty(componentPath); property.stringValue = memberInfo.Name; componentProperty.objectReferenceValue = component; serializedObject.ApplyModifiedProperties(); }); } } menu.DropDown(rect); }
protected void AddMemberMenu(SerializedProperty property, GenericMenu menu, MemberInfo memberInfo, string modelId, System.Type paramType) { GUIContent content = new GUIContent(ReflectionMemberUtility.FormatMemberName(memberInfo)); if (paramType == null) { if (memberInfo.MemberType == MemberTypes.Method) { MethodInfo methodInfo = memberInfo as MethodInfo; if (methodInfo.GetParameters().Length == 0) { menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo)); return; } else if (methodInfo.GetParameters().Length == 1) { menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo, methodInfo.GetParameters()[0].ParameterType)); return; } } } else { switch (memberInfo.MemberType) { case MemberTypes.Field: FieldInfo fieldInfo = memberInfo as FieldInfo; if (paramType.IsAssignableFrom(fieldInfo.FieldType)) { menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo)); return; } break; case MemberTypes.Property: PropertyInfo propertyInfo = memberInfo as PropertyInfo; if (paramType.IsAssignableFrom(propertyInfo.PropertyType)) { menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo)); return; } break; case MemberTypes.Method: MethodInfo methodInfo = memberInfo as MethodInfo; ParameterInfo[] parameters = methodInfo.GetParameters(); if (parameters.Length == 0) { menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo)); return; } else if (parameters.Length == 1) { if (paramType.IsAssignableFrom(parameters[0].ParameterType)) { menu.AddItem(new GUIContent(content.text + " - TP"), false, OnAddMemberBinding, new MenuContext(property, memberInfo)); menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo, parameters[0].ParameterType)); return; } else { menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo, parameters[0].ParameterType)); return; } } break; } } menu.AddDisabledItem(content); }