【unity之数据持久化】-Unity公共类PlayerPrefs

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

【unity之数据持久化】-Unity公共类PlayerPrefs


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

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

👨‍💻 本文由 秩沅 原创

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

【unity之数据持久化】-Unity公共类PlayerPrefs


⭐PlayerPrefs⭐



🎶PlayerPrefs基本内容


【unity之数据持久化】-Unity公共类PlayerPrefs

  • API大全图解
    【unity之数据持久化】-Unity公共类PlayerPrefs

🎶PalyerPrefs存储知识


【unity之数据持久化】-Unity公共类PlayerPrefs

  • windows平台存储路径

    HKCU\Software[公司名称][产品名称] 项下的注册表中
    公司和产品名称是 在“Project Settings”中设置的名称。
    1.运行 regedit (win+R)
    2/HKEY_CURRENT_USER
    3/SOFTWARE
    4.Unity
    5.UnityEditor
    6.公司名称
    7.产品名称
  • Android平台存储路径

    /data/data/包名/shared_prefs/pkg-name.xml
  • IOS平台存储路径

    /Library/Preferences/[应用ID].plist

🎶PalyerPrefs知识小结


【unity之数据持久化】-Unity公共类PlayerPrefs

  • 用palyerfabs存储多对象数据时的代码模块

1.list列表 List
2.存储方法 Save()
3.读取方法 Read()


🎶PalyerPrefs代码实践


>题目:现在有玩家信息类,有名字,年龄,攻击力,防御力等成员现在为其封装两个方法,—个用来存储数据,一个用来读取数据现在在装备信息类,装备类中有id,数量两个成员。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


class PalyerMess
{
   private  string name;
   private int age;
   private int atack;
   private int defend;
    /// <summary>
    /// 存储数据
    /// </summary>
    public void Save()
    {
        PlayerPrefs.SetString("name","孙悟空");
        PlayerPrefs.SetInt("age", 108);
        PlayerPrefs.SetInt("atack", 999);
        PlayerPrefs.SetInt("defend", 1000);
        PlayerPrefs.Save();
    }
    public void Read()
    {
      string a =  PlayerPrefs.GetString("name");
      int b = PlayerPrefs.GetInt("age");
      int c = PlayerPrefs.GetInt("atack");
      int d = PlayerPrefs.GetInt("defend");
      Debug.Log("玩家的姓名为"+a+ "\n年龄为"+b+"攻击力为"+c+"防御力为"+d);
    }
}
public class _PalyerPrefs : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        PalyerMess boss = new PalyerMess();
        boss.Save();
        boss.Read();
    }

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

> 在题目一的基础上加上 装备信息的存储和读取

public class Play : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        PlayerMess boss = new PlayerMess("孙悟空", 18, 999, 666);
        Equipment equipment1 = new Equipment("001", 1);
        Equipment equipment2 = new Equipment("002", 3); ;
        Equipment equipment3 = new Equipment("003", 4); ;

        boss.AddStateToList(equipment1);
        boss.AddStateToList(equipment2);
        boss.AddStateToList(equipment3);

        boss.Save();
        boss.Read();
        boss.SaveEquip();
        boss.ReadEquip();
    }

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

    }
}

/// <summary>
/// 装备信息类
/// </summary>
public class Equipment
{
    private string id;
    private int numb;
    public string Id { get => id; }
    public int Numb { get => numb; }
    public Equipment(string v1, int v2)
    {
        this.id = v1;
        this.numb = v2;
    }
}

/// <summary>
/// 玩家信息类
/// </summary>
public class PlayerMess
{
    private string name;
    private int age;
    private int atack;
    private int defend;
    public List<Equipment> equipMess; //存储装备类中的信息

    public PlayerMess(string name, int age, int atack, int defend)
    {
        this.name = name;
        this.age = age;
        this.atack = atack;
        this.defend = defend;
        equipMess = new List<Equipment>();
    }

    public void AddStateToList(Equipment t)
    {
        equipMess.Add(t);
    }
    /// <summary>
    /// 存储装备数据
    /// </summary>
    public void SaveEquip()
    {
        int i = 1;
        foreach (Equipment item in equipMess)
        {
            string a = "Equip" + i + "ID";
            string b = "Equip" + i + "Number";
            PlayerPrefs.SetString(a, item.Id);
            PlayerPrefs.SetInt(b, item.Numb);
            i++;
        }
    }

    /// <summary>
    /// 存储玩家数据
    /// </summary>
    public void Save()
    {
        PlayerPrefs.SetString("name", name);
        PlayerPrefs.SetInt("age", age);
        PlayerPrefs.SetInt("atack", atack);
        PlayerPrefs.SetInt("defend", defend);
        PlayerPrefs.Save();
    }

    /// <summary>
    /// 读取玩家数据·
    /// </summary>
    public void Read()
    {
        string a = PlayerPrefs.GetString("name");
        int b = PlayerPrefs.GetInt("age");
        int c = PlayerPrefs.GetInt("atack");
        int d = PlayerPrefs.GetInt("defend");
        Debug.Log("玩家的姓名为" + a);
        Debug.Log("年龄为" + b);
        Debug.Log("攻击力为" + c);
        Debug.Log("防御力为" + d);

    }

    /// <summary>
    /// 读取装备数量数据
    /// </summary>
    public void ReadEquip()
    {
   
        for (int i = 1; i <= 3; i++)
        {
            Debug.Log("Equip" + i + "Id为:" + PlayerPrefs.GetString("Equip" + i + "ID"));
            Debug.Log("Equip" + i + "数量为:"+PlayerPrefs.GetInt("Equip" + i + "Number"));

        }
    }

}



>在题目的基础上实现多对象存储


//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:      _______________
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Play : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        PlayerMess boss = new PlayerMess("孙悟空", 18, 999, 666);
        Equipment equipment1 = new Equipment("001", 1);
        Equipment equipment2 = new Equipment("002", 3); ;
        Equipment equipment3 = new Equipment("003", 4); ;

        boss.AddStateToList(equipment1);
        boss.AddStateToList(equipment2);
        boss.AddStateToList(equipment3);

        boss.Save("Boos1");
        boss.Read();
        boss.SaveEquip("Boss1");
        boss.ReadEquip();
    }

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

    }
}

/// <summary>
/// 装备信息类
/// </summary>
public class Equipment
{
    private string id;
    private int numb;
    public string Id { get => id; }
    public int Numb { get => numb; }
    public Equipment(string v1, int v2)
    {
        this.id = v1;
        this.numb = v2;
    }
}

/// <summary>
/// 玩家信息类
/// </summary>
public class PlayerMess
{
    private string name;
    private int age;
    private int atack;
    private int defend;
    private string  NameFlag;     //为实现多个对象存储的关键
    public List<Equipment> equipMess; //存储装备类中的信息


    public PlayerMess(string name, int age, int atack, int defend)
    {
        this.name = name;
        this.age = age;
        this.atack = atack;
        this.defend = defend;
        equipMess = new List<Equipment>();

    }

    public void AddStateToList(Equipment t)
    {
        equipMess.Add(t);
    }
    /// <summary>
    /// 存储装备数据
    /// </summary>
    public void SaveEquip(string nameFlag)
    {
        NameFlag = nameFlag;
        int i = 1;
        foreach (Equipment item in equipMess)
        {
            string a = nameFlag+"_Equip" + i + "ID";
            string b = nameFlag + "_Equip" + i + "Number";
            PlayerPrefs.SetString(a, item.Id);
            PlayerPrefs.SetInt(b, item.Numb);
            i++;
        }
    }

    /// <summary>
    /// 存储玩家数据
    /// </summary>
    public void Save(string nameFlag)  
    {
        NameFlag = nameFlag;
        PlayerPrefs.SetString(nameFlag + "_name", name);
        PlayerPrefs.SetInt(nameFlag+"_age", age);
        PlayerPrefs.SetInt(nameFlag+"_atack", atack);
        PlayerPrefs.SetInt(nameFlag+"_defend", defend);
        PlayerPrefs.Save();
    }

    /// <summary>
    /// 读取玩家数据·
    /// </summary>
    public void Read()
    {
        string a = PlayerPrefs.GetString(NameFlag+"_name");
        int b = PlayerPrefs.GetInt(NameFlag + "_age");
        int c = PlayerPrefs.GetInt(NameFlag + "_atack");
        int d = PlayerPrefs.GetInt(NameFlag + "_defend");
        Debug.Log("玩家的姓名为" + a);
        Debug.Log("年龄为" + b);
        Debug.Log("攻击力为" + c);
        Debug.Log("防御力为" + d);

    }

    /// <summary>
    /// 读取装备数量数据
    /// </summary>
    public void ReadEquip()
    {
   
        for (int i = 1; i <= 3; i++)
        {
            Debug.Log("Equip" + i + "Id为:" + PlayerPrefs.GetString(NameFlag+"_Equip" + i + "ID"));
            Debug.Log("Equip" + i + "数量为:"+PlayerPrefs.GetInt(NameFlag+"_Equip" + i + "Number"));

        }
    }

}


>排行榜信息


//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:排行榜功能     
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------


public class Chats : MonoBehaviour
{
    public List<Player> listSave;
    public void Save( )  //多对象存储
    {
        for (int i = 0; i < listSave.Count ; i++)
        {
            PlayerPrefs.SetString(listSave[i].PlayName + "_name", listSave[i].RealName);
            PlayerPrefs.SetInt(listSave[i].PlayName + "_soccer", listSave[i].Soccer);
            PlayerPrefs.SetInt(listSave[i].PlayName + "_time", listSave[i].Time);
        } 
        PlayerPrefs.Save();
    }

    public void Print()  //读取排行榜信息
    {
        string a;
        int b;
        int c;
        for (int i = 0; i < listSave.Count; i++)
        {
            a = PlayerPrefs.GetString(listSave[i].PlayName + "_name");
            b = PlayerPrefs.GetInt(listSave[i].PlayName + "_soccer");
            c = PlayerPrefs.GetInt(listSave[i].PlayName + "_time");
            print($"玩家{ listSave[i].PlayName} 的名字为:{a}");
            print($"玩家{ listSave[i].PlayName} 的分数为:{b}");
            print($"玩家{ listSave[i].PlayName} 的排名为:{a}");
        }     
    }

    // Start is called before the first frame update
    void Start()
    {
        listSave = new List<Player>();
        Player player1 = new Player("张三", "Baga", 99, 1);
        Player player2 = new Player("李四", "Gaji", 56, 3);
        Player player3 = new Player("王五", "Wujige", 92, 2);
        listSave.Add(player1);
        listSave.Add(player2);
        listSave.Add(player3);

        Save();
        Print();
       
    }

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


【unity之数据持久化】-Unity公共类PlayerPrefs

题目:上一题的玩家类中包含一个List存储了拥有的所有装备信息。请在上一题的基础上,把装备信息的存储和读取加上


⭐相关文章⭐

⭐【2023unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随

⭐【2023unity游戏制作-mango的冒险】-3.基础动作和动画API实现

⭐【2023unity游戏制作-mango的冒险】-2.始画面API制作

⭐【2023unity游戏制作-mango的冒险】-1.场景搭建

⭐“狂飙”游戏制作—游戏分类图鉴(网易游学)

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



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!文章来源地址https://www.toymoban.com/news/detail-439293.html

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

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

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

相关文章

  • Unity PlayerPrefs 持久化数据存在哪

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

    2024年02月16日
    浏览(46)
  • 【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)
  • 【unity数据持久化】XML数据管理器知识点

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

    2024年02月11日
    浏览(41)
  • 【unity数据持久化】数据管理类_PlayerPrfs封装包

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity数据存储 🎶 PlayerPrefs—存储主方法 🎶 PlayerPrefs—普通数据类型的反射存储 🎶 PlayerPrefs—泛型List的反射存储 🎶 PlayerPrefs—泛型

    2024年02月12日
    浏览(34)
  • Unity3D学习之数据持久化——PlayerPrefs

    就是保存存档和读取存档。 分为两部分,存储和读取,先看存储在看读取 PlayerPrefs 是unity提供可以存储和读取玩家数据的公共类 上面定义过 PlayerPrefs.SetInt(“myAge”,18) 后面再定义PlayerPrefs.SetFloat(“myAge”,20.2f) 后面进行读取int型 myAge时,会变成默认值0 打印结果 0 和 100 1)父

    2024年01月18日
    浏览(80)
  • Unity3D学习之数据持久化——XML

    最终达到的效果 树形结构 属性通过空格隔开 属性名 = 引导包裹的内容 这两个代表的东西是一样的 可以在菜鸟上使用xml验证器 xml验证器 在Resources文件夹创建一个xml文件 把文件再复制到streamingAsserts 3.2.1 通过Resources文件进行读取 3.2.2 通过xml文件进行加载 获取根节点 遍历同名

    2024年01月23日
    浏览(45)
  • 【Unity】二进制文件 数据持久化(修改版)【个人复习笔记/有不足之处欢迎斧正/侵删】

             变量的本质都是二进制 ,在内存中都以字节的形式存储着,通过sizeof方法可以看到常用变量类型占用的字节空间长度( 1byte = 8bit,1bit(位)不是0就是1 )         二进制文件读写的本质: 将各类型变量转换为字节数组,将字节数组直接存储到文件中 ,不仅可以节

    2024年04月17日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包