1.Resources 路径 只读 不能动态的修改

存放内容 预制体(prefabs) - 不容易变化的预制体

prefabs打包的时候 会自动过滤不需要的资源 有利于减小资源大小

主线程加载

Resources类的Load方法

文件夹中的内容打包的时候会被压缩和加密


2.streamingAssetsPath 内容会原封不动的打入包中

一般建议存放一些二进制文件 (配置文件,unity资源包(AB文件)等)

特点

只读 不可写

主要存放二进制文件

通过WWW类 读取文件(移动端)


3.persistentDataPath 特殊路径 唯一可读写的路径

这个路径在IOS平台是 应用程序的沙盒

但是在安卓Android平台上 它可以是程序的沙盒 也可以是SDcard

并且在打包输出的时候可以设置为沙盒或者SDcard

projectsettings - otherSettings - writePermission

可读写 不同平台路径不同 这个路径下的文件夹 首次运行程序时自动创建

热更新解决方案 将易变资源 还有逻辑 (1.0版本)放在streamingAssetsPath(资源包AB文件 配置表 Lua文本文件)

从网络端下载版本文件 读取出数据 对比当前服务器版本和本地版本版号 例如1.1版本 从服务器下载最新版本

更新的内容 大小等相关数据 MD5验证


包含游戏数据文件夹的路径 只读 - D:/Unity/SaveData/Assets

Debug.Log(Application.dataPath);

包含一个到StreamingAssets文件夹的路径 只读 - D:/Unity/SaveData/Assets/StreamingAssets

Debug.Log(Application.streamingAssetsPath);

包含一个持久数据目录的路径(只读) unity唯一的可读写路径 C:/Users/Administrator/AppData/LocalLow/DefaultCompany/Space Shooter

Debug.Log(Application.persistentDataPath); 

Application.streamingAssetsPath 两种加载方式
引入命名空间 system.io;
void ReadData() {
string fileAddress = Path.Combine(Application.streamingAssetsPath, "Test.txt");
FileInfo
string str = "";
if (m_info.Exists) {
StreamReader strR = new StreamReader(fileAddress);
str = strR.ReadToEnd();
Debug.Log("str = " + str);
}
}

// 通过WWW加载
string _dataStr;
IEnumerator LoadWWW() {
string path = Application.streamingAssetsPath + "/Test.txt";
if ( !path.Contains("file://") ) {
path = "file://" + path;// 必须要加 确保必须要加
}
WWW www = new WWW(path);
yield return www;
// 加载完成
_dataStr = www.text;
Debug.Log("_dataStr = " + _dataStr);
}

热更新原理
string test = "Test.txt";// 带文件后缀
string test_1 = "Test_1.txt";

private void Start()
{
string[] paths = new string[] {
test,
test_1
// 添加其他需要拷贝的数据
};
LoadByPath(paths);
}

// 根据多个文件路径加载并拷贝数据
private void LoadByPath(string[] paths)
{
StartCoroutine(CopyFile(paths));
}
协程
public IEnumerator CopyFile(string[] paths)
{
for (int i = 0; i < paths.Length; ++i) {
string fileName = paths[i];
string streamPath = Path.Combine(Application.streamingAssetsPath, fileName);
if (!streamPath.Contains("file://")) {
streamPath = "file://" + streamPath;
}
WWW www = new WWW(streamPath);
yield return www; //等待www对象加载完成
// 将读取的数据写入沙盒文件夹 以备后续逻辑调用
string writePath = Path.Combine(Application.persistentDataPath, fileName);
WriteByPath(www.bytes,writePath);
}
}

 写数据的方法 (将数据写入沙盒路径)
private void WriteByPath(byte[] bytes, string writePath)
{
// 判断文件(这里是Test.txt是否存在) 防止老版本覆盖新版本
if (!File.Exists(writePath)) {
// 写数据
FileStream stream = new FileStream(writePath,FileMode.Create);
stream.Write(bytes, 0, bytes.Length);
stream.Flush();// 释放所有相关资源
stream.Close();// 关闭数据流
}
}