using Cysharp.Threading.Tasks; namespace TEngine { internal partial class ResourceExtComponent { /// /// 资源组件。 /// private static IResourceModule _resourceModule; private LoadAssetCallbacks _loadAssetCallbacks; public static IResourceModule ResourceModule => _resourceModule; private void InitializedResources() { _resourceModule = ModuleSystem.GetModule(); _loadAssetCallbacks = new LoadAssetCallbacks(OnLoadAssetSuccess, OnLoadAssetFailure); } private void OnLoadAssetFailure(string assetName, LoadResourceStatus status, string errormessage, object userdata) { _assetLoadingList.Remove(assetName); Log.Error("Can not load asset from '{0}' with error message '{1}'.", assetName, errormessage); } private void OnLoadAssetSuccess(string assetName, object asset, float duration, object userdata) { _assetLoadingList.Remove(assetName); ISetAssetObject setAssetObject = (ISetAssetObject)userdata; UnityEngine.Object assetObject = asset as UnityEngine.Object; if (assetObject != null) { _assetItemPool.Register(AssetItemObject.Create(setAssetObject.Location, assetObject), true); SetAsset(setAssetObject, assetObject); } else { Log.Error($"Load failure asset type is {asset.GetType()}."); } } /// /// 通过资源系统设置资源。 /// /// 需要设置的对象。 public async UniTaskVoid SetAssetByResources(ISetAssetObject setAssetObject) where T : UnityEngine.Object { await TryWaitingLoading(setAssetObject.Location); if (_assetItemPool.CanSpawn(setAssetObject.Location)) { var assetObject = (T)_assetItemPool.Spawn(setAssetObject.Location).Target; SetAsset(setAssetObject, assetObject); } else { _assetLoadingList.Add(setAssetObject.Location); _resourceModule.LoadAssetAsync(setAssetObject.Location, typeof(T), 0, _loadAssetCallbacks, setAssetObject); } } } }