zoukankan      html  css  js  c++  java
  • Unity3d本地存储

    原文地址:http://blog.csdn.net/dingkun520wy/article/details/49386507

    (一)简单数据存储PlayerPrefs

    这种存储方法比较简单直接上代码

    //简单数据存储
        public void SimpleLocalStorage()
        {
            //存储信息
            PlayerPrefs.SetString("TestString", "存储");
            PlayerPrefs.SetInt("TestInt", 8);
            PlayerPrefs.SetFloat("TestFloat", 8.8F);
            //获取信息
            PlayerPrefs.GetString("TestString");
            PlayerPrefs.GetInt("TestInt");
            PlayerPrefs.GetFloat("TestFloat");
    
            //判断是否有信息
            if (PlayerPrefs.HasKey("TestString"))
            {
                //删除信息
                PlayerPrefs.DeleteKey("TestString");
                PlayerPrefs.DeleteKey("TestInt");
                PlayerPrefs.DeleteKey("TestFloat");
            }
            //删除所有
            PlayerPrefs.DeleteAll();
        }

    (二)Xml数据存储

    首先是定义数据对象和Xml格式字符串相互转换的函数

    /// 数据对象转换xml字符串
        public string SerializeObject(object pObject, System.Type ty)
        {
            string XmlizedString = null;
            MemoryStream memoryStream = new MemoryStream();
            XmlSerializer xs = new XmlSerializer(ty);
            XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
            xs.Serialize(xmlTextWriter, pObject);
            memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
            XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
            return XmlizedString;
        }
    
        /// xml字符串转换数据对象
        public object DeserializeObject(string pXmlizedString, System.Type ty)
        {
            XmlSerializer xs = new XmlSerializer(ty);
            MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
            XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
            return xs.Deserialize(memoryStream);
        }
    //UTF8字节数组转字符串
        public string UTF8ByteArrayToString(byte[] characters)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            string constructedString = encoding.GetString(characters);
            return (constructedString);
        }
    
        //字符串转UTF8字节数组
        public byte[] StringToUTF8ByteArray(String pXmlString)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] byteArray = encoding.GetBytes(pXmlString);
            return byteArray;
        }


    然后定义读取和存储文本文件的函数,这里用到了Base64的加密方法

    /// 创建文本文件
        public void CreateTextFile(string fileName, string strFileData, bool isEncryption)
        {
            StreamWriter writer;                               //写文件流
            string strWriteFileData;
            if (isEncryption)
            {
                strWriteFileData = Encrypt(strFileData);  //是否加密处理
            }
            else
            {
                strWriteFileData = strFileData;             //写入的文件数据
            }
            
            writer = File.CreateText(fileName);
            writer.Write(strWriteFileData);
            writer.Close();                                    //关闭文件流
        }
    
    
        /// 读取文本文件
        public string LoadTextFile(string fileName, bool isEncryption)
        {
            StreamReader sReader;                              //读文件流
            string dataString;                                 //读出的数据字符串
    
            sReader = File.OpenText(fileName);
            dataString = sReader.ReadToEnd();
            sReader.Close();                                   //关闭读文件流
    
            if (isEncryption)
            {
                return Decrypt(dataString);                      //是否解密处理
            }
            else
            {
                return dataString;
            }
         
        }
    /// 加密方法
        /// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位
        public string Encrypt(string toE)
        {
            byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");
            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;
            rDel.Mode = CipherMode.ECB;
            rDel.Padding = PaddingMode.PKCS7;
            ICryptoTransform cTransform = rDel.CreateEncryptor();
            byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toE);
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }
    
        /// 解密方法
        /// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位
        public string Decrypt(string toD)
        {
            byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");
            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;
            rDel.Mode = CipherMode.ECB;
            rDel.Padding = PaddingMode.PKCS7;
            ICryptoTransform cTransform = rDel.CreateDecryptor();
            byte[] toEncryptArray = Convert.FromBase64String(toD);
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
            return UTF8Encoding.UTF8.GetString(resultArray);
        }


    定义数据对象

    public class UserData
    {
        public string userName;         //用户名
        public int onlyId;				//用户唯一id
    
        public UserData()
        {
    
        }
    }



    函数的用法


    //xml数据存储和读取
        public void XmlLocalStorage()
        {
            string _fileName = Application.persistentDataPath + "/UnityUserData";
    
            UserData user = new UserData();
            user.userName = "乐逍遥";
            user.onlyId = 1;
            //存储数据
            string s = SerializeObject(user, typeof(UserData));
            //创建XML文件且写入数据
            CreateTextFile(_fileName, s,false);
    
            //读取数据
            try
            {
                string strTemp = LoadTextFile(_fileName,false);
                //反序列化对象
                UserData userD = DeserializeObject(strTemp, typeof(UserData)) as UserData;
    
            }
            catch
            {
                Debug.Log("系统读取XML出现错误,请检查");
            }
        }



  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/lexiaoyao-jun/p/5208251.html
Copyright © 2011-2022 走看看