|
· 编辑器插件使用类:
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 对应的值(如果存在)。 | <hr>· 游戏内部储存数据类
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文件夹下就可以读取到。
暂时学到的就这几种,后面有新的再添加 |
|