一.文件读写
文件读取的操作在日常开发过程中应用的频率比我自己想象中要搞得多,json数据读取、配置文件读取等。操作过程
中使用到的知识和结构本身基本固定,但是基本上都是底层逻辑写完之后我们运用的过程中都只需要调用接口即可,所
以经常会遗忘那些固定的结构,导致每次使用的时候都要从头开始去查每一个步骤,因为在此做个相关的内容总结以便
之后用到了可以很快的查找到相关的方法。
1.Unity 特殊文件路径总结
通常可为创建的文件夹选择任何名称来组织Unity项目,但是,Unity会将许多文件夹名称解释为应以特殊方式处理文件夹内容的指令。例如,必须将Editor脚本放在名为Editor的文件夹中才能正常工作一样。
- Application.dataPath
数据安装目录,该值取决于运行时所基于的平台:
Window: E:\Project\AnHeiGame\AnHeiClient\Assets
Mac: E:\Project\AnHeiGame\AnHeiClient\Assets
Android: /data/app/package name-n/base.apk // apk的安装路径
IOS: /var/containers/Bundle/Application/app sandbox/xxx.app/Data
- Application.streamingAssetsPath
(只读)发布工程时,里面资源会原封不动(不会做任何压缩)的进行打包到包体内,在运行是调用,提供文件夹路径;将资源名称添加到路径。构建的应用程序可加载此地址的资源。无法访问WebGL和Android平台的StreamingAssets文件夹。在WebGL上没有文件访问权限。Android使用压缩的.apk文件。这些平台返回URL。可以使用UnityWebRequest类来访问资源。
Window: \StreamingAssets
E:\Project\AnHeiGame\AnHeiClient\Assets\StreamingAssets
Mac: E:\Project\AnHeiGame\AnHeiClient\Assets\StreamingAssets
Android: jar:file:///data/app/package name-1/base.apk!/assets
IOS: /var/containers/Bundle/Application/app sandbox/xxx.app/Data/Raw
- Application.persistentDataPath
沙盒目录(可读可写);包含持久数据的目录路径。此目录中开业存储每次运行要保留的数据。在IOS和Android上发布时,persistentDataPath指向设备上的公共目录。应用程序更新不会擦除此位置的文件。用户仍然可以直接擦除这些文件。构建 Unity 应用程序时,将基于 Bundle ID 生成一个 GUID 是persistentDataPath 的一部分,如果将来这个版本中保留相同的 BundleID, 应用程序将在每次更新是访问相同位置。
Window: C:\Users\username\AppData\Local\Temp\company name\product name
Mac: /var/folders/57/6b4_9w8113x2fsmzx_yhrhvh0000gn/T/CompanyName/Product Name
Android: /storage/emulated/0/Android/data/package name/files
IOS: /var/mobile/Containers/Data/Application/app sandbox/Library/Caches
- Application.temporaryCachePat
临时数据缓存目录(只读)
Window: C:\Users\username\AppData\LocalLow\company name\product name
Mac: /Users/xxxx/Library/Caches/CompanyName/Product Name
Android: /storage/emulated/0/Android/data/package name/cache
IOS: /var/mobile/Containers/Data/Application/app sandbox/Documents
2.常见的文件读写方式
- Json读取与写入
json在往年的工作比较常用,当时的读取方法比较多在此就不展开细说;目前Unity自带的 UnityEngine.JsonUtility 已经相当强大,可以适用于大多数读写json的情况。
JsonUtility.FromJson: 通过json表示形式创建对象。
JsonUtility.FromJsonOverwite: 通过读取对象的Json形式覆盖其数据。
JsonUtility.ToJson: 生成对象的公共字段的Json表示形式。
// 读取json
public static T ReadJson<T>(string path) where T : new()
{
var jsonTemp = new T();
if(!File.Exists(path))
{
return jsonTemp;
}
string json = File.ReadAllText(path);
if(string.IsNullOrEmpty(json))
{
return jsonTemp;
}
var temp = JsonUtility.FormJson<T>(json);
if(temp != null)
{
jsonTemp = temp;
}
return jsonTemp;
}
// 保存json
public static void SaveJson<T>(string path , string name , T data) where : new()
{
// 确保存放json文件的根目录存在
Directory.CreateDirectory(path);
string filePath = path + "/" + name;
if(!File.Existe(filePath))
{
File.Create(filePath).Dispose();
}
string json = JsonUtility.ToJson(data,true);
StreamWriter sw = new StreamWriter(filePath);
sw.Write(json);
sw.Close();
}