美文网首页
unity几个路径以及热更新原理

unity几个路径以及热更新原理

作者: fooliker | 来源:发表于2017-05-02 16:46 被阅读0次

    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 m_info = new FileInfo(fileAddress);

    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();// 关闭数据流

    }

    }

    相关文章

      网友评论

          本文标题:unity几个路径以及热更新原理

          本文链接:https://www.haomeiwen.com/subject/muzctxtx.html