// TODO: Skip array fields public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { foreach (string propertyToCheck in PropertiesToCheck) { if (!string.IsNullOrEmpty(propertyToCheck)) { var conditionProperty = FindPropertyRelative(property, propertyToCheck); if (conditionProperty != null) { bool isBoolMatch = conditionProperty.propertyType == SerializedPropertyType.Boolean && conditionProperty.boolValue; string compareStringValue = CompareValue?.ToString().ToUpper() ?? "NULL"; if (isBoolMatch && compareStringValue == "FALSE") { isBoolMatch = false; } string conditionPropertyStringValue = EditorUtils.AsStringValue(conditionProperty).ToUpper(); bool objectMatch = compareStringValue == conditionPropertyStringValue; if (!isBoolMatch && !objectMatch) { _toShow = false; return; } } } } _toShow = true; EditorGUI.PropertyField(position, property, label, true); }