因为C#语言的限制,unity本地化数据存储只能固定类型如:SetInt、SetFloat,这点相对于cocos使用ts的localStorage.setItem来说确实麻烦一些,所以自己用泛型来封装了一下Playerfabs的基础类型,后续再添加数组类型等的封装。有更好的方法或者代码赘余欢迎指点。直接贴代码:
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System.Collections.Generic;
using System;
namespace ET
{
public enum StorageType
{
INT,
FLOAT,
STRING
}
public static class DataStorage
{
public static void SetData<T>(StorageType type,string key,T data)
{
switch (type)
{
case StorageType.INT:
int t = (int)Convert.ChangeType(data, typeof(int));
DataStorage.SetIntData(key, t);
break;
case StorageType.STRING:
string str = (string)Convert.ChangeType(data, typeof(string));
DataStorage.SetStringData(key, str);
break;
case StorageType.FLOAT:
float fl = (float)Convert.ChangeType(data, typeof(float));
DataStorage.SetFloatData(key, fl);
break;
default:
break;
}
}
public static T GetData<T>(StorageType type, string key)
{
T t=default;
switch (type)
{
case StorageType.INT:
int intdata = DataStorage.GetIntData(key);
t = (T)Convert.ChangeType(intdata,typeof(T));
break;
case StorageType.STRING:
string str = DataStorage.GetStringData(key);
t = (T)Convert.ChangeType(str, typeof(T));
break;
case StorageType.FLOAT:
float fl = DataStorage.GetFloatData(key);
t = (T)Convert.ChangeType(fl, typeof(T));
break;
default:
break;
}
return t;
}
public static void SetIntData(string key,int data)
{
PlayerPrefs.SetInt(key, data);
}
public static int GetIntData(string key)
{
return PlayerPrefs.GetInt(key);
}
public static void SetStringData(string key,string data)
{
PlayerPrefs.SetString(key, data);
}
public static string GetStringData(string key)
{
return PlayerPrefs.GetString(key);
}
public static void SetFloatData(string key, float data)
{
PlayerPrefs.SetFloat(key, data);
}
public static float GetFloatData(string key)
{
return PlayerPrefs.GetFloat(key);
}
}
}