65 lines
2.1 KiB
C#
65 lines
2.1 KiB
C#
![]() |
using System.IO;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace YooAsset.Editor
|
|||
|
{
|
|||
|
public static class AssetBundleRecorder
|
|||
|
{
|
|||
|
private static readonly Dictionary<string, AssetBundle> _loadedAssetBundles = new Dictionary<string, AssetBundle>(1000);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取AssetBundle对象,如果没有被缓存就重新加载。
|
|||
|
/// </summary>
|
|||
|
public static AssetBundle GetAssetBundle(string filePath)
|
|||
|
{
|
|||
|
// 如果文件不存在
|
|||
|
if (File.Exists(filePath) == false)
|
|||
|
{
|
|||
|
Debug.LogWarning($"Not found asset bundle file : {filePath}");
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
// 验证文件有效性(可能文件被加密)
|
|||
|
byte[] fileData = File.ReadAllBytes(filePath);
|
|||
|
if (EditorTools.CheckBundleFileValid(fileData) == false)
|
|||
|
{
|
|||
|
Debug.LogWarning($"The asset bundle file is invalid and may be encrypted : {filePath}");
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
if (_loadedAssetBundles.TryGetValue(filePath, out AssetBundle bundle))
|
|||
|
{
|
|||
|
return bundle;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
AssetBundle newBundle = AssetBundle.LoadFromFile(filePath);
|
|||
|
if (newBundle != null)
|
|||
|
{
|
|||
|
string[] assetNames = newBundle.GetAllAssetNames();
|
|||
|
foreach (string name in assetNames)
|
|||
|
{
|
|||
|
newBundle.LoadAsset(name);
|
|||
|
}
|
|||
|
_loadedAssetBundles.Add(filePath, newBundle);
|
|||
|
}
|
|||
|
return newBundle;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 卸载所有已经加载的AssetBundle文件
|
|||
|
/// </summary>
|
|||
|
public static void UnloadAll()
|
|||
|
{
|
|||
|
foreach (var valuePair in _loadedAssetBundles)
|
|||
|
{
|
|||
|
if (valuePair.Value != null)
|
|||
|
valuePair.Value.Unload(true);
|
|||
|
}
|
|||
|
_loadedAssetBundles.Clear();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|