插件Graph And Chart 1.91版本扩展

本文详细介绍如何在Unity中自定义图表的轴格式,包括时间、日期、百分比等多种显示方式,通过修改脚本实现更灵活的数据展示。

本人Unity版本为2019.1.8f1,尽量使用同样版本。

扩展的内容是:插件中的2D表格Graph的横轴和纵轴的坐标值,希望可以按周、百分比、小时等来展示

1.将脚本AxisFormat中的内容修改为如下内容

public enum AxisFormat
    {
        /// <summary>
        /// 浮点类型数值
        /// </summary>
        Number,
        /// <summary>
        /// 12:12:36 这样
        /// </summary>
        Time,
        /// <summary>
        /// 2020/7/22 这样
        /// </summary>
        Date,
        /// <summary>
        /// 2020/7/22  00:00 这样子展示
        /// </summary>
        DateTime,
        /// <summary>
        /// 星期一 这样子展示
        /// </summary>
        WeekMode,
        /// <summary>
        /// 30% 这样子展示
        /// </summary>
        PerscentMode,
        /// <summary>
        /// 7:00 这样子展示
        /// </summary>
        HourMode,
    }

2.需要自己扩展ChartAdancedSettings,直接复制粘贴覆盖即可,脚本内容如下

   [Serializable]
    class ChartAdancedSettings
    {
        private static ChartAdancedSettings mInstance;
        public static ChartAdancedSettings Instance
        {
            get
            {
                if (mInstance == null)
                    mInstance = new ChartAdancedSettings();
                return mInstance;
            }
        }

        private static string[] FractionDigits = new string[]
        {
            "{0:0}",
            "{0:0.#}",
            "{0:0.##}",
            "{0:0.###}",
            "{0:0.####}",
            "{0:0.#####}",
            "{0:0.######}",
            "{0:0.#######}",
        };

        [Range(0, 7)]
        public int ValueFractionDigits = 2;
        [Range(0, 7)]
        public int AxisFractionDigits = 2;

        private string InnerFormat(string format,double val)
        {
            try
            {
                return string.Format(format, val);
            }
            catch
            {

            }
            return " ";
        }

        string getFormat(int value)
        {
            value = Mathf.Clamp(value, 0, 7);
            return FractionDigits[value];
        }

        public string FormatFractionDigits(int digits, double val, string format = null)
        {
            if (String.IsNullOrEmpty(format))
                return InnerFormat(getFormat(digits), val);
            return InnerFormat(format, val);
        }

        string getWeekFormat(int value)
        {
            switch (value)
            {
                case 1:
                    return "周一";
                case 2:
                    return "周二";
                case 3:
                    return "周三";
                case 4:
                    return "周四";
                case 5:
                    return "周五";
                case 6:
                    return "周六";
                case 7:
                    return "周日";
                default:
                    return " ";
            }
        }

        //public string FormatFractionDigits(int digits, double val)
        //{
        //    return InnerFormat(getFormat(digits), val);
        //}

        public string FormatFractionWeeks(int digits)
        {
            return getWeekFormat(digits);
        }

        public string FormatFractionPerscent(int digits, double val)
        {
            return (InnerFormat(getFormat(digits), val) + "%");
        }

        public string FormatFractionHourMode(int digits, double val)
        {
            return (InnerFormat(getFormat(digits), val) + ":00");
        }

    }

3.需要自己扩展ScrollableAxisChart脚本中的函数StringFromAxisFormat,将其修改为以下内容

  protected string StringFromAxisFormat(DoubleVector3 val, AxisBase axis, int fractionDigits,bool isX)
        {
            val.z = 0;
            double itemVal = isX ? val.x : val.y;
            var dic = VectorValueToStringMap;

            KeyValuePair<string,string> res;
       //     Debug.Log("try get " + val + " count is " + dic.Count);
            if (dic.TryGetValue(val, out res))
            {
                if (isX && res.Key != null)
                    return res.Key;
                if (isX == false && res.Value != null)
                    return res.Value;
            }
            if (axis == null)
                return ChartAdancedSettings.Instance.FormatFractionDigits(fractionDigits, itemVal, CustomNumberFormat);
            
            string toSet = "";
            if (axis.Format == AxisFormat.Number)
                toSet = ChartAdancedSettings.Instance.FormatFractionDigits(fractionDigits, itemVal, CustomNumberFormat);
            else
            {
                DateTime date = ChartDateUtility.ValueToDate(itemVal);
                if (axis.Format == AxisFormat.DateTime)
                    toSet = ChartDateUtility.DateToDateTimeString(date,CustomDateTimeFormat);
                else if (axis.Format == AxisFormat.WeekMode)
                {
                    toSet = ChartAdancedSettings.Instance.FormatFractionWeeks(int.Parse(ChartAdancedSettings.Instance.FormatFractionDigits(fractionDigits, itemVal)));
                }
                else if (axis.Format == AxisFormat.PerscentMode)
                {
                    toSet = ChartAdancedSettings.Instance.FormatFractionPerscent(fractionDigits, itemVal);
                }
                else if (axis.Format == AxisFormat.HourMode)
                {
                    toSet = ChartAdancedSettings.Instance.FormatFractionHourMode(fractionDigits, itemVal);
                }
                else
                {
                    //DateTime date = ChartDateUtility.ValueToDate(itemVal);
                    if (axis.Format == AxisFormat.DateTime)
                        toSet = ChartDateUtility.DateToDateTimeString(date, toSet);
                    else
                    {
                        if (axis.Format == AxisFormat.Date)
                            toSet = ChartDateUtility.DateToDateString(date);
                        else
                            toSet = ChartDateUtility.DateToTimeString(date);
                    }
                    //if (axis.Format == AxisFormat.Date)
                    //    toSet = ChartDateUtility.DateToDateString(date);
                    //else
                    //    toSet = ChartDateUtility.DateToTimeString(date);
                }
            }
            return toSet;
        }

4.脚本修改完成后,回到场景面板

这个时候,就可以进行格式的调整了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜皮肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值