public override void OnGUI(UnityEngine.Rect position, UnityEditor.SerializedProperty property, UnityEngine.GUIContent label) { var data = property.FindPropertyRelative("data"); var vars = property.FindPropertyRelative("boxVars"); var captions = property.FindPropertyRelative("captions"); var isInput = property.FindPropertyRelative("isInput").boolValue; for (int i = 0; i < data.arraySize; ++i) { var element = data.GetArrayElementAtIndex(i); var isArray = element.FindPropertyRelative("isArray"); var key = (isArray.boolValue == true ? "valueArr" : "value"); var value = element.FindPropertyRelative(key); if (isInput == false) UnityEditor.EditorGUI.PropertyField(position, value, new UnityEngine.GUIContent(GUILayoutExt.GetStringCamelCaseSpace(captions.GetArrayElementAtIndex(i).stringValue)), true); var h = UnityEditor.EditorGUI.GetPropertyHeight(value, true); position.height = UnityEditor.EditorGUI.GetPropertyHeight(value, false); this.DrawLink(ref position, i, vars.GetArrayElementAtIndex(i), value, isInput); position.y += h; } }