An optional capability for an asset entry that loads its asset asynchronously.
Implement this alongside IAssetEntry when the entry loads through an asynchronous operation, such as a
Resources request or an Addressables handle. The localization system calls this on the asynchronous resolve paths.
An entry that already has its asset in hand implements ISynchronousAssetEntry instead; the built-in
entries are synchronous only.
Additional resources: IAssetEntry, ISynchronousAssetEntry
<para>Load an asset entry and log the result.</para>
using System.Threading; using Unity.Localization; using UnityEngine; using Object = UnityEngine.Object;
namespace Unity.Localization.Samples { public class AsyncAssetEntryExample : ResourceEntryBase, IAssetEntry, IAsyncAssetEntry { [SerializeField] string m_ResourcePath;
public AsyncAssetEntryExample(long keyId, string resourcePath) : base(keyId) => m_ResourcePath = resourcePath;
public bool HasAsset() => !string.IsNullOrEmpty(m_ResourcePath);
public async Awaitable<Object> LoadAssetAsync(CancellationToken cancellationToken) { if (!HasAsset()) return null; var request = Resources.LoadAsync<Object>(m_ResourcePath); await Awaitable.FromAsyncOperation(request, cancellationToken); return request.asset; }
public void ReleaseAsset(Object asset) => Resources.UnloadAsset(asset); }
public class IAsyncAssetEntryLoadAssetAsyncExample { public async Awaitable Run() { var shared = ScriptableObject.CreateInstance<SharedTableData>(); IAsyncAssetEntry entry = new AsyncAssetEntryExample(shared.AddKey("banner").Id, "UI/banner");
var asset = await entry.LoadAssetAsync(CancellationToken.None); if (asset != null) { Debug.Log(asset.name); entry.ReleaseAsset(asset); } } } }
| Method | Description |
|---|---|
| LoadAssetAsync | Loads the asset assigned to this entry. |