【unity数据持久化】数据管理类_PlayerPrfs封装包

这篇具有很好参考价值的文章主要介绍了【unity数据持久化】数据管理类_PlayerPrfs封装包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity数据存储

【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏


⭐制作一个数据管理类(存储排行榜信息)的实践⭐

Unity公共类PlayerPrefs知识点入口


🎶需求分析


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏


🎶关键知识补充


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏


🎶数据管理类的创建


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏


🎶PlayerPrefs—各种类型的反射存储框架


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using Unity.VisualScripting;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 数据管理存储  
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------


public class PlayerfabsClass
{
    //单例模式的构建
    static private PlayerfabsClass chats = new PlayerfabsClass();
    static public  PlayerfabsClass Chats { get => chats; }
    //private List<object> listMess;
    //private Dictionary<object, object> dictionaryMess;

    /// <summary>
    /// 实现对象的数据的存储
    /// </summary>
    /// <param  name="player">玩家对象</param>
    /// <param  name="palyName">玩家对象信息Key字符</param>
    public void SaveDataMess(object  player ,string playName)
    {
        //-关键作用-:通过排行中的值来获取其信息

        //自定义key的规则通过反射来获取对象里面的-类型名-和-类型值-
       
        Type type = player.GetType();
        Debug.Log(type);     
        FieldInfo[] FieldsMess = type.GetFields();
        for (int i = 0; i < FieldsMess.Length; i++)
        {
            Debug.Log(FieldsMess[i]);
        }
        
        string temp = null;      
        for (int i = 0; i < FieldsMess.Length; i++)  //通过字符串的拼接来,使得存储的字段具有唯一性
        {
            temp = $"{playName}_{type}_{FieldsMess[i].FieldType.Name}_{FieldsMess[i].Name }";
            Debug.Log(playName);
            HelpSave( FieldsMess[i].GetValue(player) ,temp );
        }
        PlayerPrefs.Save();      
    }

    /// <summary>
    /// 辅助存储
    /// </summary>
    /// <param name="value">由于只能设置三种类型的值就不得不用方法来进行</param>
    /// <param name="playName">已经拼接好的key字符串</param>
    private void HelpSave(object value , string playName )
    {
       Type valueTpye = value.GetType();
        //----------1.常用数据类型的反射存储
        if (valueTpye == typeof(int))
        {
            Debug.Log((int)value);
            PlayerPrefs.SetInt(playName, (int)value);
        } 
       else  if (valueTpye == typeof(float ))
        {
            Debug.Log((float )value);
            PlayerPrefs.SetFloat(playName, (float)value);
        }
       else  if (valueTpye == typeof(string))
        {
            Debug.Log(value.ToString());
            PlayerPrefs.SetString(playName, value.ToString());
        }
        //----------2.泛型List数据类型的反射存储 ——递归
       else if(valueTpye.IsAssignableFrom(typeof(IList)) == true)  //因为泛型不确定无法判断所以通过(判断是否为子类的API)确定类型
        {
            IList list = valueTpye as IList;
            int index = 0;
            PlayerPrefs.SetInt(playName,list.Count);  //存储List数据先存储数量
            foreach (object  item in list  )
            {
                HelpSave(item, item + "_" + index);
            }
        }
        //--------3.泛型字典数据类型的反射存储 —— 递归
        else if(valueTpye.IsAssignableFrom(typeof(IDictionary) )==true)
        {
            IDictionary dictionary = valueTpye as IDictionary;
            int index = 0;
            PlayerPrefs.SetInt(playName,dictionary.Count );
            foreach (object item in dictionary .Keys)
            {
                HelpSave(item,item+"_Key_"+ index );
                HelpSave(dictionary[item], dictionary[item] + "_Vaule_" + index);
            }

        }
        //--------4.自定义类型的数据的反射存储 —— 大递归
        else 
        {
            SaveDataMess(value ,playName);
        }
    }



     
}


🎶PlayerPrefs—存储主方法


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

 public void SaveDataMess(object player, string playName)
    {
        //-关键作用-:通过排行中的值来获取其信息

        //自定义key的规则通过反射来获取对象里面的-类型名-和-类型值-

        Type type = player.GetType();
        Debug.Log(type);
        FieldInfo[] FieldsMess = type.GetFields();
        for (int i = 0; i < FieldsMess.Length; i++)
        {
            Debug.Log(FieldsMess[i]);
        }

        string temp = null;
        for (int i = 0; i < FieldsMess.Length; i++)  //通过字符串的拼接来,使得存储的字段具有唯一性
        {
            temp = $"{playName}_{type}_{FieldsMess[i].FieldType.Name}_{FieldsMess[i].Name }";
            Debug.Log(playName);
            HelpSave(FieldsMess[i].GetValue(player), temp);
        }
        PlayerPrefs.Save();
    }

🎶PlayerPrefs—普通数据类型的反射存储


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 数据管理存储     
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------

public class PlayerfabsClass
{
    //单例模式的构建
    static private PlayerfabsClass chats = new PlayerfabsClass();
    static public  PlayerfabsClass Chats { get => chats; }
    //private List<object> listMess;
    //private Dictionary<object, object> dictionaryMess;

    /// <summary>
    /// 实现对象的数据的存储
    /// </summary>
    /// <param  name="player">玩家对象</param>
    /// <param  name="palyName">玩家对象信息Key字符</param>
    public void SaveDataMess(object  player ,string playName)
    {
        //-关键作用-:通过排行中的值来获取其信息

        //自定义key的规则通过反射来获取对象里面的-类型名-和-类型值-
       
        Type type = player.GetType();
        Debug.Log(type);     
        FieldInfo[] FieldsMess = type.GetFields();
        for (int i = 0; i < FieldsMess.Length; i++)
        {
            Debug.Log(FieldsMess[i]);
        }
        
        string temp = null;      
        for (int i = 0; i < FieldsMess.Length; i++)  //通过字符串的拼接来,使得存储的字段具有唯一性
        {
            temp = $"{playName}_{type}_{FieldsMess[i].FieldType.Name}_{FieldsMess[i].Name }";
            Debug.Log(playName);
            HelpSave( FieldsMess[i].GetValue(player) ,temp );
        }
        PlayerPrefs.Save();      
    }

    /// <summary>
    /// 辅助存储
    /// </summary>
    /// <param name="value">由于只能设置三种类型的值就不得不用方法来进行</param>
    /// <param name="playName">已经拼接好的key字符串</param>
    private void HelpSave(object value , string playName )
    {
       Type valueTpye = value.GetType();
        if (valueTpye == typeof(int))
        {
            Debug.Log((int)value);
            PlayerPrefs.SetInt(playName, (int)value);
        } 
       else  if (valueTpye == typeof(float ))
        {
            Debug.Log((float )value);
            PlayerPrefs.SetFloat(playName, (float)value);
        }
       else  if (valueTpye == typeof(string))
        {
            Debug.Log(value.ToString());
            PlayerPrefs.SetString(playName, value.ToString());
        }
    }

    /// <summary>
    /// 实现对象的读取
    /// </summary>
    public void ReadMess()
    {

    }


🎶PlayerPrefs—泛型List的反射存储


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

   //----------2.泛型List数据类型的反射存储
       else if(valueTpye.IsAssignableFrom(typeof(IList)) == true)  //因为泛型不确定无法判断所以通过(判断是否为子类的API)确定类型
        {
            IList list = valueTpye as IList;
            int index = 0;
            PlayerPrefs.SetInt(playName,list.Count);  //存储List数据先存储数量
            foreach (object  item in list  )
            {
                HelpSave(item, item + "_" + index);
            }
        }

🎶PlayerPrefs—泛型Dictionary的反射存储


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

 //--------3.泛型字典数据类型的反射存储 —— 递归
        else if(valueTpye.IsAssignableFrom(typeof(IDictionary) )==true)
        {
            IDictionary dictionary = valueTpye as IDictionary;
            int index = 0;
            PlayerPrefs.SetInt(playName,dictionary.Count );
            foreach (object item in dictionary .Keys)
            {
                HelpSave(item,item+"_Key_"+ index );
                HelpSave(dictionary[item], dictionary[item] + "_Vaule_" + index);
            }

        }

🎶PlayerPrefs—自定义类类型的反射存储


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

        //--------4.自定义类型的数据的反射存储 —— 大递归
        else 
        {
            SaveDataMess(value ,playName);
        }

🎶PlayerPrefs—各种类型的反射获取框架


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

 #region 获取和赋值
    /// <summary>
    /// 获取存的数据,返回一个对象
    /// </summary>
    /// <param name="data"></param>
    /// <param name="playName"></param>
    /// <returns></returns>
    public object GetDataMess(Type data ,string playName)
    {
        object player = Activator.CreateInstance(data) ;
        
        FieldInfo[] info = data.GetFields();

        string temp = "" ; 

        for (int i = 0; i < info.Length; i++)
        {
            
            temp = $"{playName}_{data}_{info[i].FieldType.Name}_{info [i].Name }";
            //遍历每一个成员传进去设值
            info[i].SetValue(data ,HelpSet(info[i].FieldType ,temp));
        }
        //给所有成员都设置值
        

        return player;
    }


    public object HelpSet(Type type ,string playName)
    {

        //----------1.常用数据类型的反射获取
        if (type == typeof(int) )
        {
          return PlayerPrefs.GetInt(playName,0); //第二个重载为设置默认值
        }
        else if(type == typeof(float))
        {
            return PlayerPrefs.GetFloat(playName, 0);
        }
        else if (type == typeof(string ))
        {
            return PlayerPrefs.GetString(playName, "");
        }
        else if(type ==typeof(bool))
        {
            return PlayerPrefs.GetInt(playName, 0) == 1 ? true : false;
        }

        //----------2.泛型List数据类型的反射获取
        else if (type.IsAssignableFrom(typeof(IList)) == true)
        {
            //此时list也是对象了要实例化
            IList list = Activator.CreateInstance(type) as IList;

            Type Ftype = type.GetGenericArguments()[0];  //一个泛型返回下标0即可
          
            int Count = PlayerPrefs.GetInt(playName + "_" + "Number");
        
            for (int i = 0; i < Count; i++)
            {               
                list.Add(HelpSet(Ftype , playName + "_" + i));
            }
            
            return list;
        }
        //--------3.泛型字典数据类型的反射获取 

        else if (type.IsAssignableFrom(typeof(IDictionary)) == true)
        {
            //此时list也是对象了要实例化
            IDictionary dictionary = Activator.CreateInstance(type) as IDictionary;

            Type Ftype1 = type.GetGenericArguments()[0];  //一个泛型返回下标0即可
            Type Ftype2 = type.GetGenericArguments()[1];

            int Count = PlayerPrefs.GetInt(playName + "_" + "Number");

            for (int i = 0; i < Count; i++)
            {
                dictionary.Add(HelpSet(Ftype1, playName + "_" + i),
                               HelpSet(Ftype1, playName + "_" + i ) );
            }

            return dictionary;
        }

        else
        {
            GetDataMess(type, playName);
        }
        return null;
    }
    #endregion

🎶PlayerPrefs—获取主方法


    public object GetDataMess(Type data ,string playName)
    {
        object player = Activator.CreateInstance(data) ;
        
        FieldInfo[] info = data.GetFields();

        string temp = "" ; 

        for (int i = 0; i < info.Length; i++)
        {
            
            temp = $"{playName}_{data}_{info[i].FieldType.Name}_{info [i].Name }";
            //遍历每一个成员传进去设值
            info[i].SetValue(data ,HelpSet(info[i].FieldType ,temp));
        }
        //给所有成员都设置值
        

        return player;
    }

🎶PlayerPrefs—普通数据类型的反射获取


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

 //----------1.常用数据类型的反射获取
        if (type == typeof(int) )
        {
          return PlayerPrefs.GetInt(playName,0); //第二个重载为设置默认值
        }
        else if(type == typeof(float))
        {
            return PlayerPrefs.GetFloat(playName, 0);
        }
        else if (type == typeof(string ))
        {
            return PlayerPrefs.GetString(playName, "");
        }
        else if(type ==typeof(bool))
        {
            return PlayerPrefs.GetInt(playName, 0) == 1 ? true : false;
        }

🎶PlayerPrefs—泛型List的反射获取


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

   //----------2.泛型List数据类型的反射获取
        else if (type.IsAssignableFrom(typeof(IList)) == true)
        {
            //此时list也是对象了要实例化
            IList list = Activator.CreateInstance(type) as IList;

            Type Ftype = type.GetGenericArguments()[0];  //一个泛型返回下标0即可
          
            int Count = PlayerPrefs.GetInt(playName + "_" + "Number");
        
            for (int i = 0; i < Count; i++)
            {               
                list.Add(HelpSet(Ftype , playName + "_" + i));
            }
            
            return list;
        }

🎶PlayerPrefs—泛型Dictionary的反射获取


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

 //--------3.泛型字典数据类型的反射获取 

        else if (type.IsAssignableFrom(typeof(IDictionary)) == true)
        {
            //此时list也是对象了要实例化
            IDictionary dictionary = Activator.CreateInstance(type) as IDictionary;

            Type Ftype1 = type.GetGenericArguments()[0];  //一个泛型返回下标0即可
            Type Ftype2 = type.GetGenericArguments()[1];

            int Count = PlayerPrefs.GetInt(playName + "_" + "Number");

            for (int i = 0; i < Count; i++)
            {
                dictionary.Add(HelpSet(Ftype1, playName + "_" + i),
                               HelpSet(Ftype1, playName + "_" + i ) );
            }

            return dictionary;
        }

🎶PlayerPrefs—自定义类类型的反射存储


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

else
        {
            GetDataMess(type, playName);
        }

🎶PlayerPrefs—排行榜管理最终代码


【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using Unity.VisualScripting;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 数据管理类     
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------


public class PlayerfabsClass
{
    //单例模式的构建
    static private PlayerfabsClass chats = new PlayerfabsClass();
    static public PlayerfabsClass Chats { get => chats; }
    //private List<object> listMess;
    //private Dictionary<object, object> dictionaryMess;

    /// <summary>
    /// 实现对象里的数据的存储
    /// </summary>
    /// <param  name="player">玩家对象</param>
    /// <param  name="palyName">玩家对象信息Key字符</param>
    /// 


    public void SaveDataMess(object player, string playName)
    {
        //-关键作用-:通过排行中的值来获取其信息

        //自定义key的规则通过反射来获取对象里面的-类型名-和-类型值-

        Type type = player.GetType();
        Debug.Log(type);
        FieldInfo[] FieldsMess = type.GetFields();
        for (int i = 0; i < FieldsMess.Length; i++)
        {
            Debug.Log(FieldsMess[i]);
        }

        string temp = null;
        for (int i = 0; i < FieldsMess.Length; i++)  //通过字符串的拼接来,使得存储的字段具有唯一性
        {
            temp = $"{playName}_{type}_{FieldsMess[i].FieldType.Name}_{FieldsMess[i].Name }";
            Debug.Log(playName);
            HelpSave(FieldsMess[i].GetValue(player), temp);
        }
        PlayerPrefs.Save();
    }

    /// <summary>
    /// 辅助存储
    /// </summary>
    /// <param name="value">由于只能设置三种类型的值就不得不用方法来进行</param>
    /// <param name="playName">已经拼接好的key字符串</param>
    private void HelpSave(object value, string playName)
    {
        Type valueTpye = value.GetType();
        //----------1.常用数据类型的反射存储
        if (valueTpye == typeof(int))
        {
            Debug.Log((int)value);
            PlayerPrefs.SetInt(playName, (int)value);
        }
        else if (valueTpye == typeof(float))
        {
            Debug.Log((float)value);
            PlayerPrefs.SetFloat(playName, (float)value);
        }
        else if (valueTpye == typeof(string))
        {
            Debug.Log(value.ToString());
            PlayerPrefs.SetString(playName, value.ToString());
        }
        else if(valueTpye == typeof(bool))
        {
            Debug.Log(value.ToString());
            PlayerPrefs.SetInt(playName,(bool)value?1:0);
        }
        //----------2.泛型List数据类型的反射存储 ——递归

        else if (valueTpye.IsAssignableFrom(typeof(IList)) == true)  //因为泛型不确定无法判断所以通过(判断是否为子类的API)确定类型
        {
            IList list = valueTpye as IList;
            int index = 0;
            PlayerPrefs.SetInt(playName+"_"+"Number", list.Count);  //存储List数据先存储数量
            foreach (object item in list)
            {
                HelpSave(item, playName + "_" + index);
                index++;
            }
        }
        //--------3.泛型字典数据类型的反射存储 —— 递归

        else if (valueTpye.IsAssignableFrom(typeof(IDictionary)) == true)
        {
            IDictionary dictionary = valueTpye as IDictionary;
            int index = 0;
            PlayerPrefs.SetInt(playName+ "_" + "Number", dictionary.Count); //先存储数量
            foreach (object item in dictionary.Keys)
            {
                HelpSave(item, playName + "_Key_" + index);
                HelpSave(dictionary[item], playName + "_Vaule_" + index);
                index++;
            }

        }
        //--------4.自定义类型的数据的反射存储 —— 大递归
        else
        {
            SaveDataMess(value, playName);
        }
    }

    #region 获取和赋值
    /// <summary>
    /// 获取存的数据,返回一个对象
    /// </summary>
    /// <param name="data"></param>
    /// <param name="playName"></param>
    /// <returns></returns>
    public object GetDataMess(Type data ,string playName)
    {
        object player = Activator.CreateInstance(data) ;
        
        FieldInfo[] info = data.GetFields();

        string temp = "" ; 

        for (int i = 0; i < info.Length; i++)
        {
            
            temp = $"{playName}_{data}_{info[i].FieldType.Name}_{info [i].Name }";
            //遍历每一个成员传进去设值
            info[i].SetValue(data ,HelpSet(info[i].FieldType ,temp));
        }
        //给所有成员都设置值
        

        return player;
    }


    public object HelpSet(Type type ,string playName)
    {

        //----------1.常用数据类型的反射获取
        if (type == typeof(int) )
        {
          return PlayerPrefs.GetInt(playName,0); //第二个重载为设置默认值
        }
        else if(type == typeof(float))
        {
            return PlayerPrefs.GetFloat(playName, 0);
        }
        else if (type == typeof(string ))
        {
            return PlayerPrefs.GetString(playName, "");
        }
        else if(type ==typeof(bool))
        {
            return PlayerPrefs.GetInt(playName, 0) == 1 ? true : false;
        }

        //----------2.泛型List数据类型的反射获取
        else if (type.IsAssignableFrom(typeof(IList)) == true)
        {
            //此时list也是对象了要实例化
            IList list = Activator.CreateInstance(type) as IList;

            Type Ftype = type.GetGenericArguments()[0];  //一个泛型返回下标0即可
          
            int Count = PlayerPrefs.GetInt(playName + "_" + "Number");
        
            for (int i = 0; i < Count; i++)
            {               
                list.Add(HelpSet(Ftype , playName + "_" + i));
            }
            
            return list;
        }
        //--------3.泛型字典数据类型的反射获取 

        else if (type.IsAssignableFrom(typeof(IDictionary)) == true)
        {
            //此时list也是对象了要实例化
            IDictionary dictionary = Activator.CreateInstance(type) as IDictionary;

            Type Ftype1 = type.GetGenericArguments()[0];  //一个泛型返回下标0即可
            Type Ftype2 = type.GetGenericArguments()[1];

            int Count = PlayerPrefs.GetInt(playName + "_" + "Number");

            for (int i = 0; i < Count; i++)
            {
                dictionary.Add(HelpSet(Ftype1, playName + "_" + i),
                               HelpSet(Ftype1, playName + "_" + i ) );
            }

            return dictionary;
        }

        else
        {
            GetDataMess(type, playName);
        }
        return null;
    }
    #endregion
    #region 打印对象里面的信息
    /// <summary>
    /// 读取信息函数
    /// </summary>
    /// <param name="type">为什么这里不用Object用type,因为读取没有值,只需要类型就行简化了代码 </param>
    /// <param name="playName">还是原来的Key关键标识字符</param>
    public void ReadData(Type type ,string playName)
    {
        string temp = "";
        //----------1.常用数据类型的反射打印
        if (type == typeof(int))
        {
            Debug.Log(PlayerPrefs.GetInt(playName));
        }
        else if(type == typeof(float) )
        {
            Debug.Log(PlayerPrefs.GetFloat(playName));
        }
        else if (type == typeof(string) )
        {
            Debug.Log(PlayerPrefs.GetString(playName));
        }
        //----------2.泛型List数据类型的反射打印 ——递归

        else if (type.IsAssignableFrom(typeof(IList)) )
        {
            IList list = type as IList;
            Debug.Log( PlayerPrefs.GetInt(playName +"_" + "Number") ); //先读取数量
            int index = 0;
            foreach (Type item in list )
            {
                ReadData(item, playName + "_" + index);
                index++;
            }
        }


        //--------3.泛型字典数据类型的反射打印 —— 递归

        else if (type.IsAssignableFrom(typeof(IDictionary)))
        {
            IDictionary dictionary = type as IDictionary;
            int index = 0;
            PlayerPrefs.GetInt(playName + "_" + "Number"); //先读取数量
            foreach (Type item in dictionary.Keys)
            {
                ReadData(item, playName + "_Key_" + index);
                ReadData(item, playName + "_Vaule_" + index);
                index++;
            }
        }
        //--------4.自定义类型的数据的反射打印 —— 大递归
        else
        {
            FieldInfo[] FieldsMess = type.GetFields();
           
          for (int i = 0; i < FieldsMess.Length; i++) //成员递归下去
            {
                temp = $"{playName}_{type}_{FieldsMess[i].FieldType.Name}_{FieldsMess[i].Name }";
              
                ReadData(FieldsMess[i].FieldType , playName);
            }
        }
        

    }
    #endregion 


}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 排行榜数据控制器     
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Contorl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Player player1 = new Player("孙悟空","BBBBB",66,10);
        //存
        PlayerfabsClass.Chats.SaveDataMess(player1,player1.playName);
        //取
        PlayerfabsClass.Chats.GetDataMess(player1.GetType(),player1.playName);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}


⭐相关文章⭐

⭐【unity数据持久化】数据管理类_PlayerPrfs封装包

⭐【unity之数据持久化】-Unity公共类PlayerPrefs知识点

⭐本站最全-unity常用API大全(万字详解),不信你不收藏



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!
【unity数据持久化】数据管理类_PlayerPrfs封装包,# unity实战基础,unity,游戏引擎,c#,ui,游戏
文章来源地址https://www.toymoban.com/news/detail-660231.html

到了这里,关于【unity数据持久化】数据管理类_PlayerPrfs封装包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity数据持久化之PlayerPrefs

    什么是数据持久化 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。即将游戏数据存储到硬盘,硬盘中数据读取到游戏中,也就是传统意义上的存盘。 PlayerPrefs是什么 是 Unity 提供的可以用于存储读取玩家数据的公共类

    2024年02月19日
    浏览(48)
  • 【Unity学习日记03】数据持久化

    这一篇只能说写了一部分,并没有把Unity里数据持久化的操作讲完整,之后可能是学到一点就记一点的模式。 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。 人话版:将游戏数据存储到硬盘,硬盘中数据读取到游戏中,

    2024年02月12日
    浏览(53)
  • Unity之数据持久化——Json

    JavaScript对象简谱(JavaScript Object Notation) json是国际通用的一种轻量级的数据交换格式,主要在网络通讯中用于传输数据,或本地数据存储和读取,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 游戏中可以把游戏数据按照Json的格式标准存储在

    2023年04月20日
    浏览(40)
  • Unity学习笔记--数据持久化Json

    json是国际通用语言,可以跨平台(游戏,软件,网页,不同OS)使用, json语法较为简单,使用更广泛。json使用键值对来存储。 认识json文件 //注意字典类型存储时,键是以string类型存储的 需要添加 “” Excel转换为JSON文件: 使用网站来转换:bejson 挖坑-----》开发一个工具,

    2024年02月05日
    浏览(52)
  • Unity PlayerPrefs 持久化数据存在哪

    在游戏开发的过程中,我们经常需要存档相关的东西,称为数据的持久化。PlayerPrefs 就是Unity提供的用于本地数据持久化保存与读取的类。 PlayerPrefs会以键值对的方式存储在本地的注册表中。 1.存储数据 2.获取数据 3.删除数据 这些数据会存储在注册表中,打开注册表就能查看

    2024年02月16日
    浏览(46)
  • 【unity之数据持久化】-Unity公共类PlayerPrefs

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity数据存储 API大全图解 windows平台存储路径 HKCUSoftware[公司名称][产品名称] 项下的注册表中 公司和产品名称是 在“Project Settings”中设

    2024年02月04日
    浏览(55)
  • 【Unity】数据持久化路径Application.persistentDataPath

    今天突然想到这个路径Application.persistentDataPath,热更的重要路径,该文件夹可读可写,在移动端唯一一个可读写操作的文件夹。 移动端可以将本地的资源(资源MD5值配置表)等一些文件放到StreamingAssets文件夹下,通过Copy到persistentDataPath下与服务器的版本文件配置表作比对,

    2023年04月10日
    浏览(51)
  • Unity学习笔记--数据持久化XML文件(1)

    Xml是可拓展标记语言,一种文件格式。我们使用xml来完成对数据持久化的存储。等待我们有一程序运行结束之后,将内存中的数据进行保存,(保存在硬盘/服务器)实现对数据的持久化存储。 xml文件的读取和保存以及修改 要点: XMl文件的加载 XML文件节点的查找访问 XML文件

    2024年02月05日
    浏览(44)
  • Unity笔记:数据持久化的几种方式

    主要方法: ScriptableObject PlayerPrefs JSON XML 数据库(如Sqlite) PlayerPrefs 存储的数据是 全局共享 的,它们存储在用户设备的本地存储中,并且可以被应用程序的所有部分访问。这意味着,无论在哪个场景、哪个脚本中,只要是同一个应用程序中的代码,都可以读取和修改 Playe

    2024年02月19日
    浏览(44)
  • Unity学习笔记--数据持久化之PlayerPrefs的使用

    PlayerPrefs是Unity游戏引擎中的一个类,用于在游戏中存储和访问玩家的偏好设置和数据。它可以用来保存玩家的游戏进度、设置选项、最高分数等信息。PlayerPrefs将数据存储在本地文件中,因此可以在游戏重新启动时保持数据的持久性。 PlayerPrefs中存储的数据存储在哪里? PC端

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包