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);
        }
Example #2
0
        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);
        }
Example #4
0
        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
        }
Example #5
0
        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.
 }
Example #8
0
 public abstract void Release(AssetLoadHandle handle);