public void CheckNeedUpdate() { //从资源服务器下载,资源列表 _resourceLoader.LoadRemoteAsset(Path.Combine(Application.platform.ToString(), assetsListName), "", (data) => { string jsonStr = System.Text.Encoding.UTF8.GetString(data); HotUpdateAssetsList serverAssetsList = JsonUtility.FromJson <HotUpdateAssetsList>(jsonStr); //读取本地资源维护表 string localAssetOutAppFilePath = Path.Combine(Application.persistentDataPath, localAssetOutAppName); if (File.Exists(localAssetOutAppFilePath)) { localAssetOutAppList = JsonUtility.FromJson <HotUpdateAssetsList>(File.ReadAllText(localAssetOutAppFilePath)); } else { localAssetOutAppList = new HotUpdateAssetsList();//记录本地已经热更新过得资源 } //读取本地资源md5文件 string localListPath = ""; if (!File.Exists(Path.Combine(Application.persistentDataPath, assetsListName)))//应该是没更新过,本地资源列表还在app包内 { // FileStream file = new FileStream(filePath, System.IO.FileMode.Open); localListPath = UrlCombine.GetLocalUrl(assetsListName, true, Application.platform); } else { localListPath = UrlCombine.GetLocalUrl(assetsListName, false, Application.platform); } //加载本地表,加载完成后比较本地和服务器返回表 string localAssetListJsonStr = File.ReadAllText(localListPath); HotUpdateAssetsList localAssetList = JsonUtility.FromJson <HotUpdateAssetsList>(localAssetListJsonStr); List <HotUpdateAssetItem> needUpdateAssetList = CheckDifferent(localAssetList, serverAssetsList); //加在更新资源 int loadedAssetCouint = 0; for (int i = 0; i < needUpdateAssetList.Count; i++) { var assetInfo = needUpdateAssetList[i]; _resourceLoader.LoadRemoteAsset(assetInfo.assetPath, assetInfo.md5, (assetBytes) => { loadedAssetCouint++; UpdateOutAppAssetPath(assetInfo); string assetPath = Path.Combine(Application.persistentDataPath, assetInfo.assetPath); WriteFile(assetPath, assetBytes); if (loadedAssetCouint == needUpdateAssetList.Count) { //全部资源更新完成,更新本地表格 string assetListJsonString = JsonUtility.ToJson(serverAssetsList); WriteFile(Path.Combine(Application.persistentDataPath, assetsListName), assetListJsonString); string assetOutAppJsonString = JsonUtility.ToJson(localAssetOutAppList); WriteFile(localAssetOutAppFilePath, assetOutAppJsonString); } }); } }); }