Пример #1
0
    /// <summary>
    ///  检测资源进行比对更新 (模拟测试 本机 用)
    /// </summary>
    private IEnumerator downloadRes4Test()
    {
        //这里 是 随便写的
        string url     = "C:/LuaServer";
        string fileUrl = url + "/checkFiles.txt";

        //判断本地有没有这个目录
        if (!Directory.Exists(downloadPath))
        {
            Directory.CreateDirectory(downloadPath);
        }
        //读取里面的内容
        string[] lines = File.ReadAllLines(fileUrl);
        for (int i = 0; i < lines.Length; i++)
        {
            if (string.IsNullOrEmpty(lines[i]))
            {
                continue;
            }

            string[] kv       = lines[i].Split('|');
            string   fileName = kv[0];
            //再拿到本地的这个文件
            string localFile = (downloadPath + "/" + fileName).Trim();
            //如果本地文件没有 需要下载了
            if (!File.Exists(localFile))
            {
                //Debug.Log("本地没有 " + fileName + " 去服务器下载了");
                string dir = Path.GetDirectoryName(localFile);
                Directory.CreateDirectory(dir);

                string tmpUrl = url + "/" + fileName;
                File.Copy(tmpUrl, localFile, true);
            }
            else             //如果文件有  开始比对md5 作用:检测是否更新了
            {
                string md5      = kv[1];
                string localMd5 = GameTools.GetFileMd5Value(localFile);
                if (md5 == localMd5)
                {
                    //如果 md5 一样的话,那么就没更新
                    //Debug.Log("本地有 " + fileName + " 而且没更新");
                }
                else
                {
                    //Debug.Log("本地有" + fileName + " 但是更新了 去服务器下载了");
                    //如果不一样的话 说明更新了,删除本地原来的旧文件
                    File.Delete(localFile);
                    //拷贝本地新文件
                    string tmpUrl = url + "/" + fileName;
                    File.Copy(tmpUrl, localFile, true);
                }
            }
        }
        yield return(new WaitForEndOfFrame());

        Debug.Log("游戏更新完成!");
    }
Пример #2
0
    static void CreatCheckFiles()
    {
        string outPath  = PathUtil.GetAssetBundleOutPath();
        string filePath = outPath + "/checkFiles.txt";

        //如果存在这个文件先删除
        if (File.Exists(filePath))
        {
            File.Delete(filePath);
        }
        List <string> fileList = new List <string>();

        ListFiles(new DirectoryInfo(outPath), ref fileList);

        FileStream   fs  = new FileStream(filePath, FileMode.CreateNew);
        StreamWriter sw  = new StreamWriter(fs);
        int          len = fileList.Count;

        for (int i = 0; i < len; ++i)
        {
            EditorUtility.DisplayProgressBar("生成校验文件", "正在生成校验文件中...", 1.0f * i / len);
            string file = fileList[i];
            string ext  = Path.GetExtension(file);
            //忽略meta文件
            if (ext.EndsWith(".meta"))
            {
                continue;
            }
            string md5 = GameTools.GetFileMd5Value(file);
            //转换成相对路径
            string value = file.Replace(outPath + "/", string.Empty);
            sw.WriteLine(value + "|" + md5);
        }
        sw.Close();
        fs.Close();
        AssetDatabase.Refresh();
        EditorUtility.ClearProgressBar();
    }
Пример #3
0
    /// <summary>
    /// 检测资源更新
    /// </summary>
    /// <returns></returns>
    private IEnumerator DownloadRes()
    {
        //随便写的(可通过读取配置文件得到)
        string url     = "http://127.0.0.1:8888/path/";
        string fileUrl = url + "/checkFiles.txt";
        WWW    www     = new WWW(fileUrl);

        yield return(www);

        if (null != www.error)
        {
            Debug.LogError(www.error);
        }

        //判断本地是否有这个文件
        //在手机上StreamAssets只有只读权限,一运行 就把此目录文件拷贝到persistentDataPath
        if (!Directory.Exists(downloadPath))
        {
            Directory.CreateDirectory(downloadPath);
        }
        //把下载的校验文件写入本地
        File.WriteAllBytes(downloadPath + "/checkFiles.txt", www.bytes);

        //读取内容进行比对
        string filesText = www.text;

        string[] lines = filesText.Split('\n');

        for (int i = 0; i < lines.Length; ++i)
        {
            if (string.IsNullOrEmpty(lines[i]))
            {
                continue;
            }
            string[] kv       = lines[i].Split('|');
            string   fileName = kv[0];
            //再拿到本地的这个文件
            string localFile = (downloadPath + "/" + fileName).Trim();
            //是否需要从网络上下载文件
            bool isNeedDownload = false;
            //如果本地文件没有 需要下载了
            if (!File.Exists(localFile))
            {
                string dir = Path.GetDirectoryName(localFile);
                Directory.CreateDirectory(dir);
                isNeedDownload = true;
            }
            else            //如果存在本地文件开始MD5比对
            {
                string md5      = kv[1];
                string localMd5 = GameTools.GetFileMd5Value(localFile);
                if (md5 != localMd5)
                {
                    //如果不一样的话 说明更新了
                    //删除本地原来的旧文件
                    File.Delete(localFile);
                    //下载新文件
                    isNeedDownload = true;
                }
            }
            if (isNeedDownload)
            {
                //下载网络文件
                string tmpUrl = url + fileName;
                www = new WWW(tmpUrl);
                yield return(www);

                //进行一些网络的检测
                if (www.error != null)
                {
                    Debug.LogError(www.error);
                }
                File.WriteAllBytes(localFile, www.bytes);
            }
        }
        yield return(new WaitForEndOfFrame());

        Debug.Log("更新完成,可以开始游戏了");
    }