mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-07 16:45:10 +00:00
优化加载游戏物体接口,常用Parent参数前置,编辑器模式下增加超时保护提示
优化加载游戏物体接口,常用Parent参数前置,编辑器模式下增加超时保护提示
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using YooAsset;
|
||||
|
||||
namespace TEngine
|
||||
@@ -217,11 +216,11 @@ namespace TEngine
|
||||
/// 同步加载游戏物体并实例化。
|
||||
/// </summary>
|
||||
/// <param name="location">资源的定位地址。</param>
|
||||
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
||||
/// <param name="parent">资源实例父节点。</param>
|
||||
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
||||
/// <returns>资源实例。</returns>
|
||||
/// <remarks>会实例化资源到场景,无需主动UnloadAsset,Destroy时自动UnloadAsset。</remarks>
|
||||
GameObject LoadGameObject(string location, string packageName = "", Transform parent = null);
|
||||
GameObject LoadGameObject(string location, Transform parent = null, string packageName = "");
|
||||
|
||||
/// <summary>
|
||||
/// 异步加载资源。
|
||||
@@ -262,11 +261,11 @@ namespace TEngine
|
||||
/// 异步加载游戏物体并实例化。
|
||||
/// </summary>
|
||||
/// <param name="location">资源定位地址。</param>
|
||||
/// <param name="parent">资源实例父节点。</param>
|
||||
/// <param name="cancellationToken">取消操作Token。</param>
|
||||
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
||||
/// <param name="parent">资源实例父节点。</param>
|
||||
/// <returns>异步游戏物体实例。</returns>
|
||||
/// <remarks>会实例化资源到场景,无需主动UnloadAsset,Destroy时自动UnloadAsset。</remarks>
|
||||
UniTask<GameObject> LoadGameObjectAsync(string location, CancellationToken cancellationToken = default, string packageName = "", Transform parent = null);
|
||||
UniTask<GameObject> LoadGameObjectAsync(string location, Transform parent = null, CancellationToken cancellationToken = default, string packageName = "");
|
||||
}
|
||||
}
|
@@ -14,7 +14,6 @@ namespace TEngine
|
||||
internal sealed partial class ResourceManager : ModuleImp, IResourceManager
|
||||
{
|
||||
#region Propreties
|
||||
|
||||
/// <summary>
|
||||
/// 资源包名称。
|
||||
/// </summary>
|
||||
@@ -532,7 +531,7 @@ namespace TEngine
|
||||
return ret;
|
||||
}
|
||||
|
||||
public GameObject LoadGameObject(string location, string packageName = "", Transform parent = null)
|
||||
public GameObject LoadGameObject(string location, Transform parent = null, string packageName = "")
|
||||
{
|
||||
if (string.IsNullOrEmpty(location))
|
||||
{
|
||||
@@ -663,8 +662,7 @@ namespace TEngine
|
||||
return handle.AssetObject as T;
|
||||
}
|
||||
|
||||
public async UniTask<GameObject> LoadGameObjectAsync(string location, CancellationToken cancellationToken = default, string packageName = "",
|
||||
Transform parent = null)
|
||||
public async UniTask<GameObject> LoadGameObjectAsync(string location, Transform parent = null, CancellationToken cancellationToken = default, string packageName = "")
|
||||
{
|
||||
if (string.IsNullOrEmpty(location))
|
||||
{
|
||||
@@ -896,12 +894,33 @@ namespace TEngine
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private readonly TimeoutController _timeoutController = new TimeoutController();
|
||||
|
||||
private async UniTask TryWaitingLoading(string assetObjectKey)
|
||||
{
|
||||
if (_assetLoadingList.Contains(assetObjectKey))
|
||||
{
|
||||
await UniTask.WaitUntil(() => !_assetLoadingList.Contains(assetObjectKey), cancellationToken:CancellationToken);
|
||||
try
|
||||
{
|
||||
await UniTask.WaitUntil(
|
||||
() => !_assetLoadingList.Contains(assetObjectKey),
|
||||
cancellationToken:CancellationToken)
|
||||
#if UNITY_EDITOR
|
||||
.AttachExternalCancellation(_timeoutController.Timeout(TimeSpan.FromSeconds(60)));
|
||||
_timeoutController.Reset();
|
||||
#else
|
||||
;
|
||||
#endif
|
||||
|
||||
}
|
||||
catch (OperationCanceledException ex)
|
||||
{
|
||||
if (_timeoutController.IsTimeout())
|
||||
{
|
||||
Log.Error($"LoadAssetAsync Waiting {assetObjectKey} timeout. reason:{ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
@@ -509,10 +509,10 @@ namespace TEngine
|
||||
/// 同步加载游戏物体并实例化。
|
||||
/// </summary>
|
||||
/// <param name="location">资源的定位地址。</param>
|
||||
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
||||
/// <param name="parent">资源实例父节点。</param>
|
||||
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
||||
/// <returns>资源实例。</returns>
|
||||
public GameObject LoadGameObject(string location, string packageName = "", Transform parent = null)
|
||||
public GameObject LoadGameObject(string location, Transform parent = null, string packageName = "")
|
||||
{
|
||||
if (string.IsNullOrEmpty(location))
|
||||
{
|
||||
@@ -520,7 +520,7 @@ namespace TEngine
|
||||
return null;
|
||||
}
|
||||
|
||||
return m_ResourceManager.LoadGameObject(location, packageName, parent);
|
||||
return m_ResourceManager.LoadGameObject(location, parent, packageName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -565,13 +565,12 @@ namespace TEngine
|
||||
/// 异步加载游戏物体并实例化。
|
||||
/// </summary>
|
||||
/// <param name="location">资源定位地址。</param>
|
||||
/// <param name="parent">资源实例父节点。</param>
|
||||
/// <param name="cancellationToken">取消操作Token。</param>
|
||||
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
||||
/// <param name="parent">资源实例父节点。</param>
|
||||
/// <returns>异步游戏物体实例。</returns>
|
||||
public async UniTask<GameObject> LoadGameObjectAsync(string location, CancellationToken cancellationToken = default,
|
||||
string packageName = "",
|
||||
Transform parent = null)
|
||||
public async UniTask<GameObject> LoadGameObjectAsync(string location, Transform parent = null, CancellationToken cancellationToken = default,
|
||||
string packageName = "")
|
||||
{
|
||||
if (string.IsNullOrEmpty(location))
|
||||
{
|
||||
@@ -579,7 +578,7 @@ namespace TEngine
|
||||
return null;
|
||||
}
|
||||
|
||||
return await m_ResourceManager.LoadGameObjectAsync(location, cancellationToken, packageName, parent);
|
||||
return await m_ResourceManager.LoadGameObjectAsync(location, parent, cancellationToken, packageName);
|
||||
}
|
||||
|
||||
internal AssetHandle LoadAssetGetOperation<T>(string location,
|
||||
|
@@ -331,7 +331,7 @@ namespace TEngine
|
||||
/// <returns>UIWidget实例。</returns>
|
||||
public async UniTask<T> CreateWidgetByPathAsync<T>(Transform parentTrans, string assetLocation, bool visible = true) where T : UIWidget, new()
|
||||
{
|
||||
GameObject goInst = await GameModule.Resource.LoadGameObjectAsync(assetLocation, gameObject.GetCancellationTokenOnDestroy(), parent: parentTrans);
|
||||
GameObject goInst = await GameModule.Resource.LoadGameObjectAsync(assetLocation, parentTrans, gameObject.GetCancellationTokenOnDestroy());
|
||||
return CreateWidget<T>(goInst, visible);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user