| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | 
							- using FairyGUI;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using YooAsset;
 
- using System.Threading.Tasks;
 
- namespace GFGGame
 
- {
 
-     public class GFGUIPackage
 
-     {
 
-         private static Dictionary<string, UIPackage> _packages = new Dictionary<string, UIPackage>();
 
-         private static Dictionary<string, List<AssetOperationHandle>> assetHandleCacheDic = new Dictionary<string, List<AssetOperationHandle>>();
 
-         private static Dictionary<string, int> _assetCount = new Dictionary<string, int>();
 
-         public static void AddPackage(string descFilePath)
 
-         {
 
-             _assetCount.TryGetValue(descFilePath, out var count);
 
-             if (count > 0)
 
-             {
 
-                 _assetCount[descFilePath] = count + 1;
 
-                 return;
 
-             }
 
-             _assetCount.Add(descFilePath, count + 1);
 
-             var handle = YooAssets.LoadAssetSync<TextAsset>($"{descFilePath}_fui.bytes");
 
-             TextAsset textAsset = handle.AssetObject as TextAsset;
 
-             CacheAssetHandle(descFilePath, handle);
 
-             //var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, out DestroyMethod destroyMethod) =>
 
-             //{
 
-             //    string location = name + extension;
 
-             //    destroyMethod = DestroyMethod.None; //注意:这里一定要设置为None
 
-             //    if(!YooAssets.CheckDressUpResExist(location))
 
-             //    {
 
-             //        return null;
 
-             //    }
 
-             //    var handle = YooAssets.LoadAssetSync(location, type);
 
-             //    CacheAssetHandle(descFilePath, handle);
 
-             //    return handle.AssetObject;
 
-             //});
 
-             var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, PackageItem item) =>
 
-             {
 
-                 string location = name + extension;
 
-                 if (!YooAssets.CheckResExist(location))
 
-                 {
 
-                     return;
 
-                 }
 
-                 AssetOperationHandle handle = YooAssets.LoadAssetAsync(location, type);
 
-                 CacheAssetHandle(descFilePath, handle);
 
-                 handle.Completed += (handle) =>
 
-                 {
 
-                     if (handle.AssetObject == null) return;
 
-                     Texture tex = handle.AssetObject as Texture;
 
-                     if (tex != null)
 
-                     {
 
-                         string location = name + "!a" + extension;
 
-                         if (YooAssets.CheckResExist(location))
 
-                         {
 
-                             AssetOperationHandle handleAlpha = YooAssets.LoadAssetAsync(location, type);
 
-                             CacheAssetHandle(descFilePath, handleAlpha);
 
-                             handleAlpha.Completed += (handle1) =>
 
-                             {
 
-                                 if (handle1.AssetObject == null) return;
 
-                                 Texture alphaTex = handle1.AssetObject as Texture;
 
-                                 item.owner.SetItemAsset(item, tex, alphaTex, DestroyMethod.None);//注意:这里一定要设置为None
 
-                             };
 
-                             return;
 
-                         }
 
-                     }
 
-                     item.owner.SetItemAsset(item, handle.AssetObject, null, DestroyMethod.None);//注意:这里一定要设置为None
 
-                 };
 
-             });
 
-             _packages.Add(descFilePath, uiPackage);
 
-         }
 
-         public static async Task AddPackageAsync(string descFilePath)
 
-         {
 
-             _assetCount.TryGetValue(descFilePath, out var count);
 
-             if (count > 0)
 
-             {
 
-                 _assetCount[descFilePath] = count + 1;
 
-                 return;
 
-             }
 
-             _assetCount.Add(descFilePath, count + 1);
 
-             var handle = YooAssets.LoadAssetAsync<TextAsset>($"{descFilePath}_fui.bytes");
 
-             await handle.Task;
 
-             TextAsset textAsset = handle.AssetObject as TextAsset;
 
-             CacheAssetHandle(descFilePath, handle);
 
-             var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, PackageItem item) =>
 
-             {
 
-                 string location = name + extension;
 
-                 if (!YooAssets.CheckResExist(location))
 
-                 {
 
-                     return;
 
-                 }
 
-                 AssetOperationHandle handle = YooAssets.LoadAssetAsync(location, type);
 
-                 CacheAssetHandle(descFilePath, handle);
 
-                 handle.Completed += (handle) =>
 
-                 {
 
-                     if (handle.AssetObject == null) return;
 
-                     Texture tex = handle.AssetObject as Texture;
 
-                     if (tex != null)
 
-                     {
 
-                         string location = name + "!a" + extension;
 
-                         if (YooAssets.CheckResExist(location))
 
-                         {
 
-                             AssetOperationHandle handleAlpha = YooAssets.LoadAssetAsync(location, type);
 
-                             CacheAssetHandle(descFilePath, handleAlpha);
 
-                             handleAlpha.Completed += (handle1) =>
 
-                             {
 
-                                 if (handle1.AssetObject == null) return;
 
-                                 Texture alphaTex = handle1.AssetObject as Texture;
 
-                                 item.owner.SetItemAsset(item, tex, alphaTex, DestroyMethod.None);//注意:这里一定要设置为None
 
-                             };
 
-                             return;
 
-                         }
 
-                     }
 
-                     item.owner.SetItemAsset(item, handle.AssetObject, null, DestroyMethod.None);//注意:这里一定要设置为None
 
-                 };
 
-             });
 
-             _packages.Add(descFilePath, uiPackage);
 
-             CheckRemovePackage(descFilePath);
 
-         }
 
-         public static void ReleasePackage(string descFilePath)
 
-         {
 
-             _assetCount.TryGetValue(descFilePath, out var count);
 
-             if (count > 0)
 
-             {
 
-                 count--;
 
-                 _assetCount[descFilePath] = count;
 
-                 CheckRemovePackage(descFilePath);
 
-             }
 
-         }
 
-         private static void CheckRemovePackage(string descFilePath)
 
-         {
 
-             _assetCount.TryGetValue(descFilePath, out var count);
 
-             if (count > 0) return;
 
-             _packages.TryGetValue(descFilePath, out var package);
 
-             if (package == null) return;
 
-             _assetCount.Remove(descFilePath);
 
-             _packages.Remove(descFilePath);
 
-             UIPackage.RemovePackage(package.name);
 
-             if (assetHandleCacheDic.TryGetValue(descFilePath, out var list))
 
-             {
 
-                 foreach (var asset in list)
 
-                 {
 
-                     asset.Release();
 
-                 }
 
-                 list.Clear();
 
-             }
 
-         }
 
-         private static void CacheAssetHandle(string key, AssetOperationHandle handle)
 
-         {
 
-             List<AssetOperationHandle> list = null;
 
-             if (!assetHandleCacheDic.TryGetValue(key, out list))
 
-             {
 
-                 list = new List<AssetOperationHandle>();
 
-                 assetHandleCacheDic.Add(key, list);
 
-             }
 
-             list.Add(handle);
 
-         }
 
-     }
 
- }
 
 
  |