/// <summary> /// Same as SerializedProperty.FindPropertyRelative but without the use of magic strings. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="property"></param> /// <param name="expression"></param> /// <returns></returns> public static SerializedProperty GetMemberProperty <T>(this SerializedProperty property, Expression <System.Func <T, object> > expression) { string memberName = StaticReflectionHelper.GetMemberName(expression).UnwrapOr(""); SerializedProperty memberProperty = property.FindPropertyRelative(memberName); if (memberProperty == null) { memberProperty = property.Copy(); if (!memberProperty.Next(true)) { return(null); } string niceMemberName = ObjectNames.NicifyVariableName(memberName); do { string currentMemberNiceName = ObjectNames.NicifyVariableName(memberProperty.name); if (string.Equals(niceMemberName, currentMemberNiceName)) { return(memberProperty); } } while(!memberProperty.Next(false)); } return(memberProperty); }
/// <summary> /// Same as SerializedProperty.FindProperty but without the use of magic strings. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="property"></param> /// <param name="expression"></param> /// <returns></returns> public static SerializedProperty GetMemberProperty <T>(this SerializedObject obj, Expression <System.Func <T, object> > expression) { string memberName = StaticReflectionHelper.GetMemberName(expression).UnwrapOr(""); SerializedProperty memberProperty = obj.FindProperty(memberName); if (memberProperty == null) { memberProperty = obj.FindProperty("m_" + memberName); return(memberProperty); } return(memberProperty); }