public override void OnInspectorGUI()
    {
        SAMeshCollider meshCollider = (SAMeshCollider)target;

        if (meshCollider.edittingMeshCollidertProperty == null)
        {
            if (meshCollider.meshColliderProperty != null)
            {
                meshCollider.edittingMeshCollidertProperty = meshCollider.meshColliderProperty.Copy();
            }
        }
        SAMeshColliderProperty meshColliderProperty = meshCollider.edittingMeshCollidertProperty;

        if (meshColliderProperty != null)
        {
            SplitProperty splitProperty = meshColliderProperty.splitProperty;
            if (splitProperty != null)
            {
                GUILayout.Label("Split", EditorStyles.boldLabel);
                // Split Material
                GUI.enabled = ((int)meshCollider.splitMode <= (int)SplitMode.None);
                splitProperty.splitMaterialEnabled = EditorGUILayout.Toggle("Split Material", splitProperty.splitMaterialEnabled);
                GUI.enabled = true;
                // Split Primitive
                GUI.enabled = ((int)meshCollider.splitMode <= (int)SplitMode.Material);
                splitProperty.splitPrimitiveEnabled = EditorGUILayout.Toggle("Split Primitive", splitProperty.splitPrimitiveEnabled);
                GUI.enabled = true;
                // Split Polygon Normal
                EditorGUILayout.BeginHorizontal();
                GUI.enabled = ((int)meshCollider.splitMode <= (int)SplitMode.Primitive);
                splitProperty.splitPolygonNormalEnabled = EditorGUILayout.Toggle("Split Polygon Normal", splitProperty.splitPolygonNormalEnabled);
                GUI.enabled = GUI.enabled && meshCollider.splitPolygonNormalEnabled;
                splitProperty.splitPolygonNormalAngle = EditorGUILayout.Slider(splitProperty.splitPolygonNormalAngle, 0.0f, 180.0f);
                GUI.enabled = true;
                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.Separator();
            GUILayout.Label("Reducer", EditorStyles.boldLabel);
            SAColliderBuilderEditorCommon.ReducerInspectorGUI(meshColliderProperty.reducerProperty, ReducerOption.Advanced);

            GUI.enabled = meshColliderProperty.reducerProperty.shapeType != ShapeType.None;
            EditorGUILayout.Separator();
            GUILayout.Label("Collider", EditorStyles.boldLabel);
            SAColliderBuilderEditorCommon.ColliderInspectorGUI(meshColliderProperty.colliderProperty, ColliderOption.None);
            EditorGUILayout.Separator();
            GUILayout.Label("Rigidbody", EditorStyles.boldLabel);
            SAColliderBuilderEditorCommon.RigidbodyInspectorGUI(meshColliderProperty.rigidbodyProperty);
            GUI.enabled = true;
        }

        EditorGUILayout.Separator();
        meshCollider.cleanupModified = EditorGUILayout.Toggle("Cleanup Modified", meshCollider.cleanupModified);
        meshCollider.isDebug         = EditorGUILayout.Toggle("Is Debug", meshCollider.isDebug);

        EditorGUILayout.Separator();

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Set Default"))
        {
            if (meshCollider.defaultMeshColliderProperty != null)
            {
                float beginTime = Time.realtimeSinceStartup;
                meshCollider.meshColliderProperty          = meshCollider.defaultMeshColliderProperty.Copy();
                meshCollider.edittingMeshCollidertProperty = null;
                Process(meshCollider);
                meshCollider.cleanupModified = false;
                SAMeshColliderEditorCommon.UnmarkManualProcessingToParent(meshCollider);
                meshCollider.ResetModifyName();
                float endTime = Time.realtimeSinceStartup;
                Debug.Log("Processed.[" + (endTime - beginTime) + " sec]");
            }
        }
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("Revert"))
        {
            meshCollider.edittingMeshCollidertProperty = null;
        }
        if (GUILayout.Button("Cleanup"))
        {
            if (meshCollider.edittingMeshCollidertProperty != null)
            {
                meshCollider.meshColliderProperty          = meshCollider.edittingMeshCollidertProperty;
                meshCollider.edittingMeshCollidertProperty = null;
                Cleanup(meshCollider);
                meshCollider.cleanupModified = false;
                meshCollider.isDebug         = false;
                Debug.Log("Cleanuped.");
            }
        }
        if (GUILayout.Button("Process"))
        {
            if (meshCollider.edittingMeshCollidertProperty != null)
            {
                float beginTime = Time.realtimeSinceStartup;
                meshCollider.meshColliderProperty          = meshCollider.edittingMeshCollidertProperty;
                meshCollider.edittingMeshCollidertProperty = null;
                Process(meshCollider);
                meshCollider.cleanupModified = false;
                meshCollider.isDebug         = false;
                float endTime = Time.realtimeSinceStartup;
                Debug.Log("Processed.[" + (endTime - beginTime) + " sec]");
            }
        }
        EditorGUILayout.EndHorizontal();
    }