一、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,然后找到你的项目,点击在右侧就能看到存储的数据了(在注册后会在这里有记录,没有注册过是不会有记录的),双击可以查看值,右键可以进行修改删除等操作