因为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); ? ? ? ? } ? ? } } ?
|