public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { // Get sub properties SerializedProperty type = property.FindPropertyRelative(nameof(type)); SerializedProperty index = property.FindPropertyRelative(nameof(index)); // Set height for just one control position.height = LayoutUtilities.standardControlHeight; // Put in the property foldout property.isExpanded = EditorGUI.Foldout(position, property.isExpanded, label); position.y += position.height; if (property.isExpanded) { // Increse indent EditorGUI.indentLevel++; // Edit the type EditorGUI.PropertyField(position, type); position.y += position.height; // Get a list of all possible level ids with this type LevelID[] levelIDs = LevelSettings.GetAllLevelIDsOfType((LevelType)type.enumValueIndex); // Select the names of the levels with this type string[] names = levelIDs.Select(id => id.Data.EditorDisplayName).ToArray(); // Edit the property as a popup with the names of all the levels in this type index.intValue = EditorGUIExt.Popup(position, index.intValue, names, new GUIContent(property.displayName)); // Resume indent EditorGUI.indentLevel--; } }