123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using System.IO;
- using System.Collections.Generic;
- using UnityEngine;
- using YooAsset;
- /// <summary>
- /// 资源文件查询服务类
- /// </summary>
- public class GameQueryServices : IQueryServices
- {
- public bool QueryStreamingAssets(string packageName, string fileName)
- {
- // 注意:fileName包含文件格式
- return StreamingAssetsHelper.FileExists(packageName, fileName);
- }
- }
- #if UNITY_EDITOR
- /// <summary>
- /// StreamingAssets目录下资源查询帮助类
- /// </summary>
- public sealed class StreamingAssetsHelper
- {
- public static void Init() { }
- public static bool FileExists(string packageName, string fileName)
- {
- string filePath = Path.Combine(Application.streamingAssetsPath, StreamingAssetsDefine.RootFolderName, packageName, fileName);
- return File.Exists(filePath);
- }
- }
- #else
- /// <summary>
- /// StreamingAssets目录下资源查询帮助类
- /// </summary>
- public sealed class StreamingAssetsHelper
- {
- private static bool _isInit = false;
- private static readonly HashSet<string> _cacheData = new HashSet<string>();
- /// <summary>
- /// 初始化
- /// </summary>
- public static void Init()
- {
- if (_isInit == false)
- {
- _isInit = true;
- var manifest = Resources.Load<BuildinFileManifest>("BuildinFileManifest");
- if (manifest != null)
- {
- foreach (string fileName in manifest.BuildinFiles)
- {
- _cacheData.Add(fileName);
- }
- }
- }
- }
- /// <summary>
- /// 内置文件查询方法
- /// </summary>
- public static bool FileExists(string packageName, string fileName)
- {
- if (_isInit == false)
- Init();
- return _cacheData.Contains(fileName);
- }
- }
- #endif
- #if UNITY_EDITOR
- internal class PreprocessBuild : UnityEditor.Build.IPreprocessBuildWithReport
- {
- public int callbackOrder { get { return 0; } }
- /// <summary>
- /// 在构建应用程序前处理
- /// </summary>
- public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
- {
- string saveFilePath = "Assets/Resources/BuildinFileManifest.asset";
- if (File.Exists(saveFilePath))
- File.Delete(saveFilePath);
- string folderPath = $"{Application.dataPath}/StreamingAssets/{StreamingAssetsDefine.RootFolderName}";
- DirectoryInfo root = new DirectoryInfo(folderPath);
- if (root.Exists == false)
- {
- Debug.Log($"没有发现YooAsset内置目录 : {folderPath}");
- return;
- }
- var manifest = ScriptableObject.CreateInstance<BuildinFileManifest>();
- FileInfo[] files = root.GetFiles("*", SearchOption.AllDirectories);
- foreach (var fileInfo in files)
- {
- if (fileInfo.Extension == ".meta")
- continue;
- if (fileInfo.Name.StartsWith("PackageManifest_"))
- continue;
- manifest.BuildinFiles.Add(fileInfo.Name);
- }
- if (Directory.Exists("Assets/Resources") == false)
- Directory.CreateDirectory("Assets/Resources");
- UnityEditor.AssetDatabase.CreateAsset(manifest, saveFilePath);
- UnityEditor.AssetDatabase.SaveAssets();
- UnityEditor.AssetDatabase.Refresh();
- Debug.Log($"一共{manifest.BuildinFiles.Count}个内置文件,内置资源清单保存成功 : {saveFilePath}");
- }
- }
- #endif
|