public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { var templateValueProperty = GetTemplateValueProperty(property); // m_CollisionResponse, collision filter foldout, advanced foldout var height = 3f * EditorGUIUtility.singleLineHeight + 2f * EditorGUIUtility.standardVerticalSpacing; // m_BelongsTo, m_CollidesWith var group = property.FindPropertyRelative(k_CollisionFilterGroupKey); if (group.isExpanded) { height += 2f * (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing); } // m_CustomTags group = property.FindPropertyRelative(k_AdvancedGroupKey); if (group.isExpanded) { height += (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing); } // m_Template if (property.FindPropertyRelative("m_SupportsTemplate").boolValue) { height += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; } // m_Friction, m_Restitution FindToggleAndValueProperties(property, templateValueProperty, "m_CollisionResponse", out _, out var collisionResponse); // Check if regular collider CollisionResponsePolicy collisionResponseEnum = (CollisionResponsePolicy)collisionResponse.intValue; if (collisionResponseEnum == CollisionResponsePolicy.Collide || collisionResponseEnum == CollisionResponsePolicy.CollideRaiseCollisionEvents) { height += 2f * (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing); } return(height); }
protected override void DoGUI(Rect position, SerializedProperty property, GUIContent label) { var template = property.FindPropertyRelative("m_Template"); var templateAssigned = template.objectReferenceValue != null; var supportsTemplate = property.FindPropertyRelative("m_SupportsTemplate"); if (supportsTemplate.boolValue) { position.height = EditorGUI.GetPropertyHeight(template); EditorGUI.PropertyField(position, template); position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing; } var templateValue = GetTemplateValueProperty(property); FindToggleAndValueProperties(property, templateValue, "m_CollisionResponse", out var collisionResponseDropDown, out var collisionResponse); position.height = EditorGUIUtility.singleLineHeight; DisplayOverridableProperty(position, Content.CollisionResponseLabel, collisionResponseDropDown, collisionResponse, templateAssigned); SerializedProperty toggle; // Check if regular collider CollisionResponsePolicy collisionResponseEnum = (CollisionResponsePolicy)collisionResponse.intValue; if (collisionResponseEnum == CollisionResponsePolicy.Collide || collisionResponseEnum == CollisionResponsePolicy.CollideRaiseCollisionEvents) { FindToggleAndValueProperties(property, templateValue, "m_Friction", out toggle, out var friction); position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing; position.height = EditorGUIUtility.singleLineHeight; DisplayOverridableProperty(position, Content.FrictionLabel, toggle, friction, templateAssigned); FindToggleAndValueProperties(property, templateValue, "m_Restitution", out toggle, out var restitution); position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing; position.height = EditorGUIUtility.singleLineHeight; DisplayOverridableProperty(position, Content.RestitutionLabel, toggle, restitution, templateAssigned); } // collision filter group var collisionFilterGroup = property.FindPropertyRelative(k_CollisionFilterGroupKey); position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing; position.height = EditorGUIUtility.singleLineHeight; collisionFilterGroup.isExpanded = EditorGUI.Foldout(position, collisionFilterGroup.isExpanded, Content.CollisionFilterGroupFoldout, true); if (collisionFilterGroup.isExpanded) { ++EditorGUI.indentLevel; FindToggleAndValueProperties(property, templateValue, "m_BelongsToCategories", out toggle, out var belongsTo); position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing; position.height = EditorGUIUtility.singleLineHeight; DisplayOverridableProperty(position, Content.BelongsToLabel, toggle, belongsTo, templateAssigned); FindToggleAndValueProperties(property, templateValue, "m_CollidesWithCategories", out toggle, out var collidesWith); position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing; position.height = EditorGUIUtility.singleLineHeight; DisplayOverridableProperty(position, Content.CollidesWithLabel, toggle, collidesWith, templateAssigned); --EditorGUI.indentLevel; } // advanced group var advancedGroup = property.FindPropertyRelative(k_AdvancedGroupKey); position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing; position.height = EditorGUIUtility.singleLineHeight; advancedGroup.isExpanded = EditorGUI.Foldout(position, advancedGroup.isExpanded, Content.AdvancedGroupFoldout, true); if (advancedGroup.isExpanded) { ++EditorGUI.indentLevel; FindToggleAndValueProperties(property, templateValue, "m_CustomMaterialTags", out toggle, out var customFlags); position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing; position.height = EditorGUIUtility.singleLineHeight; DisplayOverridableProperty(position, Content.CustomFlagsLabel, toggle, customFlags, templateAssigned); --EditorGUI.indentLevel; } }