PlayerPrefs数据存储

一、PlayerPrefs类

PlayerPrefs是unity引擎提供的一个专门用于数据持久化的类,其内部提供了很多静态方法,可以用于存取程序中不同类型的数据,目前支持的数据类型只有整型,浮点型和字符串三种

1、存储机制

PlayerPrefs内部以字典的方式存储所有数据,即每一个数据都是一组键值对,其中,键指代数据名称,必须为string类型且不能重复,而值则存储了数据值本身,其类型只能是整型,浮点型和字符串类型,如下表:

PlayerPrefs中的存档数据
数据键 数据值 数据类型
Name 李华 string
sex string

PlayerPrefs遵循‘“有则修改,无则添加”的原则,即对于将要存储的某个数据,若在其内部不存在,则会以一组新数据的形式添加到其中,否则就会修改对应的数据值

2、常用方法

PlayerPrefs中包含的方法都是静态方法,可以直接通过类名来访问,具体如下:

PlayerPrefs中的静态方法
方法 含义
SetFloat()、GetFloat() 存储、读取float类型的数据
SetInt()、GetInt() 存储、读取int类型的数据
SetString()、GetString() 存储、读取string类型的数据
DeleteAll() 删除所有已存储的数据
DeleteKey() 删除某个key值的数据
HasKey 判断是否存在键为key的数据
Save() 立即将缓存中的数据写入磁盘中
public static void SetInt (string key, int value);
// 设置由 key 键确定的整数值
 
public static void SetFloat (string key, float value);
// 设置由 key 键确定的浮点数值
 
public static void SetString (string key, string value);
// 设置由 key 键确定的字符串值
 
public static int GetInt (string key);
public static int GetInt (string key, int defaultValue);
// 获取存储文件中 key 键对应的整数值(不存在则返回 defaultValue)
 
public static float GetFloat (string key);
public static float GetFloat (string key, float defaultValue);
// 获取存储文件中 key 键对应的浮点数值(不存在则返回 defaultValue)
 
public static string GetString (string key);
public static string GetString (string key, string defaultValue);
// 获取存储文件中 key 键对应的字符串值(不存在则返回 defaultValue)
 
public static void Save ();
// 将所有修改的内容写入硬盘(默认情况下,Unity 会在 OnApplicationQuit() 执行过程中自动写入)
 
public static bool HasKey (string key);
// 判断 key 键是否存在(存在则返回 true)
 
public static void DeleteKey (string key);
// 删除 key 键以及其对应的值
 
public static void DeleteAll ();
// 删除所有存储内容(需谨慎使用)

3、应用案例(登录注册)

(一)界面效果如下:

(二)基本组件即介绍

 (1)canvas 画布(右键->UI->canvas)

(2)RawImage 用来存放背景图片(右键->UI->RawImage)

(3)login 空物体(右键->Create Empty),用来挂代码login class(代码在后面)

(4)text  文字显示“欢迎来到注册登录界面”(右键->UI->text)

(5)username  输入用户名(右键->Input Filed),组件placeholder的文本设置为“请输入用户名”

 

 (6)passwad  输入密码(右键->Input Filed),组件placeholder的文本设置为“请输入密码”

(7)confirmpassword 确认密码(右键->Input filed)组件placeholder的文本设置为“请确认密码”

(8)remindertext 是一个text组件(右键->UI->text)文本设置为“注册登录反馈提示”

(9)注册  按钮(右键->UI->button)text设置为“注册”

(10)登录  按钮(注册按钮复制粘贴,两个按钮放在相同的位置) text设置为“登录”,登录按钮要取消,注册和登录只显示一个(右侧最上面的√取消)

(11)togglegroup  空物体,赋予组件toggle group(右侧->Add Component->Toggle Group)

(12)Toggle注册  开关,一组开关只能打开一个(注册登录只能选择一个),background颜色设置为蓝色(可自行设置),label的text设置为“注册”,把label复制粘贴在background下,toggle注册的设置如下:

 (13)toggle 登录,toggle注册复制粘贴,label内容改为登录,label(1)内容也改为登录,label(1)取消(右侧最上面的√去掉),设置如下

 (三)代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using UnityEngine.SceneManagement;
using MySql.Data.MySqlClient;
using System.Data;
public class LoginClass : MonoBehaviour
{
    //进入前变量
    public InputField username, password, confirmPassword;
    public Text reminderText;
    public int errorsNum;
    public Button loginButton;
    public GameObject hallSetUI, loginUI;
    //进入后变量
    public static string myUsername;

 
    
    public void Register()
    {
       
        if (PlayerPrefs.GetString(username.text) == "")
        {
            if (password.text == confirmPassword.text)
            {
                PlayerPrefs.SetString(username.text, username.text);
                PlayerPrefs.SetString(username.text + "password", password.text);
             
                reminderText.text = "注册成功!";
            }
            else
            {
                reminderText.text = "两次密码输入不一致";
            }
        }
        else
        {
            reminderText.text = "用户已存在";
        }

    }
    private void Recovery()
    {
        loginButton.interactable = true;
    }
    public void Login()
    {
      
        if (PlayerPrefs.GetString(username.text) != "")
        {
            if (PlayerPrefs.GetString(username.text + "password") == password.text)
            {
                
                reminderText.text = "登录成功";
                myUsername = username.text;
                hallSetUI.SetActive(true);
                loginUI.SetActive(false);
                SceneManager.LoadScene(0);
            }
            else
            {
                reminderText.text = "密码错误";
                errorsNum++;
                if (errorsNum >= 3)
                {
                    reminderText.text = "连续错误3次,请30秒后再试!";
                    loginButton.interactable = false;
                    Invoke("Recovery", 5);
                    errorsNum = 0;
                }
            }
        }
        else
        {
            reminderText.text = "账号不存在";
        }
    }
}

(四)注册登录后的数据查询

(1)edit->project settings,查看项目名称

 

(2)Windows+R 输入regedit

 (3)找到文件路径,在software文件夹内往下划,找到unity,然后找到你的项目,点击在右侧就能看到存储的数据了(在注册后会在这里有记录,没有注册过是不会有记录的),双击可以查看值,右键可以进行修改删除等操作

 

猜你喜欢

转载自blog.csdn.net/lxy20011125/article/details/130145944