246 lines
7.4 KiB
C#
Raw Normal View History

2025-06-07 17:43:34 +08:00
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 $"F:\\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("<22><>ǰƽ̨<C6BD>Ȳ<EFBFBD><C8B2>ǰ<EFBFBD>׿<EFBFBD><D7BF>iOS<4F><53>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD> PC <20><EFBFBD><E0BCAD>ģʽ");
return "";
}
}
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
/// </summary>
public static List<AssetBundleCollectorPackage> GetPackageList()
{
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʵ<EFBFBD><CAB5>
string guidStr = AssetDatabase.FindAssets("AssetBundleCollectorSetting t:ScriptableObject")[0];
string assetPath = AssetDatabase.GUIDToAssetPath(guidStr);
var setting = AssetDatabase.LoadAssetAtPath<AssetBundleCollectorSetting>(assetPath);
if (setting != null)
return setting.Packages;
return null;
}
#endif
/// <summary>
/// <20><><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>ļ<EFBFBD>
/// </summary>
public static void CheckYooPackagesVersion()
{
#if UNITY_EDITOR
var packageList = GetPackageList();
if (packageList != null)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Yoo_Package_Info nowVersion = null;
if (File.Exists(VersionPackagePath))
{
// ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
using (StreamReader reader = new StreamReader(VersionPackagePath, Encoding.UTF8))
{
var str = reader.ReadToEnd();
try
{
nowVersion = JsonMapper.ToObject<Yoo_Package_Info>(str);
}
catch (System.Exception)
{
nowVersion = null;
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dictionary<string, int> dic = new Dictionary<string, int>();
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<Yoo_Package_Info_Item>();
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
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾<D8B0>ļ<EFBFBD>
/// </summary>
public static Yoo_Package_Info GetYooPackageVersion()
{
Yoo_Package_Info nowVersion = null;
#if UNITY_EDITOR
if (!File.Exists(VersionPackagePath))
CheckYooPackagesVersion();
// ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
using (StreamReader reader = new StreamReader(VersionPackagePath, Encoding.UTF8))
{
var str = reader.ReadToEnd();
nowVersion = JsonMapper.ToObject<Yoo_Package_Info>(str);
}
#endif
return nowVersion;
}
/// <summary>
/// <20><><EFBFBD>ñ<EFBFBD><C3B1>ذ汾<D8B0>ļ<EFBFBD>
/// </summary>
public static void SetYooPackageVersion(Yoo_Package_Info nowVersion)
{
#if UNITY_EDITOR
// ȷ<><C8B7>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
string directoryPath = Path.GetDirectoryName(VersionPackagePath);
if (!Directory.Exists(directoryPath))
Directory.CreateDirectory(directoryPath);
File.WriteAllText(VersionPackagePath, JsonMapper.ToJson(nowVersion));
#endif
}
/// <summary>
/// <20><>ȡjson<6F><EFBFBD>ļ<EFBFBD>
/// </summary>
public static Yoo_Package_Info GetToVersion(string json)
{
var info = JsonMapper.ToObject<Yoo_Package_Info>(json);
return info;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><E6B1BE>
/// </summary>
public static int GetPackageVersion(string name)
{
var version = GetYooPackageVersion();
foreach (var item in version.packages)
if (item.name == name) return item.version;
return 0;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><E6B1BE>+1
/// </summary>
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;
}
/// <summary>
/// <20><>Դ<EFBFBD>ܰ汾<DCB0><E6B1BE>+1
/// </summary>
public static int PackageTotalVersion_Add1()
{
var version = GetYooPackageVersion();
version.packageVersion++;
SetYooPackageVersion(version);
return version.packageVersion;
}
}
/// <summary>
/// <20><EFBFBD><E6B1BE>Ϣ
/// </summary>
public class Yoo_Package_Info
{
/// <summary>
/// <20><><EFBFBD><EFBFBD>Դ<EFBFBD>汾 ÿ<><C3BF>1<EFBFBD><31><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>Դ<EFBFBD>汾+1
/// </summary>
public int packageVersion;
/// <summary>
/// YooAsset Package <20><>Դ<EFBFBD>
/// </summary>
public List<Yoo_Package_Info_Item> packages;
}
public class Yoo_Package_Info_Item
{
/// <summary>
/// <20><><EFBFBD><EFBFBD>
/// </summary>
public string name;
/// <summary>
/// <20><><EFBFBD><EFBFBD><E6B1BE> ÿ<><C3BF>1<EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><E6B1BE>+1
/// </summary>
public int version;
/// <summary>
/// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC>
/// true <20><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ȡStreamingAssets/yoo/DefaultPackage<67>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><20><>ע<EFBFBD><D7A2>apk<70><6B>StreamingAssets<74>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B1A8><EFBFBD><EFBFBD>
/// false <20><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ȡCDN<44>ϵ<EFBFBD><CFB5><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD>̡<EFBFBD>
/// </summary>
public bool isBuildinFileSystem = false;
}