Unity中建立文本保存数据

  public void CreateYunYD()
    {
        GameToolsManager.Instance.effectType = EFFECTTYPE.YunYD;
        CreateYunOrWu("Effect/yunwu-yd", Vector3.zero);
    }

    public void CreateYunZY()
    {
        GameToolsManager.Instance.effectType = EFFECTTYPE.YunZY;
        CreateYunOrWu("Effect/yunwu-zy", Vector3.zero);
    }

    public void CreateWU()
    {
        GameToolsManager.Instance.effectType = EFFECTTYPE.Wu;
        CreateYunOrWu("Effect/wu",Vector3.zero);
    }

    public GameObject CreateYunOrWu(string path,Vector3 vec)
    {
        GameObject parent;
        parent = GameObject.Find("Scene/Effect");
        effect = GameObject.Instantiate(Resources.Load(path)) as GameObject;
        effect.SetActive(true);
        effect.transform.SetParent(parent.transform);
       
        effect.transform.localPosition = vec;
        effect.name = effect.name.Replace("(Clone)",string.Empty);
        return effect;
        
    }
    /// <summary>
    /// 保存云和雾的数据
    /// </summary>
    public void SaveYunOrWu()
    {
        Transform child;
        GameObject parent;
        parent = GameObject.Find("Scene/Effect");
        if (IsExistTxt())
        {
            ClearEffectData();
        }
        for (int i=0; i< parent.transform.childCount; i++)
        {
            child = parent.transform.GetChild(i);
            EffectData effectData = new EffectData();
            effectData.effectName = child.name;
            effectData.vectorX = child.localPosition.x;
            effectData.vectorY = child.localPosition.y;
            effectData.vectorZ = child.localPosition.z;
            CreateTextFile("EffectData", System.Convert.ToString(effectData.effectName));
            CreateTextFile("EffectData", System.Convert.ToString(effectData.vectorX));
            CreateTextFile("EffectData", System.Convert.ToString(effectData.vectorY));
            CreateTextFile("EffectData", System.Convert.ToString(effectData.vectorZ));

        }
        ReadTextData("EffectData");
    }
    /// <summary>
    /// 清空文本中的数据
    /// </summary>
    public void ClearEffectData()
    {
        ClearData("EffectData");
    }
    /// <summary>
    /// txt文件是否存在
    /// </summary>
    /// <returns></returns>
    public bool IsExistTxt()
    {
        string path = Application.dataPath + "/Effect/EffectData.txt";
        if (!File.Exists(path))
        {
            return false;
        }
        return true;
    }
    /// <summary>
    /// 创建文本文件,并写入文本数据
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="strFileData"></param>
    public void CreateTextFile(string fileName, string strFileData)
    {
        string strWriteFileData;
        strWriteFileData = strFileData;
        string path = Application.dataPath + "/Effect/" + fileName + ".txt";
        if (!File.Exists(path))
        {
            StartCoroutine(CreatTxt(path));
        }        
        StreamWriter writer;
        writer = File.AppendText(path);
        writer.Write(strWriteFileData + "_");
        writer.Close();
    }
    IEnumerator CreatTxt(string path)
    {
        FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
        yield return fs;
        fs.Close();
    }
    /// <summary>
    /// 读取文本数据
    /// </summary>
    public string ReadTextData(string fileName)
    {
        string data;
        string path = Application.dataPath + "/Effect/" + fileName + ".txt";
        if (!File.Exists(path))
        {            
            return null;
        }
        StreamReader reader;
        reader = File.OpenText(path);
        data = reader.ReadToEnd();
        if (data != null)
        {
            reader.Close();
            Debug.Log(data);
            return data;
        }
        reader.Close();
        return data;
    }

    /// <summary>
    /// 清空已保存的数据文件
    /// </summary>
    public void ClearData(string fileName)
    {
        string path = Application.dataPath + "/Effect/" + fileName + ".txt";
        if (File.Exists(path))
        {
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write);
            fs.SetLength(0);
            fs.Close();
        }
        return;
    }
    /// <summary>
    /// 删除已经加载好的云和雾
    /// </summary>
    public void DeleteYunOrWu()
    {
        GameObject parent;
        parent = GameObject.Find("Scene/Effect");
        for (int i = 0; i < parent.transform.childCount; i++)
        {
            Destroy(parent.transform.GetChild(i).gameObject);
        }
    }
    /// <summary>
    /// 特效数据
    /// </summary>
    public struct EffectData
    {
        public string effectName;
        public double vectorX;
        public double vectorY;
        public double vectorZ;
    }
    Dictionary<int, List<float>> effectData;
    Dictionary<int, string> effectNameDic;

    /// <summary>
    /// 初始化特效数据
    /// </summary>
    public void InitEffectData()
    {
        Vector3 vec;
        string name;
        effectData = GetEffectData();
        Debug.Log("进来了吗");
        if (effectData == null)
        {
            return;
        }
        for(int i = 0; i < effectNameDic.Count; i++)
        {
            Debug.Log("进来了吗?");

            name = effectNameDic[i];
            List <float> vecData = effectData[i];
            Debug.Log(vecData[1]);
            vec = new Vector3(vecData[0],vecData[1],vecData[2]);
            StartCoroutine(CreateSaveEffect(name, vec));
        }
    }
    /// <summary>
    /// 生成特效
    /// </summary>
    /// <returns></returns>
    IEnumerator CreateSaveEffect(string name,Vector3 vec)
    {
        string fullPath = "Effect/" + name;
        yield return CreateYunOrWu(fullPath, vec);        
    }

    /// <summary>
    /// 获得特效数据
    /// </summary>
    public Dictionary<int, List<float>> GetEffectData()
    {
        bool changeList = false;
        effectData = new Dictionary<int, List<float>>();
        effectNameDic = new Dictionary<int, string>();
        string effectName = null;
        List<float> vectorData = new List<float>();
        string data = ReadTextData("EffectData");
        int count = 0;
        if(data == null)
        {
            return null;
        }
        char delimiter = '_';
        string[] stringData = data.Split(delimiter);
        for (int i = 0; i < stringData.Length - 1; i++)
        {
            if (changeList)
            {
                vectorData = new List<float>();
                changeList = false;
            }
            if (i % 4 == 0)
            {
                effectName = stringData[i];
            }
            if (i % 4 == 1)
            {
               double vectorX = System.Convert.ToDouble(stringData[i]);
                vectorData.Add((float)vectorX);
            }
            if (i % 4 == 2)
            {
                double vectorY = System.Convert.ToDouble(stringData[i]);
                vectorData.Add((float)vectorY);
            }
            if (i % 4 == 3)
            {
                double vectorZ = System.Convert.ToDouble(stringData[i]);
                vectorData.Add((float)vectorZ);
                effectData.Add(count, vectorData);
                effectNameDic.Add(count, effectName);
                vectorData = new List<float>();
                count++;
                Debug.Log(count+"计数");
            }
        }
        //Debug.Log(effectData);
        //Debug.Log(effectData[2][1]+ "effectData");
        return effectData;
    }
    RaycastHit2D hit = new RaycastHit2D();
    ParticleSystem par;
    Vector3 mousePos;
    
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameDataManager.Instance.IsMoveCamera = false;
            mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y);
            hit = Physics2D.Raycast(mousePos2D, Vector2.zero);
        }
        if (Input.GetMouseButton(0)&&hit.transform!=null&&(hit.transform.name.Equals("wu")||hit.transform.name.Equals("yunwu-yd")||hit.transform.name.Equals("yunwu-zy")))
        {
            mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y);
            //if (hit.transform != null && hit.transform.name.Equals("yunwu-yd") || hit.transform.name.Equals("yunwu-zy"))
            //{
            //    par = hit.transform.GetComponent<ParticleSystem>();
            //    par.Pause();
            //}
            if (hit.transform.name.Equals("wu")){
                hit.transform.position = mousePos2D;
            }
        }
        if (Input.GetMouseButtonUp(0) && hit.transform != null && (hit.transform.name.Equals("wu") || hit.transform.name.Equals("yunwu-yd") || hit.transform.name.Equals("yunwu-zy")))
        {
 
            par = hit.transform.GetComponent<ParticleSystem>();
            //Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            //Vector3 mousePos3D = new Vector3(mousePos.x, mousePos.y, 0);
            Vector3 vec = new Vector3(mousePos.x, mousePos.y, 0);

            if (hit.transform.name.Equals("yunwu-yd"))
            {
                //Vector3 vec = hit.transform.position;
                par.Stop();
                Destroy(hit.transform.gameObject);
                StartCoroutine(CreateSaveEffect("yunwu-yd", vec));
            }
            if (hit.transform.name.Equals("yunwu-zy"))
            {
                //Vector3 vec = new Vector3(mousePos.x, mousePos.y, 0);
                Destroy(hit.transform.gameObject);
                StartCoroutine(CreateSaveEffect("yunwu-zy", vec));
            }
            hit.transform.localScale = Vector3.one;

            GameDataManager.Instance.IsMoveCamera = true;
        }

    }

  

原文地址:https://www.cnblogs.com/xingyunge/p/8745967.html