123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- using System.Collections.Generic;
- using YooAsset.Editor;
- using YooAsset;
- using GFGGame;
- using UnityEditor;
- using System.IO;
- using UnityEngine;
- namespace GFGEditor
- {
- public class PresetAssetHelper
- {
- public static void CopyPresetAssets()
- {
- // 等待资源构建流程完成
- //......
- //选择清单文件
- string selectedFile = EditorUtility.OpenFilePanel("Select a file", "", "");
- if(string.IsNullOrEmpty(selectedFile))
- {
- return;
- }
- int t = selectedFile.LastIndexOf("/");
- string dirPath = selectedFile.Substring(0, t);
- //生成预制资源列表
- AssetBundlePreloadFiles assetBundlePreloadFiles = AssetBundlePreloadFiles.GetData();
- List<string> preloadFiles = new List<string>();
- preloadFiles.AddRange(assetBundlePreloadFiles.PreloadFiles);
- SqliteController.Instance.Init(false, null);
- StoryDialogCfg[] dataArray = StoryDialogCfgArray.Instance.dataArray;
- foreach (var cfg in dataArray)
- {
- if (!string.IsNullOrEmpty(cfg.bgRes))
- {
- var resPath = ResPathUtil.GetSceneBgPath(cfg.bgRes);
- preloadFiles.Add(resPath);
- }
- }
- // 加载构建成功的资源清单对象
- byte[] manifestBytes = FileUtility.ReadAllBytes(selectedFile);
- PackageManifest manifest = ManifestTools.DeserializeFromBinary(manifestBytes);
- // 查找所有需要打进首包资源的依赖AB
- HashSet<PackageBundle> bundles = new HashSet<PackageBundle>();
- foreach (var assetPath in preloadFiles)
- {
- TryAdd(assetPath, manifest, bundles);
- }
- List<ItemCfg> dressUpItemlist = ItemCfgArray.Instance.GetCfgsByitemType(ConstItemType.DRESS_UP);
- foreach(var dressUpCfg in dressUpItemlist)
- {
- if(dressUpCfg.loadType > 0)
- {
- string assetPath = ResPathUtil.GetDressUpLayerSpriteResPath(dressUpCfg, 1);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerSpriteResPath(dressUpCfg, 2);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerSpriteResPath(dressUpCfg, 3);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerAnimationResPath(dressUpCfg, 1);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerAnimationResPath(dressUpCfg, 2);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerAnimationResPath(dressUpCfg, 3);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerEffectResPath(dressUpCfg, 1, false);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerEffectResPath(dressUpCfg, 2, false);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerEffectResPath(dressUpCfg, 3, false);
- TryAdd(assetPath, manifest, bundles);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerEffectResPath(dressUpCfg, 1, true);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerEffectResPath(dressUpCfg, 2, true);
- TryAdd(assetPath, manifest, bundles);
- assetPath = ResPathUtil.GetDressUpLayerEffectResPath(dressUpCfg, 3, true);
- TryAdd(assetPath, manifest, bundles);
- }
- }
- string root = $"{AssetBundleBuilderHelper.GetDefaultStreamingAssetsRoot()}/{VersionController.DefaultPackage}";
- //清空
- EditorTools.ClearFolder(root);
- // 拷贝指定动态加载文件
- foreach (var packageBundle in bundles)
- {
- string destPath = $"{root}/{packageBundle.FileName}";
- //...... //拷贝文件
- string sourcePath = $"{dirPath}/{packageBundle.FileName}";
- EditorTools.CopyFile(sourcePath, destPath, true);
- //Debug.Log($"sourcePath { sourcePath}");
- Debug.Log($"destPath { destPath}");
- }
- //拷贝指定标签的文件
- string[] tags = { "preload"};
- foreach (var packageBundle in manifest.BundleList)
- {
- if (packageBundle.HasTag(tags) == false)
- continue;
- string sourcePath = $"{dirPath}/{packageBundle.FileName}";
- string destPath = $"{root}/{packageBundle.FileName}";
- EditorTools.CopyFile(sourcePath, destPath, true);
- Debug.Log($"destPath { destPath}");
- }
- }
- private static void TryAdd(string assetPath, PackageManifest manifest, HashSet<PackageBundle> bundles)
- {
- if (manifest.TryGetPackageAsset(assetPath, out PackageAsset packageAsset))
- {
- var packageBundle = manifest.BundleList[packageAsset.BundleID];
- if (bundles.Contains(packageBundle) == false)
- {
- bundles.Add(packageBundle);
- Debug.Log($"preload assetPath {assetPath}");
- }
- }
- }
- }
- }
|