Json3:优化 UI保存设置以及初始化

 public class SliderData
    {
        public string SliderName;
        public float Value;
    }
public class ToggleData
    {
        public string ToggleName;
        public int Option;
    }
public class UIData 
    {
        public List<SliderData> sliderdata = new List<SliderData>();
        public List<ToggleData> toggledata = new List<ToggleData>();
    }
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using KorxGame.common;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using LitJson;

namespace KorxGame
{
    /// <summary>
    /// 
    /// </summary>
    public class JsonData : MonoSingleton<JsonData>
    {

        public Slider[] allSliders;
        public Toggle[] allToggles;

        private Dictionary<string, Slider> dic_sliders = new Dictionary<string, Slider>();
        private Dictionary<string, Toggle> dic_toggles = new Dictionary<string, Toggle>();

        void Start()
        {
            Dic_UIAddAndExamine();
            
            ReadJson();

        }
        Slider[] FindAllSlider()
        {
            Slider[] slides = transform.GetComponentsInChildren<Slider>();
            return slides;
        }//查找所有slider

        Toggle[] FindAllToggle()// 查找所有toggle并且 toggleGroup为空时   记录  0:true  1:false
        {
            Toggle[] toggles = GetComponentsInChildren<Toggle>();
            List<Toggle> toggleList = toggles.ToList();
            for (int i = toggleList.Count -1; i >= 0; i--)
            {
                if (toggleList[i].group != null)
                {
                    toggleList.Remove(toggleList[i]);
                }
            }
            return toggleList.ToArray();
        }

        ToggleGroup[] FindAllToggleGroup()
        {
            ToggleGroup[] tg = GetComponentsInChildren<ToggleGroup>();
            return tg;
        }

        void Dic_UIAddAndExamine() //检测所有ui是否重名 并添加到字典中
        {
            allSliders = FindAllSlider();
            allToggles = FindAllToggle();

            for (int i = 0; i < allSliders.Length; i++)
            {
                //检测slider重复名
                if (dic_sliders.Keys.Contains(allSliders[i].name))
                    Debug.LogWarning("有重复slider名:" + allSliders[i]);
                else
                {
                    dic_sliders.Add(allSliders[i].name, allSliders[i]);
                }
            }
            //检测toggle重复名
            for (int i = 0; i < allToggles.Length; i++)
            {
                if (dic_toggles.Keys.Contains(allToggles[i].name))
                    Debug.LogWarning("有重复toggle名:" + allToggles[i]);
                else
                {
                    dic_toggles.Add(allToggles[i].name, allToggles[i]);
                }
            }
        }
        public void InitAllJsonData()//保存按钮的事件方法
        {
            UIData uidata = new UIData();
            //Dictionary<string, Slider> dic_sliders = new Dictionary<string, Slider>();

            if (!File.Exists(Application.dataPath + "/UIData.json"))
            {
                File.CreateText(Application.dataPath + "/UIData.json");
            }
            
            List<SliderData> sliderdatas = new List<SliderData>();
            List<ToggleData> toggledatas = new List<ToggleData>();

            for (int i = 0; i < allSliders.Length; i++)
            {
                SliderData sn = new SliderData();

                sn.SliderName = allSliders[i].name;
                sn.Value = allSliders[i].value;
                if (!sliderdatas.Contains(sn))
                {
                    uidata.sliderdata.Add(sn);
                    sliderdatas.Add(sn);
                }
               
            }
            //检测toggle重复名
            for (int i = 0; i < allToggles.Length; i++)
            {
                ToggleData td = new ToggleData();

                td.ToggleName = allToggles[i].name;
                td.Option = allToggles[i].isOn?0:1;
                if (!toggledatas.Contains(td))
                {
                    uidata.toggledata.Add(td);
                    toggledatas.Add(td);
                }
            }
            //写入slider数据
            string jsonData = "{\"SliderData\":[\n";
            for (int i = 0; i < uidata.sliderdata.Count; i++)
            {
               
                if (i == uidata.sliderdata.Count - 1)
                {
                    jsonData += JsonUtility.ToJson(uidata.sliderdata[i]) + "\n";
                    break;
                }
                jsonData += JsonUtility.ToJson(uidata.sliderdata[i]) + "\n,";
            }
            jsonData += "]";
            //写入toggle数据  先判断list是否为空 ,每种情况格式不同,严格控制json数据格式
            if (uidata.toggledata.Count != 0)
            {
                jsonData += ",\n\"ToggleData\":[\n";

                for (int i = 0; i < uidata.toggledata.Count; i++)
                {

                    if (i == uidata.toggledata.Count - 1)
                    {
                        jsonData += JsonUtility.ToJson(uidata.toggledata[i]) + "\n";
                        break;
                    }
                    jsonData += JsonUtility.ToJson(uidata.toggledata[i]) + "\n,";
                }

                jsonData += "]";
            }

            jsonData += "}";

            StreamWriter sw = new StreamWriter(Application.dataPath + "/UIData.json");
            sw.WriteLine(jsonData);
            //注意写入数据以后关闭
            sw.Close();
            AssetDatabase.Refresh();//刷新 不写可以切换软件自动刷新
        }

        void ReadJson()
        {
            LitJson.JsonData jsondata = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/UIData.json"));
            for (int i = 0; i < jsondata["SliderData"].Count; i++)
            {
                //print(jsondata["SliderData"][i]["SliderName"] + ":" + jsondata["SliderData"][i]["Value"]);
                //TODO:读取json到UI
                double d = (double) jsondata["SliderData"][i]["Value"];
                float value = Mathf.Round((float)d * 100) / 100;
                dic_sliders[(string) jsondata["SliderData"][i]["SliderName"]].value = value;

            }
            for (int i = 0; i < jsondata["ToggleData"].Count; i++)
            {
                //print(jsondata["ToggleData"][i]["ToggleName"] + ":" + jsondata["ToggleData"][i]["Option"]);

                int value = (int)jsondata["ToggleData"][i]["Option"];
                dic_toggles[(string)jsondata["ToggleData"][i]["ToggleName"]].isOn = value==0?true:false;
            }
        }

        void WriteJson_slider(Slider slider,float value)
        {
            LitJson.JsonData jsondata = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/UIData.json"));

            for (int i = 0; i < jsondata["SliderData"].Count; i++)
            {
                if (slider.name == (string)jsondata["SliderData"][i]["SliderName"])
                {
                    jsondata["SliderData"][i]["Value"] = value;

                    StreamWriter sw = new StreamWriter(Application.dataPath + "/UIData.json");
                    sw.WriteLine(jsondata.ToJson());
                    //注意写入数据以后关闭
                    sw.Close();
                    AssetDatabase.Refresh();//刷新 不写可以切换软件自动刷新
                }

            }
           
        }

        void WriteJson_toggle(Toggle toggle, bool value)
        {
            LitJson.JsonData jsondata = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/UIData.json"));
            for (int i = 0; i < jsondata["ToggleData"].Count; i++)
            {
                if (toggle.name == (string)jsondata["ToggleData"][i]["ToggleName"])
                {
                    jsondata["ToggleData"][i]["Option"] = value;

                    StreamWriter sw = new StreamWriter(Application.dataPath + "/UIData.json");
                    sw.WriteLine(jsondata.ToJson());
                    //注意写入数据以后关闭
                    sw.Close();
                    AssetDatabase.Refresh();//刷新 不写可以切换软件自动刷新
                }

            }
        }
        void AddListerner()
        {
            for (int i = 0; i < allSliders.Length; i++)
            {
                Slider slider = allSliders[i];
                slider.onValueChanged.AddListener((float value)=>{WriteJson_slider(slider,value);} );
            }
            for (int i = 0; i < allToggles.Length; i++)
            {
                Toggle toggle = allToggles[i];
                toggle.onValueChanged.AddListener((bool value) => { WriteJson_toggle(toggle, value); });
            }
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值