protected void DrawBase()
        {
            SerializedProperty typeProperty = serializedObject.FindProperty("_Type");

            EditorGUILayout.PropertyField(typeProperty);
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_Duration"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("_Curve"));
            if (!_Target.fixedUpdate && !_Target.forceRealtime)
            {
                EditorGUILayout.PropertyField(serializedObject.FindProperty("_UseRealtime"));
            }

            TweenBase.Type type = EnumUtility.GetValueFromIndex <TweenBase.Type>(typeProperty.enumValueIndex);
            if (type != TweenBase.Type.Once)
            {
                SerializedProperty repeatUntilTransition = serializedObject.FindProperty("_RepeatUntilTransition");
                EditorGUILayout.PropertyField(repeatUntilTransition);

                SerializedProperty    primitiveTypeProperty = repeatUntilTransition.FindPropertyRelative("_Type");
                FlexiblePrimitiveType primitiveType         = EnumUtility.GetValueFromIndex <FlexiblePrimitiveType>(primitiveTypeProperty.enumValueIndex);
                switch (primitiveType)
                {
                case FlexiblePrimitiveType.Constant:
                {
                    SerializedProperty valueProperty = repeatUntilTransition.FindPropertyRelative("_Value");
                    valueProperty.intValue = Mathf.Max(valueProperty.intValue, 1);
                }
                break;

                case FlexiblePrimitiveType.Random:
                {
                    SerializedProperty minProperty = repeatUntilTransition.FindPropertyRelative("_MinRange");
                    minProperty.intValue = Mathf.Max(minProperty.intValue, 1);

                    SerializedProperty maxProperty = repeatUntilTransition.FindPropertyRelative("_MaxRange");
                    maxProperty.intValue = Mathf.Max(maxProperty.intValue, 1);
                }
                break;
                }

                if (Application.isPlaying && _Target.stateMachine.currentState == _Target.state)
                {
                    Rect r = EditorGUILayout.BeginVertical();
                    EditorGUI.ProgressBar(r, (float)_Target.repeatCount / (float)_Target.repeatUntilTransition, _Target.repeatCount.ToString());
                    GUILayout.Space(16);
                    EditorGUILayout.EndVertical();
                }
            }
        }
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            EditorGUILayout.PropertyField(serializedObject.FindProperty("_Slider"));

            SerializedProperty valueProperty = serializedObject.FindProperty("_Value");

            EditorGUILayout.PropertyField(valueProperty);

            SerializedProperty    typeProperty = valueProperty.FindPropertyRelative("_Type");
            FlexiblePrimitiveType type         = EnumUtility.GetValueFromIndex <FlexiblePrimitiveType>(typeProperty.enumValueIndex);

            if (type == FlexiblePrimitiveType.Parameter)
            {
                EditorGUILayout.PropertyField(serializedObject.FindProperty("_ChangeTimingUpdate"));
            }

            serializedObject.ApplyModifiedProperties();
        }