2025-01-23 19:06:48 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Threading;
|
|
|
|
|
|
using AlicizaX.Runtime;
|
|
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using UnityEngine.SceneManagement;
|
|
|
|
|
|
using YooAsset;
|
|
|
|
|
|
|
|
|
|
|
|
namespace AlicizaX.Resource.Runtime
|
|
|
|
|
|
{
|
|
|
|
|
|
[DisallowMultipleComponent]
|
|
|
|
|
|
[AddComponentMenu("Game Framework/ResourceComponent")]
|
|
|
|
|
|
[UnityEngine.Scripting.Preserve]
|
|
|
|
|
|
public class ResourceComponent : GameFrameworkComponent
|
|
|
|
|
|
{
|
|
|
|
|
|
#region Propreties
|
|
|
|
|
|
|
|
|
|
|
|
[Tooltip("当目标平台为Web平台时,将会强制设置为" + nameof(EPlayMode.WebPlayMode))] [SerializeField]
|
|
|
|
|
|
private EPlayMode m_GamePlayMode;
|
|
|
|
|
|
|
2025-01-24 16:21:00 +08:00
|
|
|
|
[SerializeField] private long m_Milliseconds = 30;
|
2025-01-23 19:06:48 +08:00
|
|
|
|
|
|
|
|
|
|
[SerializeField] private string m_defaultPackageName = "DefaultPackage";
|
|
|
|
|
|
|
2025-01-24 16:21:00 +08:00
|
|
|
|
[SerializeField] private float m_AssetAutoReleaseInterval = 60;
|
2025-01-23 19:06:48 +08:00
|
|
|
|
|
2025-01-24 16:21:00 +08:00
|
|
|
|
[SerializeField] private int m_AssetCapacity = 64;
|
2025-01-23 19:06:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-01-24 16:21:00 +08:00
|
|
|
|
[SerializeField] private float m_AssetExpireTime = 60;
|
2025-01-23 19:06:48 +08:00
|
|
|
|
|
2025-01-24 16:21:00 +08:00
|
|
|
|
[SerializeField] private int m_AssetPriority = 0;
|
2025-01-23 19:06:48 +08:00
|
|
|
|
|
2025-02-06 17:59:35 +08:00
|
|
|
|
[SerializeField] private string m_DecryptionServices;
|
|
|
|
|
|
|
2025-01-23 19:06:48 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 资源的运行模式
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public EPlayMode GamePlayMode
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return m_GamePlayMode; }
|
|
|
|
|
|
set { m_GamePlayMode = value; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public const int DefaultPriority = 0;
|
|
|
|
|
|
|
|
|
|
|
|
private IResourceManager m_ResourceManager;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 当前最新的包裹版本。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string PackageVersion { set; get; }
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnDestroy()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_ResourceManager = null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void Awake()
|
|
|
|
|
|
{
|
|
|
|
|
|
ImplementationComponentType = Utility.Assembly.GetType(componentType);
|
|
|
|
|
|
InterfaceComponentType = typeof(IResourceManager);
|
|
|
|
|
|
base.Awake();
|
|
|
|
|
|
m_ResourceManager = SysModuleCenter.GetModule<IResourceManager>();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-06 17:59:35 +08:00
|
|
|
|
public static string PrefsKey = Application.dataPath.GetHashCode() + "GamePlayMode";
|
2025-01-24 16:21:00 +08:00
|
|
|
|
|
2025-01-23 19:06:48 +08:00
|
|
|
|
protected void Start()
|
|
|
|
|
|
{
|
2025-01-24 16:21:00 +08:00
|
|
|
|
#if UNITY_EDITOR
|
2025-01-26 20:55:39 +08:00
|
|
|
|
int defaultMode = (int)m_GamePlayMode;
|
|
|
|
|
|
m_GamePlayMode = (EPlayMode)UnityEditor.EditorPrefs.GetInt(PrefsKey, defaultMode);
|
2025-01-23 19:06:48 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
m_ResourceManager.DefaultPackageName = m_defaultPackageName;
|
|
|
|
|
|
m_ResourceManager.PlayMode = m_GamePlayMode;
|
|
|
|
|
|
m_ResourceManager.VerifyLevel = EFileVerifyLevel.Middle;
|
|
|
|
|
|
m_ResourceManager.Milliseconds = m_Milliseconds;
|
|
|
|
|
|
m_ResourceManager.InstanceRoot = transform;
|
|
|
|
|
|
m_ResourceManager.Initialize();
|
|
|
|
|
|
m_ResourceManager.AssetAutoReleaseInterval = m_AssetAutoReleaseInterval;
|
|
|
|
|
|
m_ResourceManager.AssetCapacity = m_AssetCapacity;
|
|
|
|
|
|
m_ResourceManager.AssetExpireTime = m_AssetExpireTime;
|
|
|
|
|
|
m_ResourceManager.AssetPriority = m_AssetPriority;
|
|
|
|
|
|
Log.Info($"ResourceComponent Run Mode:{m_GamePlayMode}");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 初始化操作。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
2025-01-24 16:21:00 +08:00
|
|
|
|
public async UniTask<bool> InitPackageAsync(string packageName = "", string host = "", string fallbackHostServer = "", bool isDefaultPackage = true)
|
2025-01-23 19:06:48 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (m_ResourceManager == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
Log.Error("Resource component is invalid.");
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-24 16:21:00 +08:00
|
|
|
|
if (string.IsNullOrEmpty(packageName))
|
|
|
|
|
|
{
|
|
|
|
|
|
packageName = m_defaultPackageName;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-06 17:59:35 +08:00
|
|
|
|
return await m_ResourceManager.InitPackageAsync(packageName, host, fallbackHostServer, m_DecryptionServices, isDefaultPackage);
|
2025-01-23 19:06:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#region 版本更新
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取当前资源包版本。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>资源包版本。</returns>
|
|
|
|
|
|
public string GetPackageVersion(string customPackageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
var package = string.IsNullOrEmpty(customPackageName)
|
|
|
|
|
|
? YooAssets.GetPackage(m_defaultPackageName)
|
|
|
|
|
|
: YooAssets.GetPackage(customPackageName);
|
|
|
|
|
|
if (package == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return string.Empty;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return package.GetPackageVersion();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步更新最新包的版本。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="appendTimeTicks">请求URL是否需要带时间戳。</param>
|
|
|
|
|
|
/// <param name="timeout">超时时间。</param>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>请求远端包裹的最新版本操作句柄。</returns>
|
|
|
|
|
|
public RequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks = false, int timeout = 60,
|
|
|
|
|
|
string customPackageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
var package = string.IsNullOrEmpty(customPackageName)
|
|
|
|
|
|
? YooAssets.GetPackage(m_defaultPackageName)
|
|
|
|
|
|
: YooAssets.GetPackage(customPackageName);
|
|
|
|
|
|
return package.RequestPackageVersionAsync(appendTimeTicks, timeout);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 向网络端请求并更新清单
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="packageVersion">更新的包裹版本</param>
|
|
|
|
|
|
/// <param name="autoSaveVersion">更新成功后自动保存版本号,作为下次初始化的版本。</param>
|
|
|
|
|
|
/// <param name="timeout">超时时间(默认值:60秒)</param>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
public UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, int timeout = 60, string customPackageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
var package = string.IsNullOrEmpty(customPackageName)
|
|
|
|
|
|
? YooAssets.GetPackage(m_defaultPackageName)
|
|
|
|
|
|
: YooAssets.GetPackage(customPackageName);
|
|
|
|
|
|
return package.UpdatePackageManifestAsync(packageVersion, timeout);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 清理包裹未使用的缓存文件。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
2025-02-06 17:59:35 +08:00
|
|
|
|
public ClearCacheFilesOperation ClearUnusedCacheFilesAsync(EFileClearMode clearMode, string customPackageName = "")
|
2025-01-23 19:06:48 +08:00
|
|
|
|
{
|
|
|
|
|
|
var package = string.IsNullOrEmpty(customPackageName)
|
|
|
|
|
|
? YooAssets.GetPackage(m_defaultPackageName)
|
|
|
|
|
|
: YooAssets.GetPackage(customPackageName);
|
2025-02-06 17:59:35 +08:00
|
|
|
|
return package.ClearCacheFilesAsync(clearMode);
|
2025-01-23 19:06:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 加载场景
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载场景
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="path">资源路径</param>
|
|
|
|
|
|
/// <param name="sceneMode">场景模式</param>
|
|
|
|
|
|
/// <param name="activateOnLoad">是否加载完成自动激活</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public UniTask<SceneHandle> LoadSceneAsync(string path, LoadSceneMode sceneMode, bool activateOnLoad = true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.LoadSceneAsync(path, sceneMode, activateOnLoad);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载场景
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="assetInfo">资源路径</param>
|
|
|
|
|
|
/// <param name="sceneMode">场景模式</param>
|
|
|
|
|
|
/// <param name="activateOnLoad">是否加载完成自动激活</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public UniTask<SceneHandle> LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode, bool activateOnLoad = true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.LoadSceneAsync(assetInfo, sceneMode, activateOnLoad);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 获取资源
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 检查资源是否存在。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">要检查资源的名称。</param>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>检查资源是否存在的结果。</returns>
|
|
|
|
|
|
public HasAssetResult HasAsset(string location, string customPackageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.HasAsset(location, packageName: customPackageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 检查资源定位地址是否有效。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址</param>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
public bool CheckLocationValid(string location, string customPackageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.CheckLocationValid(location, packageName: customPackageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取资源信息列表。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="resTag">资源标签。</param>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>资源信息列表。</returns>
|
|
|
|
|
|
public AssetInfo[] GetAssetInfos(string resTag, string customPackageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.GetAssetInfos(resTag, packageName: customPackageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取资源信息列表。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="tags">资源标签列表。</param>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>资源信息列表。</returns>
|
|
|
|
|
|
public AssetInfo[] GetAssetInfos(string[] tags, string customPackageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.GetAssetInfos(tags, packageName: customPackageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取资源信息。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>资源信息。</returns>
|
|
|
|
|
|
public AssetInfo GetAssetInfo(string location, string customPackageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.GetAssetInfo(location, packageName: customPackageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 加载资源
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="assetType">要加载资源的类型。</param>
|
|
|
|
|
|
/// <param name="loadAssetCallbacks">加载资源回调函数集。</param>
|
|
|
|
|
|
/// <param name="userData">用户自定义数据。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
|
|
|
|
|
public void LoadAssetAsync(string location, Type assetType, LoadAssetCallbacks loadAssetCallbacks, object userData = null, string packageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
LoadAssetAsync(location, assetType, DefaultPriority, loadAssetCallbacks, userData, packageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="assetType">要加载资源的类型。</param>
|
|
|
|
|
|
/// <param name="priority">加载资源的优先级。</param>
|
|
|
|
|
|
/// <param name="loadAssetCallbacks">加载资源回调函数集。</param>
|
|
|
|
|
|
/// <param name="userData">用户自定义数据。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
|
|
|
|
|
public void LoadAssetAsync(string location, Type assetType, int priority, LoadAssetCallbacks loadAssetCallbacks, object userData, string packageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(location))
|
|
|
|
|
|
{
|
|
|
|
|
|
Log.Error("Asset name is invalid.");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_ResourceManager.LoadAssetAsync(location, assetType, priority, loadAssetCallbacks, userData, packageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 同步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
|
|
|
|
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
|
|
|
|
/// <returns>资源实例。</returns>
|
|
|
|
|
|
public T LoadAsset<T>(string location, string packageName = "") where T : UnityEngine.Object
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(location))
|
|
|
|
|
|
{
|
|
|
|
|
|
Log.Error("Asset name is invalid.");
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return m_ResourceManager.LoadAsset<T>(location, packageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 同步加载游戏物体并实例化。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="parent">资源实例父节点。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
|
|
|
|
|
/// <returns>资源实例。</returns>
|
|
|
|
|
|
public GameObject LoadGameObject(string location, Transform parent = null, string packageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(location))
|
|
|
|
|
|
{
|
|
|
|
|
|
Log.Error("Asset name is invalid.");
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return m_ResourceManager.LoadGameObject(location, parent, packageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="callback">回调函数。</param>
|
|
|
|
|
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
|
|
|
|
public void LoadAsset<T>(string location, Action<T> callback, string customPackageName = "") where T : UnityEngine.Object
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(location))
|
|
|
|
|
|
{
|
|
|
|
|
|
Log.Error("Asset name is invalid.");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_ResourceManager.LoadAsset<T>(location, callback, packageName: customPackageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源定位地址。</param>
|
|
|
|
|
|
/// <param name="cancellationToken">取消操作Token。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
|
|
|
|
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
|
|
|
|
/// <returns>异步资源实例。</returns>
|
|
|
|
|
|
public async UniTask<T> LoadAssetAsync<T>(string location, CancellationToken cancellationToken = default,
|
|
|
|
|
|
string packageName = "") where T : UnityEngine.Object
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(location))
|
|
|
|
|
|
{
|
|
|
|
|
|
Log.Error("Asset name is invalid.");
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return await m_ResourceManager.LoadAssetAsync<T>(location, cancellationToken, packageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载游戏物体并实例化。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源定位地址。</param>
|
|
|
|
|
|
/// <param name="parent">资源实例父节点。</param>
|
|
|
|
|
|
/// <param name="cancellationToken">取消操作Token。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
|
|
|
|
|
/// <returns>异步游戏物体实例。</returns>
|
|
|
|
|
|
public async UniTask<GameObject> LoadGameObjectAsync(string location, Transform parent = null, CancellationToken cancellationToken = default,
|
|
|
|
|
|
string packageName = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(location))
|
|
|
|
|
|
{
|
|
|
|
|
|
Log.Error("Asset name is invalid.");
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return await m_ResourceManager.LoadGameObjectAsync(location, parent, cancellationToken, packageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public AssetHandle LoadAssetGetOperation<T>(string location,
|
|
|
|
|
|
string packageName = "") where T : UnityEngine.Object
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.LoadAssetGetOperation<T>(location, packageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public AssetHandle LoadAssetAsyncHandle<T>(string location, string packageName = "") where T : UnityEngine.Object
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_ResourceManager.LoadAssetAsyncHandle<T>(location, packageName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 卸载资源
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 卸载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="asset">要卸载的资源。</param>
|
|
|
|
|
|
public void UnloadAsset(object asset)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (asset == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_ResourceManager.UnloadAsset(asset);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 释放资源
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 强制执行释放未被使用的资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="performGCCollect">是否使用垃圾回收。</param>
|
|
|
|
|
|
public void ForceUnloadUnusedAssets(bool performGCCollect)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_ResourceManager.UnloadUnusedAssets(performGCCollect);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 预订执行释放未被使用的资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="performGCCollect">是否使用垃圾回收。</param>
|
|
|
|
|
|
public void UnloadUnusedAssets(bool performGCCollect)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_ResourceManager.ForceUnloadUnusedAssets(performGCCollect);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
2025-01-24 16:21:00 +08:00
|
|
|
|
}
|