Unity用于储存数据的几种方式
· 编辑器插件使用类:
1. SessionState
描述
SessionState 是一种键/值存储,旨在存储和检索应在重新加载程序集期间保留的 Editor 会话状态。
退出 Unity 时,系统将清除 SessionState 中存储的状态信息。用于存储应在使用 EditorPrefs 的 Unity Editor 会话中持久保留的状态信息。
静态函数
函数 | 说明 |
---|---|
EraseBool | 擦除键/值存储中的布尔值条目。 |
EraseFloat | 擦除键/值存储中的浮点条目。 |
Eraselnt | 擦除键/值存储中的整数条目。 |
EraselntArray | 擦除键/值存储中的整数条目。 |
EraseString | 擦除键/值存储中的字符串条目。 |
EraseVector3 | 擦除键/值存储中的 Vector 3 条目。 |
GetBool | 检索布尔值。 |
GetFloat | 检索浮点值。 |
Getlnt | 检索整数值。 |
GetIntArray | 检索整数数组。 |
GetString | 检索字符串值。 |
GetVector3 | 检索 Vector3。 |
SetBool | 存储布尔值。 |
SetFloat | 存储浮点值 |
SetInt | 存储整数值。 |
SetIntArray | 存储整数数组。 |
SetString | 存储字符串值。 |
SetVector3 | 存储Vector3。 |
官方地址:https://docs.unity3d.com/cn/2020.3/ScriptReference/SessionState.html
2. EditorPrefs
描述
存储和访问 Unity 编辑器偏好设置。
在 macOS 上,EditorPrefs 存储在 ~/Library/Preferences/com.unity3d.UnityEditor5.x.plist
。
在 Windows 上,EditorPrefs 存储在注册表中,在 HKCU\Software\Unity Technologies\UnityEditor 5.x 键之下。
静态函数
函数 | 说明 |
---|---|
DeleteAll | 从偏好中删除所有键和值。请谨慎使用。 |
DeleteKey | 从偏好中删除key及其对应值。 |
GetBool | 返回偏好设置文件中与key对应的值(如果存在)。 |
GetFloat | 返回偏好设置文件中与key对应的浮点值(如果存在)。 |
Getlnt | 返回偏好设置文件中与key对应的值(如果存在): |
GetString | 返回偏好设置文件中与key对应的值(如果存在)。 |
HasKey | 如果偏好设置文件中存在/key/,则返回true. |
SetBool | 设置由key标识的偏好的值。 |
SetFloat | 设置由key标识的偏好设置的浮点值。 |
SetInt | 将由键标识的偏好设置的值设置为整数。 |
SetString | 设置由key标识的偏好设置的值。请注意,EditorPrefs不支持null字符串,而是存储空字符串。 |
官方地址:https://docs.unity3d.com/cn/2020.3/ScriptReference/EditorPrefs.html
3. EditorUserSettings
描述
项目中可以共享数据的保存方法。在这里保存的数据都会被加密,很适合保存个人信息系或是密码之类的东西。
使用这个 API 保存的数据只会对自身的Project产生影响。
以 value 加密的形式,保存在项目内的文件中。
以 Unity2021 为例,数据保存在项目的 UserSettings
目录下的 EditorUserSettings.asset
。(txt格式)
旧版本存储在 Library的EditorUserSettings.asset
中。(二进制格式)
静态函数
函数 | 说明 |
---|---|
SetConfigValue | 为给定键标识的项设置单个字符串值。 |
GetConfigValue |
返回 EditorUserSettings.asset 文件中与 key 对应的值(如果存在)。
|
· 游戏内部储存数据类
1. PlayerPrefs
描述
PlayerPrefs
是一个存储游戏会话之间玩家偏好的类。 它可以将字符串、浮点数和整数值存储到用户的平台注册表中。
Unity 根据应用程序运行的操作系统以不同方式存储 PlayerPrefs 数据。 本页给出的文件路径中,公司名称和产品名称是您在 Unity 的 Player Settings 中设置的名称。
独立设备上的储存位置
- macOS:
PlayerPrefs
存储在~/Library/Preferences/com.ExampleCompanyName.ExampleProductName.plist
中。 Unity 对编辑器和独立设备上的项目使用相同的 .plist 文件。 - Windows:
PlayerPrefs
存储在HKCU\Software\公司名称\产品名称
键中。 - Linux:
PlayerPrefs
存储在~/.config/unity3d/公司名称/产品名称
中。 - Windows 应用商店应用程序:
PlayerPrefs
存储在%userprofile%\AppData\Local\Packages\[产品包编号]\LocalState\playerprefs.dat
中。 - Windows Phone 8:Unity 将
PlayerPrefs
数据存储在应用程序的本地文件夹中。有关详细信息,请参阅Directory.localFolder
。 - Android:
PlayerPrefs
存储在/data/data/pkg-name/shared_prefs/pkg-name.v2.playerprefs.xml
中。 Unity 将PlayerPrefs
数据存储在设备上的SharedPreferences
中。 C#、JavaScript、Android Java 和本机代码都可以访问 PlayerPrefs 数据。 - WebGL:Unity 使用浏览器的
IndexedDB API
存储PlayerPrefs
数据。有关更多信息,请参阅IndexedDB
。
编辑器内播放模式存储位置
- macOS:
PlayerPrefs
存储在/Library/Preferences/[bundle identifier].plist
中。 - Windows 上,
PlayerPrefs
存储在HKCU\Software\Unity\UnityEditor\ExampleCompanyName\ExampleProductName
键中。 Windows 10 使用应用程序的PlayerPrefs
名称。 例如,Unity 添加一个DeckBase
字符串并将其转换为DeckBase_h3232628825
。 应用程序忽略扩展名。
Unity 将 PlayerPrefs
存储在本地注册表中,没有加密。 不要使用 PlayerPrefs 数据来存储敏感数据。
静态函数
函数 | 说明 |
---|---|
DeleteAll | 从偏好中删除所有键和值。请谨慎使用。 |
DeleteKey | 从 PlayerPrefs 中删除给定的键。 如果键不存在,DeleteKey 没有影响。 |
GetFloat | 返回偏好设置文件中与 key 对应的值(如果存在)。 |
GetInt | 返回偏好设置文件中与 key 对应的值(如果存在)。 |
GetString | 返回偏好设置文件中与 key 对应的值(如果存在)。 |
HasKey | 如果 PlayerPrefs 中存在给定键,则返回 true,否则返回 false。 |
Save | 将所有修改的偏好写入磁盘。 |
SetFloat | 为给定键标识的首选项设置单个浮点值。 您可以使用 PlayerPrefs.GetFloat 来检索此值。 |
SetInt | 为给定键标识的首选项设置单个整数值。 您可以使用 PlayerPrefs.GetInt 来检索此值。 |
SetString | 为给定键标识的首选项设置单个字符串值。 您可以使用 PlayerPrefs.GetString 来检索此值。 |
官方地址:https://docs.unity3d.com/cn/2020.1/ScriptReference/PlayerPrefs.html
2.BinaryFormatter 二进制序列化
假设有一个Player类
[System. Serializable]
public class Player
{public int health;public int power;public Vector3 position;
}
由于BinaryFormatter序列化不支持Unity的Vector3类型,所以我们需要做一下包装。
public class PlayerData{public int level;public int health;public float[] position;public PlayerData(Player player){this.level = player.level;this.health = player.health;this.position = new float[3];this.position[0] = player.transform.position.x;this.position[1] = player.transform.position.y;this.position[2] = player.transform.position.z;}
}
我们对PlayerData进行保存和读取。读取出来的PlayerData可以赋给Player。
public static class SaveSystem{//保存数据public static void SavePlayer(Player player){BinaryFormatter formatter = new BinaryFormatter();string path = Application.persistentDataPath+"/player.fun";FileStream stream = new FileStream(path,FileMode.Create);PlayerData data = new PlayerData(player);formatter.Serialize(stream,data);stream.Close();}//读取数据public static PlayerData LoadPlayer(){string path = Application.persistentDataPath+"/player.fun";if(File.Exists(path)){BinaryFormatter formatter = new BinaryFormatter();FileStream stream = new FileStream(path,FileMode.Open);PlayerData data = formatter.Deserialize(stream) as PlayerData;stream.Close();return data;}else{Debug.LogError("找不到保存文件 "+path);return null;}}
}
3. 保存为json格式的文本文件
使用 Unity 自身API JsonUtility。
保存数据
public static void SavePlayerJson(Player player){string path = Application.persistentDataPath+"/player.json";var content = JsonUtility.ToJson(player,true);File.WriteAllText(path,content);}
读取数据
public static PlayerData LoadPlayerJson(){string path = Application.persistentDataPath+"/player.json";if(File.Exists(path)){var content = File.ReadAllText(path);var playerData = JsonUtility.FromJson<PlayerData>(content);return playerData;}else{Debug.LogError("找不到保存文件 "+path);return null;}}
4. XmlSerializer进行序列化
假如有类
public class Entity
{public Entity(){}public Entity(string c, string f){name = c;school = f;}public string name;public string school;
}
读取数据
List<Entity> entityList=null;
XmlSerializer xs = new XmlSerializer(typeof(List<Entity>));
using (StreamReader sr = new StreamReader(configPath))
{entityList = xs.Deserialize(sr) as List<Entity>;
}
保存数据
List<Entity> entityList=null;
XmlSerializer xs = new XmlSerializer(typeof(List<Entity>));
using (StreamWriter sw = File.CreateText(configPath))
{xs.Serialize(sw, entityList);
}
对应的xml文件为:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfEntity xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Entity><Name>Alice</Name><School>SJTU</School></Entity><Entity><Name>Cici</Name><School>CSU</School></Entity><Entity><Name>Zero</Name><School>HIT</School></Entity>
</ArrayOfEntity>
5.TextAsset(普通文本读取)
TextAsset text=(TextAsset)Resources.Load("unity3d");
Debug.Log(text.text);
在Project窗口的根目录创建Resources文件夹,然后把名字为unity3d.txt的文件夹的文件放在Resources文件夹下就可以读取到。
暂时学到的就这几种,后面有新的再添加
Unity用于储存数据的几种方式相关推荐
- 在.NET Core 中收集数据的几种方式
APM是一种应用性能监控工具,可以帮助理解系统行为, 用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题, 通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理 ...
- Android数据存储几种方式用法总结
Android数据存储几种方式用法总结 1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存 ...
- python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式
本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...
- form表单、控制器中接收表单提交数据的4种方式
Form表单 这篇文章主要讲的是form表单的提交 之前我们接触过的form表单元素是在Bootstrap框架里面,这次也将用到Bootstrap框架去布局(见图表1)通过Bootstrap框架布局呈 ...
- 【Matlab系列】MATLAB中显示输出数据的四种方式
DATE: 2019-11-13 1.参考 MATLAB 显示输出数据的三种方式 Matlab之print,fprint,fscanf,disp函数 2.改变数据格式 当数据重复再命令行窗口时,整数以 ...
- C#读取Excel数据的几种方式(包含大量数据读取)
C#读取Excel数据的几种方式(包含大量数据读取) C#读取Excel数据的几种方式(包含大量数据读取) OleDB方式 COM组件的方式 NPOI方式读取(此处未测试,参考其他博文) 常用的Exc ...
- mysql数据库删除数据的三种方式:
mysql数据库删除数据的三种方式: delete from table where 直接删除表中的某一行数据,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作.所以delete相 ...
- discard connection丢失数据_python kafka 生产者发送数据的三种方式
python kafka 生产者发送数据的三种方式 发送方式 同步发送 发送数据耗时最长 有发送数据的状态,不会丢失数据,数据可靠性高 以同步的方式发送消息时,一条一条的发送,对每条消息返回的结果判断 ...
- 向服务器端提交数据的两种方式
朴素版: ...
最新文章
- 使用php读写mysql数据库并显示到网页上
- OSChina 周六乱弹 —— 去做点疯狂的事情
- linux裁剪—定制自己所需要的linux
- 关于数位动规(入门到进阶,难度中档)
- 【opencv】边缘提取或通过二值图片提取对应的三维图像(python)
- Markdown用法
- CentOS 内核升级的总结
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
- 360补丁打上以后漏洞依然存在?
- Javascript:Promise异步编程解决方案
- Rime中州韵导入QQ五笔词库
- 【Endnote】CNKI E-Study与Endnote 的参考文献题录互导
- 头脑王者 物理化学生物
- iOS 最新AppStore申请加急审核 以及 apple联系方式大全
- linux常用命令知识点
- 利用Python3中turtle的绘制超立方体。
- 嵌入式系统开发-麦子学院(3)——Linux C初级编程1
- 浩辰cad2017破解版|浩辰电气cad2017无限使用破解版下载
- SEO人员,如何保持创新思维?
- 新时代动画电影的互联网宣传