public AssetLoadHandle <T> LoadAsync <T>(string key) where T : Object { var controlId = _nextControlId++; var handle = new AssetLoadHandle <T>(controlId); var setter = (IAssetLoadHandleSetter <T>)handle; var tcs = new TaskCompletionSource <T>(); var req = Resources.LoadAsync <T>(key); req.completed += _ => { var result = req.asset as T; setter.SetResult(result); var status = result != null ? AssetLoadStatus.Success : AssetLoadStatus.Failed; setter.SetStatus(status); if (result == null) { var exception = new InvalidOperationException($"Requested asset(Key: {key})was not found."); setter.SetOperationException(exception); } tcs.SetResult(result); }; setter.SetPercentCompleteFunc(() => req.progress); setter.SetTask(tcs.Task); return(handle); }
public void Release(AssetLoadHandle handle) { if (!_controlIdToHandles.ContainsKey(handle.ControlId)) { throw new InvalidOperationException( $"There is no asset that has been requested for release (ControlId: {handle.ControlId})."); } var addressableHandle = _controlIdToHandles[handle.ControlId]; _controlIdToHandles.Remove(handle.ControlId); Addressables.Release(addressableHandle); }
public AssetLoadHandle <T> Load <T>(string key) where T : Object { var controlId = _nextControlId++; var handle = new AssetLoadHandle <T>(controlId); var setter = (IAssetLoadHandleSetter <T>)handle; var result = Resources.Load <T>(key); setter.SetResult(result); var status = result != null ? AssetLoadStatus.Success : AssetLoadStatus.Failed; setter.SetStatus(status); if (result == null) { var exception = new InvalidOperationException($"Requested asset(Key: {key})was not found."); setter.SetOperationException(exception); } setter.SetPercentCompleteFunc(() => 1.0f); setter.SetTask(Task.FromResult(result)); return(handle); }
public AssetLoadHandle<T> Load<T>(string key) where T : Object { #if ADDRESSABLES_1_17_4_OR_NEWER var addressableHandle = Addressables.LoadAssetAsync<T>(key); addressableHandle.WaitForCompletion(); var controlId = _nextControlId++; _controlIdToHandles.Add(controlId, addressableHandle); var handle = new AssetLoadHandle<T>(controlId); var setter = (IAssetLoadHandleSetter<T>)handle; setter.SetPercentCompleteFunc(() => addressableHandle.PercentComplete); setter.SetTask(Task.FromResult(addressableHandle.Result)); setter.SetResult(addressableHandle.Result); var status = addressableHandle.Status == AsyncOperationStatus.Succeeded ? AssetLoadStatus.Success : AssetLoadStatus.Failed; setter.SetStatus(status); setter.SetOperationException(addressableHandle.OperationException); return handle; #else throw new NotSupportedException(); #endif }
public AssetLoadHandle<T> LoadAsync<T>(AssetReference assetRef) where T : Object { var addressableHandle = Addressables.LoadAssetAsync<T>(assetRef); var controlId = _nextControlId++; _controlIdToHandles.Add(controlId, addressableHandle); var handle = new AssetLoadHandle<T>(controlId); var setter = (IAssetLoadHandleSetter<T>)handle; var tcs = new TaskCompletionSource<T>(); addressableHandle.Completed += x => { setter.SetResult(x.Result); var status = x.Status == AsyncOperationStatus.Succeeded ? AssetLoadStatus.Success : AssetLoadStatus.Failed; setter.SetStatus(status); setter.SetOperationException(addressableHandle.OperationException); tcs.SetResult(x.Result); }; setter.SetPercentCompleteFunc(() => addressableHandle.PercentComplete); setter.SetTask(tcs.Task); return handle; }
public override void Release(AssetLoadHandle handle) { _loader.Release(handle); }
public void Release(AssetLoadHandle handle) { // Resources.UnloadUnusedAssets() is responsible for releasing assets loaded by Resources.Load(), so nothing is done here. }
public abstract void Release(AssetLoadHandle handle);