1.5 Unity中的数据存储 PlayerPrefs、XML、JSON

Unity中的三种数据存储:数据存储也称为数据持久化

一、PlayerPrefs

PlayerPrefs是Unity引擎自身提供的一个用于本地持久化保存与读取的类,以键值对的形式将数据保存在文件中,然后程序可以根据关键字提取数值。

PlayerPrefs类支持3种数据类型的保存和读取:浮点型、整形、字符串型

1.保存数据

cs 复制代码
        //保存整型数据
        PlayerPrefs.SetInt("int1",123);
        //保存浮点型数据
        PlayerPrefs.SetFloat("float1",123.4f);
        //保存字符串型数据
        PlayerPrefs.SetString("string1","名字");

2.读取数据

cs 复制代码
        //读取整数型数据
        PlayerPrefs.GetInt("int1");
        //读取浮点型数据
        PlayerPrefs.GetFloat("float1");
        //读取字符串型数据
        PlayerPrefs.GetString("string1");

3.获取数据

通过Key值获取在本地持久化的数据,如果Key值不存在,那么就会返回一个默认值

cs 复制代码
        //读取整数型数据,如果key值不存在 那么就会返回一个默认值0
        PlayerPrefs.GetInt("int1",123);
        //读取浮点型数据,如果key值不存在 那么就会返回一个默认值0.0
        PlayerPrefs.GetFloat("float1",123.4f);
        //读取字符串型数据,如果key值不存在 那么就会返回一个默认值""
        PlayerPrefs.GetString("string1","名字");

4.查找是否存在该键值

cs 复制代码
PlayerPrefs.HasKey("int");

5.清除所有记录

cs 复制代码
 PlayerPrefs.DeleteAll();

6.删除其中某一条记录

cs 复制代码
PlayerPrefs.DeleteKey("int");

7.将记录写入磁盘

cs 复制代码
PlayerPrefs.Save()

8.示例

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerPabsTest : MonoBehaviour
{
 
    // Use this for initialization
    void Start () {
        //写入姓名数据
        PlayerPrefs.SetString("姓名","张三");
        //查找是否存在键值为'姓名'的数据
        if (PlayerPrefs.HasKey("姓名"))
        {
            //读取键值为 '姓名' 的数据 并打印
            Debug.Log(PlayerPrefs.GetString("姓名"));
        }
    }
}

打印结果:

cs 复制代码
张三

9.不同平台的PlayerPrefs存储路径

  • Mac OS X:~/Library/Preferences
  • Windows:HKCU\Software[company name][product name]
  • Linux:~/.config/unity3d/ [CompanyName]/ [ProductName]
  • Windows Store Apps: %userprofile% AppData Local\Packages\[ProductPackageld]>/LocalSt ate/playerprefs.dat
  • WebPlayer
    • Mac OS X: ~/Library/ Preferences/Unity/ WebPlayer Prefs
    • Windows: %APPDATA% Unity\WebPlayer Prefs

10.优缺点

  • 优点:可以快速便捷的处理一些数据,比XMLQ、JSON等其他方法要快的多,对于开发者来说,读写也非常简单
  • 缺点:只能对整数型、浮点型和字符串型三种类型数据进行处理,如果遇上非常庞大的一个数据量就会非常麻烦不利于管理

在开发平时的一些小项目对数据存储功能没有强的需求时,使用效果很好!

注意:PlayerPrfs不同数据,不能同名,即便是不同的数据类型

相关推荐
虾球xz1 小时前
游戏引擎学习第295天:堆叠房间用于Z层调试
c++·人工智能·学习·游戏引擎
hellolxb2 小时前
Unreal Engine: Windows 下打包 AirSim项目 为 Linux 平台项目
linux·游戏引擎·虚幻
3D小将5 小时前
从产品展示到工程设计:3DXML 转 STP 的跨流程数据转换技术解析
xml·3d
achonor5 小时前
UnityShader 植物被风吹弯效果
unity·shader·mesh
虾球xz5 小时前
游戏引擎学习第292天:实现蛇
c++·学习·游戏引擎
DanmF--5 小时前
Protobuf协议生成和使用
网络·unity·c#·游戏引擎·游戏程序
AgilityBaby5 小时前
关于在Unity项目中使用Post Processing插件打包到web端出现的问题
3d·unity·游戏引擎
FAREWELL0007514 小时前
Unity学习总结篇(1)关于各种坐标系
学习·unity·c#·游戏引擎
与火星的孩子对话1 天前
Unity3D开发AI桌面精灵/宠物系列 【六】 人物模型 语音口型同步 LipSync 、梅尔频谱MFCC技术、支持中英文自定义编辑- 基于 C# 语言开发
人工智能·unity·c#·游戏引擎·宠物·lipsync
虾球xz1 天前
游戏引擎学习第293天:移动Familiars
c++·学习·游戏引擎