Unity 数据持久化【PlayerPrefs】

1、数据持久化

在这里插入图片描述


概念

将【变量数据】在内存和硬盘之间的存储或读取

内容

PlayerPrefs的基本方法
PlayerPrefs在不同平台的存储位置
利用反射结合PlayerPrets制作通用存诸工具

PlayerPrefs基本方法

1、PlayerPrefs概念

是unity提供的可以用于存储读取玩家数据的公共类

2、存储相关

PlaverPrefs的数据存储类似于键值对存储一个键对应一个值
提供了存储3种数据的方法int float string
键:string类型
值:int float string对应3API 
    PlayerPrefs.SetInt("myAge", 18);
    PlayerPrefs.SetFloat("myHeight", 183.5f);
    PlayerPrefs.SetString("myName", "姓名");
    PlayerPrefs.Save();

	bool sex = true; //sex若为true存1,sex若为flase则存1
	PlayerPrefs.SetInt("sex", sex ? 1 : 0);

如果用同一个键名,会进行覆盖
	PlayerPrefs.SetFloat("myAge", 18.3f);
	//键名是唯一的

3、读取相关

Set之后也能读取信息,读取顺序为:内存 > 硬盘

1int
    int age = PlayerPrefs.GetInt("myAge");
    print(age); //0 被覆盖
    age = PlayerPrefs.GetInt("myAge", 18); //18 设置的初始默认值
    print(age);

2float
    float height = PlayerPrefs.GetFloat("myHeight", 100f);
	print(height);

3string
    string name = PlayerPrefs.GetString("myName");
	print(name);

是否存在的键名
    if (PlayerPrefs.HasKey("myName"))
    {
   
    	print("存在myName对应的键值对数据");
    }

4、删除数据

删除指定键值对
    PlayerPrefs.DeleteKey("myAge");

删除所有
    PlayerPrefs.DeleteAll();

思考 信息的存储和读取

玩家信息类,装备信息类
用List存储装备信息
添加标识,存储多个玩家信息
将信息存储读取

using System.Collections.Generic;
using UnityEngine;

public class Item
{
   
    public int id;
    public int num;
}
public class Player
{
   
    public string name;
    public int age;
    public int atk;
    public int def;

    public List<Item> itemList;
    
    //用于存储或读取的标识
	private string keyName;

    /// <summary>
    /// 存储数据
    /// </summary>
    public void Save()
    {
   
        PlayerPrefs.SetString(keyName + "_name", name);
        PlayerPrefs.SetInt(keyName + "_age", age);
        PlayerPrefs.SetInt(keyName + "_atk", atk);
        PlayerPrefs.SetInt(keyName + "_def", def);

        PlayerPrefs.SetInt(keyName + "_ItemNum", itemList.Count);
        for (int i = 0; i < itemList.Count; i++)
        {
   
            PlayerPrefs.SetInt(keyName + "_itemID" + i, itemList[i].id);
            PlayerPrefs.SetInt(keyName + "_itemNum" + i, itemList[i].num);
        }

        PlayerPrefs.Save();
    }
    /// <summary>
    /// 读取数据
    /// </summary>
    public void Load(string keyName)
    {
   
        //记录传入的标识
        this.keyName = keyName;

        name = PlayerPrefs.GetString(keyName + "_name", "未命名");
        age = PlayerPrefs.GetInt(keyName + "_age", 18);
        atk = PlayerPrefs.GetInt(keyName + "_atk", 20);
        def = PlayerPrefs.GetInt(keyName + "_def", 2);

        //获取数量
        int num = PlayerPrefs.GetInt(keyName + "_ItemNum", 0);
        //初始化容器
        itemList = new List<Item>();
        Item item;
        for (int i = 0; i < num; i++)
        {
   
            item = new Item();
            item.id = PlayerPrefs.GetInt(keyName + "_itemID" + i);
            item.num = PlayerPrefs.GetInt(keyName + "_itemNum" + i);
            itemList.Add(item);
        }
    }
}
public class Test1_Exercises : MonoBehaviour
{
   
    void Start()
    {
   
        Player p = new Player();
        p.Load();
        //print(p.name);
        //print(p.age);
        //print(p.atk);
        //print(p.def);

        print("不同类型道具数量:"+p.itemList.Count);
        for (int i = 0; i < p.itemList.Count; i++)
        {
   
            print("道具id:" + p.itemList[i].id);
            print("道具数量:" + p.itemList[i].num);
        }

        Item item = new Item();
        item.id = 1;
        item.num = 99;
        p.itemList.Add(item);

        item = new Item();
        item.id = 2;
        item.num = 99;
        p.itemList.Add(item);

        p.Save();
        
        //其他玩家
        Player p2 = new Player();
        p2.Load("Player2");
        p2.Save();
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值