Пример #1
0
        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);
        }
Пример #2
0
        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;
            }
        }