using LitJson; using System.Collections.Generic; using System.IO; using System.Text; using UnityEditor; using UnityEngine; #if UNITY_EDITOR using YooAsset.Editor; #endif public class VersionUtils { #if UNITY_EDITOR //static string VersionPackagePath => $"{Application.dataPath}/../Bundles/assets_version_info.json"; static string VersionPackagePath { get { if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android) { return $"E:\\nginx-1.27.5\\html\\CDN\\Android\\v1.0\\assets_version_info.json"; } else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS) { return $"F:\\nginx-1.27.5\\html\\CDN\\IPhone\\v1.0\\assets_version_info.json"; } else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows || EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64 || EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSX || EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux64) { return $"F:\\nginx-1.27.5\\html\\CDN\\PC\\v1.0\\assets_version_info.json"; } else { Debug.LogError("��ǰƽ̨�Ȳ��ǰ�׿��iOS��Ҳ���� PC �༭��ģʽ"); return ""; } } } /// /// ��ȡ�����б� /// public static List GetPackageList() { // ��ȡ�����ļ�ʵ�� string guidStr = AssetDatabase.FindAssets("AssetBundleCollectorSetting t:ScriptableObject")[0]; string assetPath = AssetDatabase.GUIDToAssetPath(guidStr); var setting = AssetDatabase.LoadAssetAtPath(assetPath); if (setting != null) return setting.Packages; return null; } #endif /// /// ��� ���޸��汾�ļ� /// public static void CheckYooPackagesVersion() { #if UNITY_EDITOR var packageList = GetPackageList(); if (packageList != null) { //��ȡ������ Yoo_Package_Info nowVersion = null; if (File.Exists(VersionPackagePath)) { // ָ�������ȡ using (StreamReader reader = new StreamReader(VersionPackagePath, Encoding.UTF8)) { var str = reader.ReadToEnd(); try { nowVersion = JsonMapper.ToObject(str); } catch (System.Exception) { nowVersion = null; } } } //���������� Dictionary dic = new Dictionary(); if (nowVersion != null && nowVersion.packages != null) foreach (var item in nowVersion.packages) if (!string.IsNullOrEmpty(item.name)) dic.Add(item.name, item.version); var yooPackageInfo = new Yoo_Package_Info(); yooPackageInfo.packages = new List(); bool isChange = false; for (int i = 0; i < packageList.Count; i++) { var item = new Yoo_Package_Info_Item(); item.name = packageList[i].PackageName; if (dic.ContainsKey(item.name)) item.version = dic[item.name]; else { isChange = true; item.version = 0; } yooPackageInfo.packages.Add(item); } if (isChange) SetYooPackageVersion(yooPackageInfo); } #endif } /// /// ��ȡ���ذ汾�ļ� /// public static Yoo_Package_Info GetYooPackageVersion() { Yoo_Package_Info nowVersion = null; #if UNITY_EDITOR if (!File.Exists(VersionPackagePath)) CheckYooPackagesVersion(); // ָ�������ȡ using (StreamReader reader = new StreamReader(VersionPackagePath, Encoding.UTF8)) { var str = reader.ReadToEnd(); nowVersion = JsonMapper.ToObject(str); } #endif return nowVersion; } /// /// ���ñ��ذ汾�ļ� /// public static void SetYooPackageVersion(Yoo_Package_Info nowVersion) { #if UNITY_EDITOR // ȷ��Ŀ¼���� string directoryPath = Path.GetDirectoryName(VersionPackagePath); if (!Directory.Exists(directoryPath)) Directory.CreateDirectory(directoryPath); File.WriteAllText(VersionPackagePath, JsonMapper.ToJson(nowVersion)); #endif } /// /// ��ȡjson�汾�ļ� /// public static Yoo_Package_Info GetToVersion(string json) { var info = JsonMapper.ToObject(json); return info; } /// /// ��ȡ���汾�� /// public static int GetPackageVersion(string name) { var version = GetYooPackageVersion(); foreach (var item in version.packages) if (item.name == name) return item.version; return 0; } /// /// ���汾��+1 /// public static int PackageVesion_Add1(string name) { var version = GetYooPackageVersion(); foreach (var item in version.packages) { if (item.name == name) { item.version++; SetYooPackageVersion(version); return item.version; } } version.packages.Add(new Yoo_Package_Info_Item { name = name, version = 0}); SetYooPackageVersion(version); return 0; } /// /// ��Դ�ܰ汾��+1 /// public static int PackageTotalVersion_Add1() { var version = GetYooPackageVersion(); version.packageVersion++; SetYooPackageVersion(version); return version.packageVersion; } } /// /// �汾��Ϣ /// public class Yoo_Package_Info { /// /// ����Դ�汾 ÿ��1����Դ����Դ�汾+1 /// public int packageVersion; /// /// YooAsset Package ��Դ�汾 /// public List packages; } public class Yoo_Package_Info_Item { /// /// ���� /// public string name; /// /// ���汾�� ÿ��1�Σ��汾��+1 /// public int version; /// /// �Ƿ��������ļ�ϵͳ��ʼ�� /// true ����ʼ����ȡStreamingAssets/yoo/DefaultPackage�µ��ļ��嵥 ��ע��apk��StreamingAssets�±�����嵥�ļ�������������ᱨ���� /// false ����ʼ����ȡCDN�ϵ��嵥�ļ����ȸ����̡� /// public bool isBuildinFileSystem = false; }