【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-718934.html

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

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

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

相关文章

  • 云原生系列之管理docker容器中的数据管理实战

    在生产环境中使用docker,一方面需要对数据进行保存或者在多个容器之间进行数据共享; 另一方面在docker的容器被删除之后,并不会保留容器的状态信息。 想要实现docker容器的信息持久化,就涉及到docker的数据管理,今天我们就来聊聊docker数据管理那些事。

    2024年02月12日
    浏览(44)
  • 【unity数据持久化】XML数据管理器知识点

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 XML是什么 XML(Extensible Markup Language)是一种类似于 HTML,但是没有使用预定义标记的语言。因此,可以根据自己的设计需求

    2024年02月11日
    浏览(42)
  • VsCode + CMake构建项目 C/C++连接Mysql数据库 | 数据库增删改查C++封装 | 信息管理系统通用代码 ---- 课程笔记

    这个是B站Up主:程序员程子青的视频  C++封装Mysql增删改查操作_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1m24y1a79o/?p=6spm_id_from=pageDrivervd_source=a934d7fc6f47698a29dac90a922ba5a3 安装mysql :mysql 下载和安装和修改MYSQL8.0 数据库存储文件的路径-CSDN博客 创建数据库和表: 参考这篇文章:w

    2024年01月19日
    浏览(50)
  • [Unity] 实现ScriptableObject数据同步Excel表格(对话系统数据管理,C# ExcelNPOI)

            在制作游戏中需要管理各种各样的项目资源,其中游戏中的剧情文字也是一种需要管理的资源。自己刚开始接触游戏开发的时候,第一次看MStudio里面的对话系统教学,只讲了怎么写脚本同步UI的设置,并没有讲有什么方式去管理这些对话数据,视频里拿的是txt来演

    2024年02月10日
    浏览(58)
  • 鸿蒙OS开发实战:【网络管理HTTP数据请求】

    应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表,具体的接口说明请参考API文档。 接口名 功能描述 createHttp() 创建一个ht

    2024年04月29日
    浏览(35)
  • 【unity之IMGUI实践】单例模式管理数据存储【二】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.首先将音乐数据封装在类中,不采用单例模式 2. 而后封装一个游戏数据类为单例模式:功能

    2024年02月16日
    浏览(47)
  • 【大数据】Flink 内存管理(四):TaskManager 内存分配(实战篇)

    《 Flink 内存管理 》系列(已完结),共包含以下 4 篇文章: Flink 内存管理(一):设置 Flink 进程内存 Flink 内存管理(二):JobManager 内存分配(含实际计算案例) Flink 内存管理(三):TaskManager 内存分配(理论篇) Flink 内存管理(四):TaskManager 内存分配(实战篇) 😊

    2024年03月13日
    浏览(55)
  • (九)axios前后端跨域数据交互--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

    在任务六中我们讲过,前后端跨域数据交互,有两种方式可以解决跨域请求,任务六我们使用了CorsConfig类配置跨域。本次任务,我们使用一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中的axios,实现前后端跨域数据交互。通过本次任务,大家能够: (1)掌握axios的使用

    2024年02月15日
    浏览(38)
  • 基于MYSQL的论坛管理系统数据库设计项目实战

    说明:这是一个数据库课程设计实战项目(附带 代码+文档+视频讲解 ),如需 代码+文档+视频讲解 可以直接到文章最后获取。 项目背景 随着互联网行业的发展,各种论坛纷纷而来。在论坛系统中,可让用户注册成为论坛会员,取得发表言论的资格,同时也需要论坛信息管理

    2024年02月11日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包