unity随笔_unity存档

http://blog.csdn.net/qinyuanpei/article/details/47775979文章很全面

 

角色信息:指一切表征虚拟角色成长路线的信息,如生命值、魔法值、经验值等等。

道具信息:指一切表征虚拟道具数量或者作用的信息,如药品、道具、装备等等。

场景信息:指一切和游戏场景相关的信息,如场景名称、角色在当前场景中的位置坐标等等。

事件信息:指一切和游戏事件相关的信息,如主线任务、支线任务、触发性事件等等。

 

从上面的文章来看,有:

1,Json库的序列化与反序列化,相应库的加密解密函数,一些基础的IO函数。

2,Xml的优点是可读性强,缺点是冗余信息多

3,PlayerPrefs存储方案本质上是将数据写入到一个Xml文件。这种方案适合存储简单信息

 

http://blog.csdn.net/beihuanlihe130/article/details/53676006unity的相应dll包下载

 

代码如下:

加密前:{"age":18,"name":"JJJ"}

加密后:2E7ctwZh4/ocH2REodhUfXjTOcFu6cwZsOaAa45lCn4=

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;


public class IO_GameSave : MonoBehaviour {


    void Start() {
        string filePath = Application.dataPath + "/Save";
        string fileName = filePath + "/myData.sav";
        MyData data = new MyData();
        data.age = 18;
        data.name = "JJJ";
        SetData(filePath, fileName, data);
        MyData deData = (MyData)GetData(typeof(MyData),fileName);
        print("test3 age " + deData.age);
        print("name " + deData.name); 
    }


    void Start_test1() {
        MyData data = new MyData();
        data.age = 18;
        data.name = "JJJ";
        string str = SeriableObj(data);
        MyData deData = (MyData)DeSeriableObj(str,typeof(MyData));
        print("test1 age " + deData.age);
        print("name " + deData.name);
    }


    private static string SeriableObj(object obj) {
        string str = string.Empty;
        str = JsonConvert.SerializeObject(obj);
        return str;
    }


    private static object DeSeriableObj(string str,Type type) {
        object desObj = null;
        desObj = JsonConvert.DeserializeObject(str, type);
        return desObj;
    }


    public static void CreatDir(string DirPath) {
        if (IsHaveDir(DirPath))
            return;
        Directory.CreateDirectory(DirPath);
    }


    public static void CreatFile(string filePath,string content){
        StreamWriter strWrite = File.CreateText(filePath);
        strWrite.Write(content);
        strWrite.Close();
    }


    public static bool IsHaveDir(string DirPath) {
        return Directory.Exists(DirPath);
    }


    public static bool IsHaveFile(string filePath) {
        return File.Exists(filePath);
    }


    public static void SetData(string filePath,string fileName,object obj) {
        CreatDir(filePath);
        string str = SeriableObj(obj);
        //加密 猜想:可以随机生成相应的字符串,然后存到PlayerPrefs里
        string strJiaMi = RijndaelEncrypt(str, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        CreatFile(fileName, strJiaMi);
    }


    public static object GetData(Type type,string fileName) {
        StreamReader strReader = File.OpenText(fileName);
        string str = strReader.ReadToEnd();
        //解密
        string strJieMi = RijndaelDecrypt(str, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        return DeSeriableObj(strJieMi, type);
    }


    /// <summary>
    /// Rijndael加密算法
    /// </summary>
    /// <param name="pString">待加密的明文</param>
    /// <param name="pKey">密钥,长度可以为:64位(byte[8]),128位(byte[16]),192位(byte[24]),256位(byte[32])</param>
    /// <param name="iv">iv向量,长度为128(byte[16])</param>
    /// <returns></returns>
    private static string RijndaelEncrypt(string pString, string pKey)
    {
        //密钥
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(pKey);
        //待加密明文数组
        byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(pString);


        //Rijndael解密算法
        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = rDel.CreateEncryptor();


        //返回加密后的密文
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }


    /// <summary>
    /// ijndael解密算法
    /// </summary>
    /// <param name="pString">待解密的密文</param>
    /// <param name="pKey">密钥,长度可以为:64位(byte[8]),128位(byte[16]),192位(byte[24]),256位(byte[32])</param>
    /// <param name="iv">iv向量,长度为128(byte[16])</param>
    /// <returns></returns>
    private static String RijndaelDecrypt(string pString, string pKey)
    {
        //解密密钥
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(pKey);
        //待解密密文数组
        byte[] toEncryptArray = Convert.FromBase64String(pString);


        //Rijndael解密算法
        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = rDel.CreateDecryptor();


        //返回解密后的明文
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        return UTF8Encoding.UTF8.GetString(resultArray);
    }




    class MyData {
        public int age;
        public string name;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值