3.不同平台的存储位置
3.1 知识点
PlayerPrefs存储的数据存在哪里?
在不同平台上,PlayerPrefs存储的位置会有所不同:
Windows
在Windows操作系统下,PlayerPrefs存储在注册表中的以下位置:
HKCU\Software\[公司名称]\[产品名称]
其中,公司名称和产品名称是在Unity的“Project Settings”中的Player栏设置的名称。
你可以通过以下步骤找到对应路径,并修改存储的值:
- 运行 regedit
- 找到 HKEY_CURRENT_USER
- 在其中找到 SOFTWARE
- 在其中找到 Unity
- 在其中找到 UnityEditor
- 在其中找到 公司名称
- 在其中找到 产品名称
Android
在Android操作系统下,PlayerPrefs存储在以下位置:
/data/data/包名/shared_prefs/pkg-name.xml
iOS
在iOS操作系统下,PlayerPrefs存储在以下位置:
/Library/Preferences/[应用ID].plist
PlayerPrefs数据唯一性
PlayerPrefs中不同数据的唯一性是由key决定的,不同的key决定了不同的数据。如果在同一项目中不同数据的key相同,会造成数据丢失。因此,要保证数据不丢失,需要建立一个保证key唯一的规则。
3.2 练习题
将知识点一中的练习题,改为可以支持存储多个玩家信息
// 略 详见Lesson2基本方法练习题
要在游戏中做一个排行榜功能,排行榜主要记录玩家名(可重复),玩家得分,玩家通关时间,请用PlayerPrefs存储读取排行榜相关信息
创建排行榜类和排行榜单条信息类,添加读取存储添加单条信息逻辑
/// <summary>
/// 排行榜多条具体信息
/// </summary>
public class RankListInfo
{
//排行榜单条信息列表
public List<RankInfo> rankList;
//初始化的时候就是读取数据
public RankListInfo()
{
Load();
}
/// <summary>
/// 新加排行榜信息
/// </summary>
public void Add(string name, int score, int time)
{
rankList.Add(new RankInfo(name, score, time));
}
//存储数据
public void Save()
{
//存储有多少条数据
PlayerPrefs.SetInt("rankListCount", rankList.Count);
for (int i = 0; i < rankList.Count; i++)
{
RankInfo info = rankList[i];
PlayerPrefs.SetString("rankInfo" + i, info.playerName);
PlayerPrefs.SetInt("rankScore" + i, info.playerScore);
PlayerPrefs.SetInt("rankTime" + i, info.playerTime);
}
}
//读取数据
private void Load()
{
int rankListCount = PlayerPrefs.GetInt("rankListCount", 0);
rankList = new List<RankInfo>();
for (int i = 0; i < rankListCount; i++)
{
RankInfo info = new RankInfo(PlayerPrefs.GetString("rankInfo" + i),
PlayerPrefs.GetInt("rankScore" + i),
PlayerPrefs.GetInt("rankTime" + i));
rankList.Add(info);
}
}
}
/// <summary>
/// 排行榜单条信息
/// </summary>
public class RankInfo
{
public string playerName;
public int playerScore;
public int playerTime;
public RankInfo(string name, int score, int time)
{
playerName = name;
playerScore = score;
playerTime = time;
}
}
在Start函数中创建排行榜,添加信息打印保存
void Start()
{
//初始化一个排行榜
RankListInfo rankListInfo = new RankListInfo();
print(rankListInfo.rankList.Count);
//打印排行榜所有信息
for (int i = 0; i < rankListInfo.rankList.Count; i++)
{
print("姓名" + rankListInfo.rankList[i].playerName);
print("分数" + rankListInfo.rankList[i].playerScore);
print("时间" + rankListInfo.rankList[i].playerTime);
}
//添加排行榜单条信息保存
rankListInfo.Add("林文韬", 100, 99);
rankListInfo.Save();
}
3.3 练习题代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#region 练习题二
/// <summary>
/// 排行榜多条具体信息
/// </summary>
public class RankListInfo
{
//排行榜单条信息列表
public List<RankInfo> rankList;
//初始化的时候就是读取数据
public RankListInfo()
{
Load();
}
/// <summary>
/// 新加排行榜信息
/// </summary>
public void Add(string name, int score, int time)
{
rankList.Add(new RankInfo(name, score, time));
}
//存储数据
public void Save()
{
//存储有多少条数据
PlayerPrefs.SetInt("rankListCount", rankList.Count);
for (int i = 0; i < rankList.Count; i++)
{
RankInfo info = rankList[i];
PlayerPrefs.SetString("rankInfo" + i, info.playerName);
PlayerPrefs.SetInt("rankScore" + i, info.playerScore);
PlayerPrefs.SetInt("rankTime" + i, info.playerTime);
}
}
//读取数据
private void Load()
{
int rankListCount = PlayerPrefs.GetInt("rankListCount", 0);
rankList = new List<RankInfo>();
for (int i = 0; i < rankListCount; i++)
{
RankInfo info = new RankInfo(PlayerPrefs.GetString("rankInfo" + i),
PlayerPrefs.GetInt("rankScore" + i),
PlayerPrefs.GetInt("rankTime" + i));
rankList.Add(info);
}
}
}
/// <summary>
/// 排行榜单条信息
/// </summary>
public class RankInfo
{
public string playerName;
public int playerScore;
public int playerTime;
public RankInfo(string name, int score, int time)
{
playerName = name;
playerScore = score;
playerTime = time;
}
}
#endregion
public class Lesson03_练习题 : MonoBehaviour
{
void Start()
{
#region 练习题一
//将基本方法中的练习题,改为可以支持存储多个玩家信息
//略 详见Lesson2基本方法练习题
#endregion
#region 练习题二
//要在游戏中做一个排行榜功能
//排行榜主要记录玩家名(可重复),玩家得分,玩家通关时间
//请用PlayerPrefs存储读取排行榜相关信息
//初始化一个排行榜
RankListInfo rankListInfo = new RankListInfo();
print(rankListInfo.rankList.Count);
//打印排行榜所有信息
for (int i = 0; i < rankListInfo.rankList.Count; i++)
{
print("姓名" + rankListInfo.rankList[i].playerName);
print("分数" + rankListInfo.rankList[i].playerScore);
print("时间" + rankListInfo.rankList[i].playerTime);
}
//添加排行榜单条信息保存
rankListInfo.Add("林文韬", 100, 99);
rankListInfo.Save();
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com