using System; using System.Collections.Generic; using System.IO; using IFix.Core; using UnityEngine; /// /// 脚本补丁加载器 /// public class PatchLoader { private static List patchAssets; //使用本地的版本文件加载,editor测试用 public static void InitLocalPatchAsset() { patchAssets = new List(); var path = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "AssetsVersion.txt"); if (AssetSource.patchFromEditor || !File.Exists(path)) return; var lines = File.ReadAllLines(path); for (int i = 0; i < lines.Length; i++) { var assetVersion = new AssetVersion(lines[i]); if (assetVersion.GetAssetCategory() == AssetVersion.AssetCategory.Patch) patchAssets.Add(assetVersion); } } //初始化补丁资源列表 public static void InitPatchAsset(List list) { patchAssets = list; } //加载补丁 public static void LoadPatch() { try { if (AssetSource.patchFromEditor) { if (!Directory.Exists(ResourcesPath.PATCH_EDITOR)) return; var dic = new DirectoryInfo(ResourcesPath.PATCH_EDITOR); foreach (var file in dic.GetFiles()) { if (file.Exists) { PatchManager.Load(new FileStream(file.FullName, FileMode.Open)); DebugEx.LogFormat("已加载补丁:{0}", file.FullName); } } return; } if (patchAssets == null) return; foreach (var asset in patchAssets) { var patchPath = AssetVersionUtility.GetAssetFilePath(asset.relativePath); if (File.Exists(patchPath)) { PatchManager.Load(new FileStream(patchPath, FileMode.Open)); DebugEx.LogFormat("已加载补丁:{0}", patchPath); } } } catch (Exception e) { DebugEx.LogError(e); } } }