Method LoadAssetAsync
LoadAssetAsync<TObject>(IResourceLocation)
Loads a single Addressable asset identified by an IResourceLocation.
Declaration
public static AsyncOperationHandle<TObject> LoadAssetAsync<TObject>(IResourceLocation location)
Parameters
Type | Name | Description |
---|---|---|
IResourceLocation | location | The location of the asset. |
Returns
Type | Description |
---|---|
AsyncOperationHandle<TObject> | AsyncOperationHandle that is used to check when the operation has completed. The result of the operation is the loaded asset of the type |
Type Parameters
Name | Description |
---|---|
TObject | The type of the asset. |
Remarks
Loads an Addressable asset. If a key
references multiple assets (i.e. a label that is assigned to multiple assets), only the first asset found will be loaded.
When you load an Addressable asset, the system:
- Gathers the asset's dependencies
- Downloads any remote AssetBundles needed to load the asset or its dependencies
- Loads the AssetBundles into memory
- Populates the
Result
object of the AsyncOperationHandle<TObject> instance returned by this function.
Examples
The example below loads a material using an IResourceLocation. The loaded material is assigned to a GameObject. A reference to the operation handle is stored and can be released via Release(AsyncOperationHandle).
public AssetReference materialLocation; // Identify the material
public GameObject goLocation; // Identify the GameObject
AsyncOperationHandle<Material> instHandleLocation;
AsyncOperationHandle<IList<IResourceLocation>> locHandle;
public void UsingLoadAssetAsyncSampleLocation()
{
locHandle = Addressables.LoadResourceLocationsAsync(materialLocation, typeof(Material));
locHandle.Completed += OnLoadComplete;
}
void OnLoadComplete(AsyncOperationHandle<IList<IResourceLocation>> handle)
{
if (handle.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log($"Successfully loaded resource locations");
foreach (IResourceLocation location in handle.Result)
{
instHandleLocation = Addressables.LoadAssetAsync<Material>(location);
instHandleLocation.Completed += OnLoadCompleteLocation;
}
}
}
void OnLoadCompleteLocation(AsyncOperationHandle<Material> handle)
{
if (handle.Status == AsyncOperationStatus.Succeeded)
{
var loadedMaterial = handle.Result;
Debug.Log($"Successfully loaded material '{loadedMaterial.name}'");
var renderer = goLocation.GetComponent<MeshRenderer>();
if (renderer == null)
renderer = goLocation.AddComponent<MeshRenderer>();
renderer.material = loadedMaterial;
Debug.Log($"Assigned loaded material to GameObject named '{goLocation.name}'");
}
}
void ReleaseResourcesLocation()
{
Addressables.Release(locHandle);
Addressables.Release(instHandleLocation);
}
// When ready to release the asset, call ReleaseResourcesLocation().
// For example during OnDestroy().
// void OnDestroy()
// {
// ReleaseResourcesLocation();
// }
The example below loads a material using a key
, specifically an AssetReference. The loaded material is assigned to a GameObject. A reference to the
operation handle is stored and can be released via Release(AsyncOperationHandle).
public AssetReference materialKey; // Identify the material
public GameObject goKey; // Identify the GameObject
AsyncOperationHandle<Material> handleKey;
public void UsingLoadAssetAsyncSampleKey()
{
handleKey = Addressables.LoadAssetAsync<Material>(materialKey);
handleKey.Completed += OnLoadCompleteKey;
}
void OnLoadCompleteKey(AsyncOperationHandle<Material> handle)
{
if (handle.Status == AsyncOperationStatus.Succeeded)
{
var loadedMaterial = handle.Result;
Debug.Log($"Successfully loaded material '{loadedMaterial.name}'");
var renderer = goKey.GetComponent<MeshRenderer>();
if (renderer == null)
renderer = goKey.AddComponent<MeshRenderer>();
renderer.material = loadedMaterial;
Debug.Log($"Assigned loaded material to GameObject named '{goKey.name}'");
}
}
void ReleaseResourcesKey()
{
Addressables.Release(handleKey);
}
// When ready to release the asset, call ReleaseResourcesKey().
// For example during OnDestroy().
//void OnDestroy()
//{
// ReleaseResourcesKey();
//}
See Also
LoadAssetAsync<TObject>(object)
Loads a single Addressable asset identified by an IResourceLocation.
Declaration
public static AsyncOperationHandle<TObject> LoadAssetAsync<TObject>(object key)
Parameters
Type | Name | Description |
---|---|---|
object | key | The key of the location of the asset. |
Returns
Type | Description |
---|---|
AsyncOperationHandle<TObject> | AsyncOperationHandle that is used to check when the operation has completed. The result of the operation is the loaded asset of the type |
Type Parameters
Name | Description |
---|---|
TObject | The type of the asset. |