注释
unity保存关键数据的的方法和解析方法,防止用户改动
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
public class UserData
{
public int id;
}
public class Test : MonoBehaviour
{
// 随便选取一些用于亦或的字符(看自己喜欢:注意保密)
public static char[] keyChars = { 'a', 'b', 'c', 'd', 'e' };
// 加密
public static string Encrypt(string data)
{
char[] dataChars = data.ToCharArray();
for (int i = 0; i < dataChars.Length; i++)
{
char dataChar = dataChars[i];
char keyChar = keyChars[i % keyChars.Length];
// 重点:通过亦或得到新的字符
char newChar = (char)(dataChar ^ keyChar);
dataChars[i] = newChar;
}
return new string(dataChars);
}
// 解密
public static string Decrypt(string data)
{
// 两次亦或执行的是同样的操作
return Encrypt(data);
}
// 修改:存数据的时候进行第一次亦或
public static void SaveUserData(UserData userData)
{
// ...
string jsonData = JsonConvert.SerializeObject(userData);
jsonData = Encrypt(jsonData);
File.WriteAllText(Application.dataPath + "/file.txt",jsonData);
// ...
}
// 修改:存数据的时候进行第二次亦或(复原数据)
public static UserData LoadUserData(string userName)
{
// ...
if (File.Exists(userName))
{
string jsonData = File.ReadAllText(userName);
jsonData = Decrypt(jsonData);
UserData userData = JsonConvert.DeserializeObject<UserData>(jsonData);
return userData;
// ...
}
return null;
// ...
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
UserData userData = new UserData();
userData.id = 9878754;
SaveUserData(userData);
}
if (Input.GetKeyDown(KeyCode.S))
{
LoadUserData(Application.dataPath + "/file.txt");
}
}
}