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
存储和访问 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
项目中可以共享数据的保存方法。在这里保存的数据都会被加密,很适合保存个人信息系或是密码之类的东西。
 使用这个 API 保存的数据只会对自身的Project产生影响。
 以 value 加密的形式,保存在项目内的文件中。
 以 Unity2021 为例,数据保存在项目的 UserSettings 目录下的 EditorUserSettings.asset 。(txt格式)
 旧版本存储在 Library的EditorUserSettings.asset 中。(二进制格式)
| 函数 | 说明 | 
| SetConfigValue | 为给定键标识的项设置单个字符串值。 | 
| GetConfigValue | 返回 EditorUserSettings.asset 文件中与 key 对应的值(如果存在)。 | 
PlayerPrefs 是一个存储游戏会话之间玩家偏好的类。 它可以将字符串、浮点数和整数值存储到用户的平台注册表中。
 Unity 根据应用程序运行的操作系统以不同方式存储 PlayerPrefs 数据。 本页给出的文件路径中,公司名称和产品名称是您在 Unity 的 Player Settings 中设置的名称。
PlayerPrefs 存储在 ~/Library/Preferences/com.ExampleCompanyName.ExampleProductName.plist 中。 Unity 对编辑器和独立设备上的项目使用相同的 .plist 文件。PlayerPrefs 存储在 HKCU\Software\公司名称\产品名称 键中。PlayerPrefs 存储在 ~/.config/unity3d/公司名称/产品名称 中。PlayerPrefs 存储在 %userprofile%\AppData\Local\Packages\[产品包编号]\LocalState\playerprefs.dat 中。PlayerPrefs 数据存储在应用程序的本地文件夹中。有关详细信息,请参阅 Directory.localFolder。PlayerPrefs 存储在 /data/data/pkg-name/shared_prefs/pkg-name.v2.playerprefs.xml 中。 Unity 将 PlayerPrefs 数据存储在设备上的 SharedPreferences 中。 C#、JavaScript、Android Java 和本机代码都可以访问 PlayerPrefs 数据。IndexedDB API 存储 PlayerPrefs 数据。有关更多信息,请参阅 IndexedDB。PlayerPrefs 存储在 /Library/Preferences/[bundle identifier].plist 中。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
假设有一个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;
		}
	}
}
使用 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;
		}
	}
	假如有类
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>
TextAsset text=(TextAsset)Resources.Load("unity3d");
Debug.Log(text.text);
在Project窗口的根目录创建Resources文件夹,然后把名字为unity3d.txt的文件夹的文件放在Resources文件夹下就可以读取到。
                
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删