// 曲線を描画する
        private void DrawCurve(SoftTransformTween tTarget, float tCheckFactor, SoftTransformTween.ProcessType tProcessType, SoftTransformTween.EaseType tEaseType, AnimationCurve tAnimationCurve)
        {
            Rect tRect = GUILayoutUtility.GetRect(Screen.width - 64, 102f);

            float x = 0;

            x = (tRect.width - 52f) * 0.5f;
            if (x < 0)
            {
                x = 0;
            }
            tRect.x     = x;
            tRect.width = 52f;

            EditorGUI.DrawRect(new Rect(tRect.x + 0, tRect.y + 0, tRect.width - 0, tRect.height - 0), new Color(1.0f, 1.0f, 1.0f, 1.0f));
            EditorGUI.DrawRect(new Rect(tRect.x + 1, tRect.y + 1, tRect.width - 2, tRect.height - 2), new Color(0.2f, 0.2f, 0.2f, 1.0f));

            DrawLine(0, 25, 49, 25, 0xFF7F7F7F, tRect.x + 1.0f, tRect.y + 1.0f);
            DrawLine(0, 74, 49, 74, 0xFF7F7F7F, tRect.x + 1.0f, tRect.y + 1.0f);
            DrawLine(25, 99, 25, 0, 0xFF4F4F4F, tRect.x + 1.0f, tRect.y + 1.0f);
            DrawLine(0, 49, 49, 49, 0xFF4F4F4F, tRect.x + 1.0f, tRect.y + 1.0f);

            int px = 0, py = 0;
            int ox = 0, oy = 0;

            for (px = 0; px < 50; px++)
            {
                py = ( int )SoftTransformTween.GetValue(0, 50, ( float )px * 0.02f, tProcessType, tEaseType, tAnimationCurve);

                if (px == 0)
                {
                    ox = px;
                    oy = py;
                }
                else
                {
                    DrawLine(ox, ((74 - oy) / 1) + 0, px, ((74 - py) / 1) + 0, 0xFF00FF00, tRect.x + 1.0f, tRect.y + 1.0f);

                    ox = px;
                    oy = py;
                }
            }

            px = ( int )((50.0f * tCheckFactor) + 0.5f);
            DrawLine(px, 99, px, 0, 0xFFFF0000, tRect.x + 1.0f, tRect.y + 1.0f);
        }
        // スンスペクター描画
        public override void OnInspectorGUI()
        {
            // とりあえずデフォルト
            //		DrawDefaultInspector() ;

            //--------------------------------------------

            // ターゲットのインスタンス
            SoftTransformTween tTarget = target as SoftTransformTween;

            EditorGUILayout.Separator();                // 少し区切りスペース

            // 識別子
            GUI.backgroundColor = Color.cyan;
            string tIdentity = EditorGUILayout.TextField("Identity", tTarget.identity);

            GUI.backgroundColor = Color.white;
            if (tIdentity != tTarget.identity)
            {
                Undo.RecordObject(tTarget, "SoftTransformTween : Identity Change");                     // アンドウバッファに登録
                tTarget.identity = tIdentity;
                EditorUtility.SetDirty(tTarget);
            }

            // ディレイ
            float tDelay = EditorGUILayout.FloatField("Delay", tTarget.delay);

            if (tDelay != tTarget.delay)
            {
                Undo.RecordObject(tTarget, "SoftTransformTween : Delay Change");                        // アンドウバッファに登録
                tTarget.delay = tDelay;
                EditorUtility.SetDirty(tTarget);
            }

            // デュアレーション
            float tDuration = EditorGUILayout.FloatField("Duration", tTarget.duration);

            if (tDuration != tTarget.duration)
            {
                Undo.RecordObject(tTarget, "SoftTransformTween : Duration Change");                     // アンドウバッファに登録
                tTarget.duration = tDuration;
                EditorUtility.SetDirty(tTarget);
            }

            //------------------------------------------------

            EditorGUILayout.Separator();                // 少し区切りスペース

            // ワイドモードを有効にする
            bool tWideMode = EditorGUIUtility.wideMode;

            EditorGUIUtility.wideMode = true;


            GUILayout.BeginHorizontal();                // 横並び
            {
                if (tTarget.positionEnabled == false)
                {
                    GUILayout.Label("Position Enabled" /*, GUILayout.Width( 116f ) */);
                }
                else
                {
                    tTarget.positionFoldOut = EditorGUILayout.Foldout(tTarget.positionFoldOut, "Position Enabled");
                }

                bool tPositionEnabled = EditorGUILayout.Toggle(tTarget.positionEnabled, GUILayout.Width(24f));
                if (tPositionEnabled != tTarget.positionEnabled)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Position Enabled Change");                         // アンドウバッファに登録
                    tTarget.positionEnabled = tPositionEnabled;
                    EditorUtility.SetDirty(tTarget);
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了

            if (tTarget.positionEnabled == true && tTarget.positionFoldOut == true)
            {
                // ポジション

                Vector3 tPositionFrom = EditorGUILayout.Vector3Field(" From", tTarget.positionFrom /*, GUILayout.MaxWidth( 100f ) */);
                if (tPositionFrom != tTarget.positionFrom)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Position From Change");                            // アンドウバッファに登録
                    tTarget.positionFrom = tPositionFrom;
                    EditorUtility.SetDirty(tTarget);
                }

                Vector3 tPositionTo = EditorGUILayout.Vector3Field(" To", tTarget.positionTo /*, GUILayout.MaxWidth( 100f ) */);
                if (tPositionTo != tTarget.positionTo)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Position To Change");                              // アンドウバッファに登録
                    tTarget.positionTo = tPositionTo;
                    EditorUtility.SetDirty(tTarget);
                }

                // プロセスタイプ
                SoftTransformTween.ProcessType tPositionProcessType = (SoftTransformTween.ProcessType)EditorGUILayout.EnumPopup(" Process Type", tTarget.positionProcessType);
                if (tPositionProcessType != tTarget.positionProcessType)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Position Process Type Change");                            // アンドウバッファに登録
                    tTarget.positionProcessType = tPositionProcessType;
                    EditorUtility.SetDirty(tTarget);
                }

                if (tTarget.positionProcessType == SoftTransformTween.ProcessType.Ease)
                {
                    // イーズタイプ
                    SoftTransformTween.EaseType tPositionEaseType = (SoftTransformTween.EaseType)EditorGUILayout.EnumPopup(" EaseType", tTarget.positionEaseType);
                    if (tPositionEaseType != tTarget.positionEaseType)
                    {
                        Undo.RecordObject(tTarget, "SoftTransformTween : Position Ease Type Change");                                   // アンドウバッファに登録
                        tTarget.positionEaseType = tPositionEaseType;
                        EditorUtility.SetDirty(tTarget);
                    }
                }
                else
                if (tTarget.positionProcessType == SoftTransformTween.ProcessType.AnimationCurve)
                {
                    AnimationCurve tAnimationCurve = new AnimationCurve(tTarget.positionAnimationCurve.keys);
                    tTarget.positionAnimationCurve = EditorGUILayout.CurveField(" Animation Curve", tAnimationCurve, GUILayout.Width(170f), GUILayout.Height(52f));
                }

                if (tTarget.isChecker == true)
                {
                    DrawCurve(tTarget, tTarget.checkFactor, tTarget.positionProcessType, tTarget.positionEaseType, tTarget.positionAnimationCurve);
                }

                if (tTarget.GetComponent <Transform>() == null)
                {
                    EditorGUILayout.HelpBox(GetMessage("TransformNone"), MessageType.Warning, true);
                }
            }

            //--------------

            GUILayout.BeginHorizontal();                // 横並び
            {
                if (tTarget.rotationEnabled == false)
                {
                    GUILayout.Label("Rotation Enabled" /*, GUILayout.Width( 116f ) */);
                }
                else
                {
                    tTarget.rotationFoldOut = EditorGUILayout.Foldout(tTarget.rotationFoldOut, "Rotation Enabled");
                }

                bool tRotationEnabled = EditorGUILayout.Toggle(tTarget.rotationEnabled, GUILayout.Width(24f));
                if (tRotationEnabled != tTarget.rotationEnabled)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Rotation Enabled Change");                         // アンドウバッファに登録
                    tTarget.rotationEnabled = tRotationEnabled;
                    EditorUtility.SetDirty(tTarget);
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了

            if (tTarget.rotationEnabled == true && tTarget.rotationFoldOut == true)
            {
                // ローテーション

                Vector3 tRotationFrom = EditorGUILayout.Vector3Field(" From", tTarget.rotationFrom);
                if (tRotationFrom != tTarget.rotationFrom)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Rotation From Change");                            // アンドウバッファに登録
                    tTarget.rotationFrom = tRotationFrom;
                    EditorUtility.SetDirty(tTarget);
                }

                Vector3 tRotationTo = EditorGUILayout.Vector3Field(" To", tTarget.rotationTo);
                if (tRotationTo != tTarget.rotationTo)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Rotation To Change");                              // アンドウバッファに登録
                    tTarget.rotationTo = tRotationTo;
                    EditorUtility.SetDirty(tTarget);
                }

                // プロセスタイプ
                SoftTransformTween.ProcessType tRotationProcessType = (SoftTransformTween.ProcessType)EditorGUILayout.EnumPopup(" Process Type", tTarget.rotationProcessType);
                if (tRotationProcessType != tTarget.rotationProcessType)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Rotation Process Type Change");                            // アンドウバッファに登録
                    tTarget.rotationProcessType = tRotationProcessType;
                    EditorUtility.SetDirty(tTarget);
                }

                if (tTarget.rotationProcessType == SoftTransformTween.ProcessType.Ease)
                {
                    // イーズタイプ
                    SoftTransformTween.EaseType tRotationEaseType = (SoftTransformTween.EaseType)EditorGUILayout.EnumPopup(" EaseType", tTarget.rotationEaseType);
                    if (tRotationEaseType != tTarget.rotationEaseType)
                    {
                        Undo.RecordObject(tTarget, "SoftTransformTween : Rotation Ease Type Change");                                   // アンドウバッファに登録
                        tTarget.rotationEaseType = tRotationEaseType;
                        EditorUtility.SetDirty(tTarget);
                    }
                }
                else
                if (tTarget.rotationProcessType == SoftTransformTween.ProcessType.AnimationCurve)
                {
                    AnimationCurve tAnimationCurve = new AnimationCurve(tTarget.rotationAnimationCurve.keys);
                    tTarget.rotationAnimationCurve = EditorGUILayout.CurveField(" Animation Curve", tAnimationCurve, GUILayout.Width(170f), GUILayout.Height(52f));
                }

                if (tTarget.isChecker == true)
                {
                    DrawCurve(tTarget, tTarget.checkFactor, tTarget.rotationProcessType, tTarget.rotationEaseType, tTarget.rotationAnimationCurve);
                }

                if (tTarget.GetComponent <Transform>() == null)
                {
                    EditorGUILayout.HelpBox(GetMessage("TransformNone"), MessageType.Warning, true);
                }
            }

            //--------------

            GUILayout.BeginHorizontal();                // 横並び
            {
                if (tTarget.scaleEnabled == false)
                {
                    GUILayout.Label("Scale Enabled" /*, GUILayout.Width( 116f ) */);
                }
                else
                {
                    tTarget.scaleFoldOut = EditorGUILayout.Foldout(tTarget.scaleFoldOut, "Scale Enabled");
                }

                bool tScaleEnabled = EditorGUILayout.Toggle(tTarget.scaleEnabled, GUILayout.Width(24f));
                if (tScaleEnabled != tTarget.scaleEnabled)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Scale Enabled Change");                            // アンドウバッファに登録
                    tTarget.scaleEnabled = tScaleEnabled;
                    EditorUtility.SetDirty(tTarget);
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了

            if (tTarget.scaleEnabled == true && tTarget.scaleFoldOut == true)
            {
                // スケール

                Vector3 tScaleFrom = EditorGUILayout.Vector3Field(" From", tTarget.scaleFrom);
                if (tScaleFrom != tTarget.scaleFrom)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Scale From Change");                               // アンドウバッファに登録
                    tTarget.scaleFrom = tScaleFrom;
                    EditorUtility.SetDirty(tTarget);
                }

                Vector3 tScaleTo = EditorGUILayout.Vector3Field(" To", tTarget.scaleTo);
                if (tScaleTo != tTarget.scaleTo)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Scale To Change");                         // アンドウバッファに登録
                    tTarget.scaleTo = tScaleTo;
                    EditorUtility.SetDirty(tTarget);
                }

                // プロセスタイプ
                SoftTransformTween.ProcessType tScaleProcessType = (SoftTransformTween.ProcessType)EditorGUILayout.EnumPopup(" Process Type", tTarget.scaleProcessType);
                if (tScaleProcessType != tTarget.scaleProcessType)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Scale Process Type Change");                               // アンドウバッファに登録
                    tTarget.scaleProcessType = tScaleProcessType;
                    EditorUtility.SetDirty(tTarget);
                }

                if (tTarget.scaleProcessType == SoftTransformTween.ProcessType.Ease)
                {
                    // イーズタイプ
                    SoftTransformTween.EaseType tScaleEaseType = (SoftTransformTween.EaseType)EditorGUILayout.EnumPopup(" EaseType", tTarget.scaleEaseType);
                    if (tScaleEaseType != tTarget.scaleEaseType)
                    {
                        Undo.RecordObject(tTarget, "SoftTransformTween : Scale Ease Type Change");                              // アンドウバッファに登録
                        tTarget.scaleEaseType = tScaleEaseType;
                        EditorUtility.SetDirty(tTarget);
                    }
                }
                else
                if (tTarget.scaleProcessType == SoftTransformTween.ProcessType.AnimationCurve)
                {
                    AnimationCurve tAnimationCurve = new AnimationCurve(tTarget.scaleAnimationCurve.keys);
                    tTarget.scaleAnimationCurve = EditorGUILayout.CurveField(" Animation Curve", tAnimationCurve, GUILayout.Width(170f), GUILayout.Height(52f));
                }

                if (tTarget.isChecker == true)
                {
                    DrawCurve(tTarget, tTarget.checkFactor, tTarget.scaleProcessType, tTarget.scaleEaseType, tTarget.scaleAnimationCurve);
                }

                if (tTarget.GetComponent <Transform>() == null)
                {
                    EditorGUILayout.HelpBox(GetMessage("TransformNone"), MessageType.Warning, true);
                }
            }


            // ワイドモードを元に戻す
            EditorGUIUtility.wideMode = tWideMode;


            EditorGUILayout.Separator();                // 少し区切りスペース

            //--------------------------------------------------------------------

            if (tTarget.enabled == true)
            {
                GUILayout.BeginHorizontal();                    // 横並び
                {
                    // チェック
                    GUILayout.Label("Checker (Editor Only)", GUILayout.Width(150f));

                    bool tIsChecker = EditorGUILayout.Toggle(tTarget.isChecker);
                    if (tIsChecker != tTarget.isChecker)
                    {
                        if (tIsChecker == true)
                        {
                            SoftTransformTween[] tTweenList = tTarget.gameObject.GetComponents <SoftTransformTween>();
                            if (tTweenList != null && tTweenList.Length > 0)
                            {
                                for (int i = 0; i < tTweenList.Length; i++)
                                {
                                    if (tTweenList[i] != tTarget)
                                    {
                                        if (tTweenList[i].isChecker == true)
                                        {
                                            tTweenList[i].isChecker = false;
                                        }
                                    }
                                }
                            }
                        }

                        Undo.RecordObject(tTarget, "SoftTransformTween : Checker Change");                              // アンドウバッファに登録
                        tTarget.isChecker = tIsChecker;
                        EditorUtility.SetDirty(tTarget);
                    }
                }
                GUILayout.EndHorizontal();                              // 横並び終了

                if (tTarget.isChecker == true)
                {
                    GUILayout.BeginHorizontal();                        // 横並び
                    {
                        float tCheckFactor = EditorGUILayout.Slider(tTarget.checkFactor, 0, 1);
                        if (tCheckFactor != tTarget.checkFactor)
                        {
                            tTarget.checkFactor = tCheckFactor;
                        }
                    }
                    GUILayout.EndHorizontal();                                  // 横並び終了
                }
            }

            //--------------------------------------------------------------------

            EditorGUILayout.Separator();                // 少し区切りスペース

            // バリュータイプ
            SoftTransformTween.ValueType tValueType = (SoftTransformTween.ValueType)EditorGUILayout.EnumPopup("ValueType", tTarget.valueType);
            if (tValueType != tTarget.valueType)
            {
                Undo.RecordObject(tTarget, "SoftTransformTween : Value Type Change");                           // アンドウバッファに登録
                tTarget.valueType = tValueType;
                EditorUtility.SetDirty(tTarget);
            }

            GUILayout.BeginHorizontal();                // 横並び
            {
                // ループ
                GUILayout.Label("Loop", GUILayout.Width(116f));

                bool tLoop = EditorGUILayout.Toggle(tTarget.loop);
                if (tLoop != tTarget.loop)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Loop Change");                             // アンドウバッファに登録
                    tTarget.loop = tLoop;
                    EditorUtility.SetDirty(tTarget);
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了

            if (tTarget.loop == true)
            {
                GUILayout.BeginHorizontal();                    // 横並び
                {
                    // リバース
                    GUILayout.Label("Reverse", GUILayout.Width(116f));

                    bool tReverse = EditorGUILayout.Toggle(tTarget.reverse);
                    if (tReverse != tTarget.reverse)
                    {
                        Undo.RecordObject(tTarget, "SoftTransformTween : Reverse Change");                              // アンドウバッファに登録
                        tTarget.reverse = tReverse;
                        EditorUtility.SetDirty(tTarget);
                    }
                }
                GUILayout.EndHorizontal();                              // 横並び終了
            }

            GUILayout.BeginHorizontal();                // 横並び
            {
                // イグノアタイムスケール
                GUILayout.Label("Ignore Time Scale", GUILayout.Width(116f));

                bool tIgnoreTimeScale = EditorGUILayout.Toggle(tTarget.ignoreTimeScale);
                if (tIgnoreTimeScale != tTarget.ignoreTimeScale)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Ignore Time Scale Change");                        // アンドウバッファに登録
                    tTarget.ignoreTimeScale = tIgnoreTimeScale;
                    EditorUtility.SetDirty(tTarget);
                }
            }
            GUILayout.EndHorizontal();                  // 横並び終了

            GUILayout.BeginHorizontal();                // 横並び
            {
                // プレイオンアウェイク
                GUILayout.Label("Play On Awake", GUILayout.Width(116f));

                bool tPlayOnAwake = EditorGUILayout.Toggle(tTarget.playOnAwake);
                if (tPlayOnAwake != tTarget.playOnAwake)
                {
                    Undo.RecordObject(tTarget, "SoftTransformTween : Play On Awake Change");                            // アンドウバッファに登録
                    tTarget.playOnAwake = tPlayOnAwake;
                    EditorUtility.SetDirty(tTarget);
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了

//			GUILayout.BeginHorizontal() ;	// 横並び
//			{
//				// プレイオンアウェイク
//				GUILayout.Label( "Interaction Disable In Playing", GUILayout.Width( 180f ) ) ;
//
//				bool tInteractionDisableInPlaying = EditorGUILayout.Toggle( tTarget.interactionDisableInPlaying ) ;
//				if( tInteractionDisableInPlaying != tTarget.interactionDisableInPlaying )
//				{
//					Undo.RecordObject( tTarget, "SoftTransformTween : Interaction Disable In Playing Change" ) ;	// アンドウバッファに登録
//					tTarget.interactionDisableInPlaying = tInteractionDisableInPlaying ;
//					EditorUtility.SetDirty( tTarget ) ;
//				}
//			}
//			GUILayout.EndHorizontal() ;		// 横並び終了

//			if( tTarget.interactionDisableInPlaying == true )
//			{
//			}

            GUILayout.BeginHorizontal();                // 横並び
            {
                // イズプレイング
                GUILayout.Label("Is Playing", GUILayout.Width(116f));

                EditorGUILayout.Toggle(tTarget.isPlaying);
            }
            GUILayout.EndHorizontal();                  // 横並び終了

            EditorGUILayout.Separator();                // 少し区切りスペース


            // デリゲートの設定状況
            SerializedObject tSO = new SerializedObject(tTarget);

            SerializedProperty tSP = tSO.FindProperty("onFinished");

            if (tSP != null)
            {
                EditorGUILayout.PropertyField(tSP);
            }
            tSO.ApplyModifiedProperties();
        }