From 2dd29a132882905ea6591aff202e899771dc1a75 Mon Sep 17 00:00:00 2001
From: ALEXTANG <574809918@qq.com>
Date: Tue, 4 Apr 2023 16:23:39 +0800
Subject: [PATCH] Update ResourceModule.cs
---
.../GameFramework/Resource/ResourceModule.cs | 245 ++++++++++++++++--
1 file changed, 222 insertions(+), 23 deletions(-)
diff --git a/Assets/TEngine/Runtime/GameFramework/Resource/ResourceModule.cs b/Assets/TEngine/Runtime/GameFramework/Resource/ResourceModule.cs
index a4d16e22..50e7d255 100644
--- a/Assets/TEngine/Runtime/GameFramework/Resource/ResourceModule.cs
+++ b/Assets/TEngine/Runtime/GameFramework/Resource/ResourceModule.cs
@@ -1,6 +1,8 @@
using System;
+using System.Threading;
+using Cysharp.Threading.Tasks;
using UnityEngine;
-using UnityEngine.Serialization;
+using UnityEngine.SceneManagement;
using YooAsset;
namespace TEngine
@@ -12,6 +14,7 @@ namespace TEngine
public class ResourceModule : GameFrameworkModuleBase
{
#region Propreties
+
///
/// 获取当前资源适用的游戏版本号。
///
@@ -21,7 +24,7 @@ namespace TEngine
/// 获取当前内部资源版本号。
///
public int InternalResourceVersion => m_ResourceManager?.InternalResourceVersion ?? 0;
-
+
///
/// 默认资源加载优先级。
///
@@ -52,19 +55,17 @@ namespace TEngine
///
public ResourceDownloaderOperation Downloader { get; set; }
- [SerializeField]
- private ReadWritePathType readWritePathType = ReadWritePathType.Unspecified;
+ [SerializeField] private ReadWritePathType readWritePathType = ReadWritePathType.Unspecified;
- [SerializeField]
- private float minUnloadUnusedAssetsInterval = 60f;
+ [SerializeField] private float minUnloadUnusedAssetsInterval = 60f;
- [SerializeField]
- private float maxUnloadUnusedAssetsInterval = 300f;
+ [SerializeField] private float maxUnloadUnusedAssetsInterval = 300f;
///
/// 设置异步系统参数,每帧执行消耗的最大时间切片(单位:毫秒)
///
public long milliseconds = 30;
+
public int downloadingMaxNum = 3;
public int failedTryAgain = 3;
@@ -83,7 +84,7 @@ namespace TEngine
get => downloadingMaxNum;
set => downloadingMaxNum = value;
}
-
+
///
/// 失败尝试数目。
///
@@ -132,7 +133,7 @@ namespace TEngine
public string ReadWritePath => m_ResourceManager.ReadWritePath;
#endregion
-
+
private void Start()
{
RootModule baseComponent = GameEntry.GetModule();
@@ -156,7 +157,7 @@ namespace TEngine
playMode = EPlayMode.OfflinePlayMode;
#endif
}
-
+
m_ResourceManager.SetReadOnlyPath(Application.streamingAssetsPath);
if (readWritePathType == ReadWritePathType.TemporaryCache)
{
@@ -171,7 +172,7 @@ namespace TEngine
m_ResourceManager.SetReadWritePath(Application.persistentDataPath);
}
-
+
m_ResourceManager.PackageName = packageName;
m_ResourceManager.PlayMode = playMode;
m_ResourceManager.VerifyLevel = verifyLevel;
@@ -179,7 +180,7 @@ namespace TEngine
m_ResourceManager.Initialize();
Log.Info($"AssetsComponent Run Mode:{playMode}");
}
-
+
///
/// 初始化操作。
///
@@ -188,7 +189,7 @@ namespace TEngine
{
return m_ResourceManager.InitPackage();
}
-
+
///
/// 异步更新最新包的版本。
///
@@ -198,7 +199,7 @@ namespace TEngine
public UpdatePackageVersionOperation UpdatePackageVersionAsync(bool appendTimeTicks = true, int timeout = 60)
{
var package = YooAssets.GetPackage(packageName);
- return package.UpdatePackageVersionAsync(appendTimeTicks,timeout);
+ return package.UpdatePackageVersionAsync(appendTimeTicks, timeout);
}
///
@@ -210,16 +211,16 @@ namespace TEngine
public UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, int timeout = 60)
{
var package = YooAssets.GetPackage(packageName);
- return package.UpdatePackageManifestAsync(packageVersion,timeout);
+ return package.UpdatePackageManifestAsync(packageVersion, timeout);
}
-
+
///
/// 创建资源下载器,用于下载当前资源版本所有的资源包文件。
///
public ResourceDownloaderOperation CreateResourceDownloader()
{
var package = YooAssets.GetPackage(packageName);
- Downloader = package.CreateResourceDownloader(downloadingMaxNum,failedTryAgain);
+ Downloader = package.CreateResourceDownloader(downloadingMaxNum, failedTryAgain);
return Downloader;
}
@@ -231,7 +232,7 @@ namespace TEngine
var package = YooAssets.GetPackage(packageName);
return package.ClearUnusedCacheFilesAsync();
}
-
+
///
/// 清理沙盒路径。
///
@@ -239,7 +240,7 @@ namespace TEngine
{
YooAssets.ClearSandbox();
}
-
+
///
/// 强制执行释放未被使用的资源。
///
@@ -252,14 +253,15 @@ namespace TEngine
m_PerformGCCollect = true;
}
}
-
+
///
/// 资源模块外部轮询(释放无用资源)。
///
private void Update()
{
m_LastUnloadUnusedAssetsOperationElapseSeconds += Time.unscaledDeltaTime;
- if (m_AsyncOperation == null && (m_ForceUnloadUnusedAssets || m_LastUnloadUnusedAssetsOperationElapseSeconds >= maxUnloadUnusedAssetsInterval || m_PreorderUnloadUnusedAssets && m_LastUnloadUnusedAssetsOperationElapseSeconds >= minUnloadUnusedAssetsInterval))
+ if (m_AsyncOperation == null && (m_ForceUnloadUnusedAssets || m_LastUnloadUnusedAssetsOperationElapseSeconds >= maxUnloadUnusedAssetsInterval ||
+ m_PreorderUnloadUnusedAssets && m_LastUnloadUnusedAssetsOperationElapseSeconds >= minUnloadUnusedAssetsInterval))
{
Log.Info("Unload unused assets...");
m_ForceUnloadUnusedAssets = false;
@@ -267,7 +269,7 @@ namespace TEngine
m_LastUnloadUnusedAssetsOperationElapseSeconds = 0f;
m_AsyncOperation = Resources.UnloadUnusedAssets();
}
-
+
if (m_AsyncOperation is { isDone: true })
{
m_ResourceManager.UnloadUnusedAssets();
@@ -280,5 +282,202 @@ namespace TEngine
}
}
}
+
+ ///
+ /// 检查资源是否存在。
+ ///
+ /// 要检查资源的名称。
+ /// 检查资源是否存在的结果。
+ public HasAssetResult HasAsset(string assetName)
+ {
+ return m_ResourceManager.HasAsset(assetName);
+ }
+
+ ///
+ /// 设置默认资源包。
+ ///
+ /// 资源包。
+ public void SetDefaultPackage(ResourcePackage package)
+ {
+ m_ResourceManager.SetDefaultPackage(package);
+ }
+
+ ///
+ /// 是否需要从远端更新下载。
+ ///
+ /// 资源的定位地址。
+ ///
+ public bool IsNeedDownloadFromRemote(string location)
+ {
+ return m_ResourceManager.IsNeedDownloadFromRemote(location);
+ }
+
+ ///
+ /// 是否需要从远端更新下载。
+ ///
+ /// 资源信息。
+ ///
+ public bool IsNeedDownloadFromRemote(AssetInfo assetInfo)
+ {
+ return m_ResourceManager.IsNeedDownloadFromRemote(assetInfo);
+ }
+
+ ///
+ /// 获取资源信息列表。
+ ///
+ /// 资源标签。
+ /// 资源信息列表。
+ public AssetInfo[] GetAssetInfos(string resTag)
+ {
+ return m_ResourceManager.GetAssetInfos(resTag);
+ }
+
+ ///
+ /// 获取资源信息列表。
+ ///
+ /// 资源标签列表。
+ /// 资源信息列表。
+ public AssetInfo[] GetAssetInfos(string[] tags)
+ {
+ return m_ResourceManager.GetAssetInfos(tags);
+ }
+
+ ///
+ /// 获取资源信息。
+ ///
+ /// 资源的定位地址。
+ /// 资源信息。
+ public AssetInfo GetAssetInfo(string location)
+ {
+ return m_ResourceManager.GetAssetInfo(location);
+ }
+
+ ///
+ /// 检查资源定位地址是否有效。
+ ///
+ /// 资源的定位地址
+ public bool CheckLocationValid(string location)
+ {
+ return m_ResourceManager.CheckLocationValid(location);
+ }
+
+ ///
+ /// 同步加载资源。
+ ///
+ /// 要加载资源的名称。
+ /// 要加载资源的类型。
+ /// 资源实例。
+ public T LoadAsset(string assetName) where T : UnityEngine.Object
+ {
+ return m_ResourceManager.LoadAsset(assetName);
+ }
+
+ ///
+ /// 同步加载资源。
+ ///
+ /// 要加载资源的名称。
+ /// 父节点位置。
+ /// 要加载资源的类型。
+ /// 资源实例。
+ public T LoadAsset(string assetName, Transform parent) where T : UnityEngine.Object
+ {
+ return m_ResourceManager.LoadAsset(assetName, parent);
+ }
+
+ ///
+ /// 同步加载资源。
+ ///
+ /// 资源操作句柄。
+ /// 要加载资源的名称。
+ /// 要加载资源的类型。
+ /// 资源实例。
+ public T LoadAsset(string assetName, out AssetOperationHandle handle) where T : UnityEngine.Object
+ {
+ return m_ResourceManager.LoadAsset(assetName, out handle);
+ }
+
+ ///
+ /// 同步加载资源。
+ ///
+ /// 要加载资源的名称。
+ /// 资源操作句柄。
+ /// 父节点位置。
+ /// 要加载资源的类型。
+ /// 资源实例。
+ public T LoadAsset(string assetName, Transform parent, out AssetOperationHandle handle) where T : UnityEngine.Object
+ {
+ return m_ResourceManager.LoadAsset(assetName, parent, out handle);
+ }
+
+ ///
+ /// 异步加载资源。
+ ///
+ /// 要加载资源的名称。
+ /// 取消操作Token。
+ /// 要加载资源的类型。
+ /// 异步资源实例。
+ public UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken) where T : UnityEngine.Object
+ {
+ return m_ResourceManager.LoadAssetAsync(assetName, cancellationToken);
+ }
+
+ ///
+ /// 异步加载游戏物体。
+ ///
+ /// 要加载的游戏物体名称。
+ /// 取消操作Token。
+ /// 异步游戏物体实例。
+ public UniTask LoadGameObjectAsync(string assetName, CancellationToken cancellationToken)
+ {
+ return m_ResourceManager.LoadAssetAsync(assetName, cancellationToken);
+ }
+
+ ///
+ /// 同步加载资源并获取句柄。
+ ///
+ /// 要加载资源的名称。
+ /// 要加载资源的类型。
+ /// 同步加载资源句柄。
+ public AssetOperationHandle LoadAssetGetOperation(string assetName) where T : UnityEngine.Object
+ {
+ return m_ResourceManager.LoadAssetGetOperation(assetName);
+ }
+
+ ///
+ /// 异步加载资源并获取句柄。
+ ///
+ /// 要加载资源的名称。
+ /// 要加载资源的类型。
+ /// 异步加载资源句柄。
+ public AssetOperationHandle LoadAssetAsyncHandle(string assetName) where T : UnityEngine.Object
+ {
+ return m_ResourceManager.LoadAssetAsyncHandle(assetName);
+ }
+
+ ///
+ /// 异步加载场景。
+ ///
+ /// 场景的定位地址
+ /// 场景加载模式
+ /// 加载完毕时是否主动激活
+ /// 优先级
+ /// 异步加载场景句柄。
+ public SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100)
+ {
+ return m_ResourceManager.LoadSceneAsync(location, sceneMode, activateOnLoad, priority);
+ }
+
+ ///
+ /// 异步加载场景
+ ///
+ /// 场景的资源信息
+ /// 场景加载模式
+ /// 加载完毕时是否主动激活
+ /// 优先级
+ /// 异步加载场景句柄。
+ public SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100)
+ {
+ return m_ResourceManager.LoadSceneAsync(assetInfo, sceneMode, activateOnLoad, priority);
+ }
}
}
\ No newline at end of file