static float DrawFieldSubData(float x, float y, float w, float h, string fiName, ref object data, float labelSize, bool check = true)
    {
        float hSize = h;

        Rect   rt = new Rect(x, y, w, h);
        string name;

        string typeName = data.GetType().ToString().Replace("UnityEngine.", "");

        if (data is int)
        {
            int value = (int)data;
            name  = "(int) " + fiName;
            value = GUITools.IntField(rt, name, value, labelSize);
            data  = value;
        }
        else if (data is float)
        {
            float value = (float)data;
            name  = "(float) " + fiName;
            value = GUITools.FloatField(rt, name, value, labelSize);
            data  = value;
        }
        else if (data is long)
        {
            long value = (long)data;
            name  = "(long) " + fiName;
            value = GUITools.LongField(rt, name, value, labelSize);
            data  = value;
        }
        else if (data is double)
        {
            double value = (double)data;
            name  = "(double) " + fiName;
            value = GUITools.DoubleField(rt, name, value, labelSize);
            data  = value;
        }
        else if (data is string)
        {
            string value = data as string;
            name  = "(string) " + fiName;
            value = GUITools.TextField(rt, name, value, labelSize);
            data  = value;
        }
        else if (data is bool)
        {
            bool value = (bool)data;
            name = "(bool) " + fiName;

            Rect rtSub = new Rect(rt.x, rt.y + 6, labelSize, rt.height - 6);
            GUITools.LabelField(rtSub, name);
            rtSub.x    += rtSub.width;
            rtSub.width = rt.width - (rtSub.x - rt.x);
            value       = EditorGUI.ToggleLeft(rtSub, "", value);
            data        = value;
        }
        else if (data is System.Enum)
        {
            object value = data;
            name  = "(" + data.GetType() + ") " + fiName;
            value = GUITools.EnumPopup(rt, name, (System.Enum)value, labelSize);
            data  = value;
        }
        else if (data is AnimationCurve)
        {
            AnimationCurve value = data as AnimationCurve;
            name  = "(" + typeName + ") " + fiName;
            value = GUITools.CurveField(rt, name, value, labelSize);
            data  = value;
        }
        else if (data is Color)
        {
            Color value = (Color)data;
            name  = "(" + typeName + ") " + fiName;
            value = GUITools.ColorField(rt, name, value, labelSize);
            data  = value;
        }
        else if (data is System.DateTime)
        {
            System.DateTime value = (System.DateTime)data;
            int             year = value.Year, month = value.Month, day = value.Day, hour = value.Hour, minute = value.Minute, second = value.Second, millisecond = value.Millisecond;
            int             dummy, flush = 0;
            Rect            rtSub = rt;

            name = "(System.DateTime)" + fiName;

            rtSub.width = 300;
            dummy       = year;
            year        = GUITools.IntField(rtSub, name, year, labelSize);
            if (year != dummy)
            {
                flush = 1;
            }
            rtSub.x += rtSub.width;

            rtSub.width = 10;
            GUITools.LabelField(rtSub, "/");
            rtSub.x += rtSub.width;

            rtSub.width = 30;
            dummy       = month;
            month       = GUITools.IntField(rtSub, "월", month, 0);
            if (month != dummy)
            {
                flush = 1;
            }
            rtSub.x += rtSub.width;

            rtSub.width = 10;
            GUITools.LabelField(rtSub, "/");
            rtSub.x += rtSub.width;

            rtSub.width = 30;
            dummy       = day;
            day         = GUITools.IntField(rtSub, "일", day, 0);
            if (day != dummy)
            {
                flush = 1;
            }
            rtSub.x += rtSub.width;

            rtSub.width = 30;
            GUITools.LabelField(rtSub, "-", TextAnchor.MiddleCenter);
            rtSub.x += rtSub.width;

            rtSub.width = 30;
            dummy       = hour;
            hour        = GUITools.IntField(rtSub, "시", hour, 0);
            if (hour != dummy)
            {
                flush = 1;
            }
            rtSub.x += rtSub.width;

            rtSub.width = 10;
            GUITools.LabelField(rtSub, ":");
            rtSub.x += rtSub.width;

            rtSub.width = 30;
            dummy       = minute;
            minute      = GUITools.IntField(rtSub, "분", minute, 0);
            if (minute != dummy)
            {
                flush = 1;
            }
            rtSub.x += rtSub.width;

            rtSub.width = 10;
            GUITools.LabelField(rtSub, ":");
            rtSub.x += rtSub.width;

            rtSub.width = 30;
            dummy       = second;
            second      = GUITools.IntField(rtSub, "초", second, 0);
            if (second != dummy)
            {
                flush = 1;
            }
            rtSub.x += rtSub.width;

            rtSub.width = 10;
            GUITools.LabelField(rtSub, ":");
            rtSub.x += rtSub.width;

            rtSub.width = 30;
            dummy       = millisecond;
            millisecond = GUITools.IntField(rtSub, "초2", millisecond, 0);
            if (millisecond != dummy)
            {
                flush = 1;
            }
            rtSub.x += rtSub.width;

            if (flush == 1)
            {
                value = new System.DateTime(year, month, day, hour, minute, second, millisecond);
            }
            data = value;
        }
        else
        {
            if (check == true)
            {
                name = "(" + typeName + ")" + fiName;
                GUITools.LabelField(rt, name);
            }
        }

        return(hSize);
    }