三国卡牌客户端基础资源仓库
yyl
2026-05-11 ad335df78a01b72e8a2836d92c792872ebe1e317
Assets/Editor/Tool/ClientPackage.cs
@@ -500,144 +500,147 @@
    /// </summary>
    static void CopyHalfAssetResources(string _assetBundlePath, string _streamingPath)
    {
        PriorBundleConfig.LazyInit();
        var fromFiles = new List<FileInfo>();
        FileExtersion.GetAllDirectoryFileInfos(_assetBundlePath, fromFiles);
        var excludeFileFullNames = new List<string>();
        // 剔除优先级低的hero资源
        var tempFiles = new List<FileInfo>();
        FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/hero"), tempFiles);
        foreach (var file in tempFiles)
        PriorBundleConfig.InitForEditor(() =>
        {
            var fileName = Path.GetFileNameWithoutExtension(file.FullName);
            var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Mob, AssetVersionUtility.DecodeFileName(fileName));
            if (prior > AssetPrior)
            {
                excludeFileFullNames.Add(file.FullName);
            }
        }
            var fromFiles = new List<FileInfo>();
            FileExtersion.GetAllDirectoryFileInfos(_assetBundlePath, fromFiles);
        // 剔除优先级低的maps资源
        tempFiles.Clear();
        FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/maps"), tempFiles);
        foreach (var file in tempFiles)
        {
            var fileName = Path.GetFileNameWithoutExtension(file.FullName);
            var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Scene, AssetVersionUtility.DecodeFileName(fileName));
            if (prior > AssetPrior)
            {
                excludeFileFullNames.Add(file.FullName);
            }
        }
            var excludeFileFullNames = new List<string>();
        // 剔除优先级低的audio资源
        tempFiles.Clear();
        FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/audio"), tempFiles);
        foreach (var file in tempFiles)
        {
            var fileName = Path.GetFileNameWithoutExtension(file.FullName);
            var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Audio, AssetVersionUtility.DecodeFileName(fileName));
            if (prior > AssetPrior)
            {
                excludeFileFullNames.Add(file.FullName);
            }
        }
        // 剔除优先级低的uieffect资源
        tempFiles.Clear();
        FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/uieffect"), tempFiles);
        foreach (var file in tempFiles)
        {
            var fileName = Path.GetFileNameWithoutExtension(file.FullName);
            var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Effect, AssetVersionUtility.DecodeFileName(fileName));
            if (prior > AssetPrior)
            {
                excludeFileFullNames.Add(file.FullName);
            }
        }
        // 剔除视频资源
        tempFiles.Clear();
        var videoPath = StringUtility.Concat(_assetBundlePath, "/video");
        if (Directory.Exists(videoPath))
        {
            FileExtersion.GetAllDirectoryFileInfos(videoPath, tempFiles);
            // 剔除优先级低的hero资源
            var tempFiles = new List<FileInfo>();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/hero"), tempFiles);
            foreach (var file in tempFiles)
            {
                var fileName = Path.GetFileNameWithoutExtension(file.FullName);
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Video, AssetVersionUtility.DecodeFileName(fileName));
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Mob, AssetVersionUtility.DecodeFileName(fileName));
                if (prior > AssetPrior)
                {
                    excludeFileFullNames.Add(file.FullName);
                }
            }
        }
        // 剔除表资源
        if (!includeConfig)
        {
            // 剔除优先级低的maps资源
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/config"), tempFiles);
            foreach (var file in tempFiles)
            {
                excludeFileFullNames.Add(file.FullName);
            }
        }
        // 剔除UI资源
        if (!includeUI)
        {
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/ui"), tempFiles);
            foreach (var file in tempFiles)
            {
                excludeFileFullNames.Add(file.FullName);
            }
        }
        else
        {
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/ui"), tempFiles);
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/maps"), tempFiles);
            foreach (var file in tempFiles)
            {
                var fileName = Path.GetFileNameWithoutExtension(file.FullName);
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.UI, fileName);
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Scene, AssetVersionUtility.DecodeFileName(fileName));
                if (prior > AssetPrior)
                {
                    excludeFileFullNames.Add(file.FullName);
                }
            }
        }
        // 从文件列表中移除需要排除的文件
        for (int i = fromFiles.Count - 1; i >= 0; i--)
        {
            if (excludeFileFullNames.Contains(fromFiles[i].FullName))
            // 剔除优先级低的audio资源
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/audio"), tempFiles);
            foreach (var file in tempFiles)
            {
                fromFiles.RemoveAt(i);
                var fileName = Path.GetFileNameWithoutExtension(file.FullName);
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Audio, AssetVersionUtility.DecodeFileName(fileName));
                if (prior > AssetPrior)
                {
                    excludeFileFullNames.Add(file.FullName);
                }
            }
        }
        foreach (var item in fromFiles)
        {
            var extension = Path.GetExtension(item.FullName);
            if (extension == ".meta")
                continue;
            // 剔除优先级低的uieffect资源
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/uieffect"), tempFiles);
            foreach (var file in tempFiles)
            {
                var fileName = Path.GetFileNameWithoutExtension(file.FullName);
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Effect, AssetVersionUtility.DecodeFileName(fileName));
                if (prior > AssetPrior)
                {
                    excludeFileFullNames.Add(file.FullName);
                }
            }
            var relativePath = FileExtersion.GetFileRelativePath(_assetBundlePath, item.FullName);
            if (relativePath.StartsWith("patch"))
                continue;
            // 剔除视频资源
            tempFiles.Clear();
            var videoPath = StringUtility.Concat(_assetBundlePath, "/video");
            if (Directory.Exists(videoPath))
            {
                FileExtersion.GetAllDirectoryFileInfos(videoPath, tempFiles);
                foreach (var file in tempFiles)
                {
                    var fileName = Path.GetFileNameWithoutExtension(file.FullName);
                    var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Video, AssetVersionUtility.DecodeFileName(fileName));
                    if (prior > AssetPrior)
                    {
                        excludeFileFullNames.Add(file.FullName);
                    }
                }
            }
            var to = StringUtility.Concat(_streamingPath, relativePath);
            var directory = Path.GetDirectoryName(to);
            if (!Directory.Exists(directory))
                Directory.CreateDirectory(directory);
            // 剔除表资源
            if (!includeConfig)
            {
                tempFiles.Clear();
                FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/config"), tempFiles);
                foreach (var file in tempFiles)
                {
                    excludeFileFullNames.Add(file.FullName);
                }
            }
            File.Copy(item.FullName, to, true);
        }
            // 剔除UI资源
            if (!includeUI)
            {
                tempFiles.Clear();
                FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/ui"), tempFiles);
                foreach (var file in tempFiles)
                {
                    excludeFileFullNames.Add(file.FullName);
                }
            }
            else
            {
                tempFiles.Clear();
                FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(_assetBundlePath, "/ui"), tempFiles);
                foreach (var file in tempFiles)
                {
                    var fileName = Path.GetFileNameWithoutExtension(file.FullName);
                    var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.UI, fileName);
                    if (prior > AssetPrior)
                    {
                        excludeFileFullNames.Add(file.FullName);
                    }
                }
            }
            // 从文件列表中移除需要排除的文件
            for (int i = fromFiles.Count - 1; i >= 0; i--)
            {
                if (excludeFileFullNames.Contains(fromFiles[i].FullName))
                {
                    fromFiles.RemoveAt(i);
                }
            }
            foreach (var item in fromFiles)
            {
                var extension = Path.GetExtension(item.FullName);
                if (extension == ".meta")
                    continue;
                var relativePath = FileExtersion.GetFileRelativePath(_assetBundlePath, item.FullName);
                if (relativePath.StartsWith("patch"))
                    continue;
                var to = StringUtility.Concat(_streamingPath, relativePath);
                var directory = Path.GetDirectoryName(to);
                if (!Directory.Exists(directory))
                    Directory.CreateDirectory(directory);
                File.Copy(item.FullName, to, true);
            }
        });
    }
    /// <summary>