public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        serializedObject.Update();

        EditorGUILayout.Space();
        if (GUILayout.Button("Clear Weight"))
        {
            _shapeMixer.Clear();
        }
        EditorGUILayout.Space();

        for (int i = 0; i < _presets.arraySize; i++)
        {
            var preset   = _presets.GetArrayElementAtIndex(i);
            var name     = preset.FindPropertyRelative("name");
            var handlers = preset.FindPropertyRelative("handlers");

            handlers.isExpanded = EditorGUILayout.Foldout(handlers.isExpanded, name.stringValue, true);
            if (handlers.isExpanded)
            {
                EditorGUILayout.PropertyField(name, new GUIContent("Name"));
                EditorGUILayout.BeginHorizontal();
                {
                    if (GUILayout.Button("Capture", EditorStyles.miniButtonLeft))
                    {
                        _shapeMixer.Capture(i);
                    }
                    if (GUILayout.Button("Apply", EditorStyles.miniButtonMid))
                    {
                        _shapeMixer.Apply(i);
                    }
                    if (GUILayout.Button("Duplicate", EditorStyles.miniButtonMid))
                    {
                        _presets.InsertArrayElementAtIndex(i);
                    }
                    if (GUILayout.Button("Remove", EditorStyles.miniButtonRight))
                    {
                        _presets.DeleteArrayElementAtIndex(i);
                    }
                }
                EditorGUILayout.EndHorizontal();

                if (handlers.arraySize > 0)
                {
                    EditorGUILayout.BeginVertical(GUI.skin.box);
                    _drawMeshHandler(handlers);
                    EditorGUILayout.EndVertical();
                }
            }
        }
        serializedObject.ApplyModifiedProperties();
    }