namespace AddressableAssets.DocExampleCode { using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.ResourceManagement.ResourceLocations; internal class UsingLoadAssetAsync { #region DECLARATION_1 public static AsyncOperationHandle LoadAssetAsync(IResourceLocation location) #endregion { return default; } #region DECLARATION_2 public static AsyncOperationHandle LoadAssetAsync(object key) #endregion { return default; } #region SAMPLE_LOCATION public AssetReference materialLocation; // Identify the material public GameObject goLocation; // Identify the GameObject AsyncOperationHandle instHandleLocation; AsyncOperationHandle> locHandle; public void UsingLoadAssetAsyncSampleLocation() { locHandle = Addressables.LoadResourceLocationsAsync(materialLocation, typeof(Material)); locHandle.Completed += OnLoadComplete; } void OnLoadComplete(AsyncOperationHandle> handle) { if (handle.Status == AsyncOperationStatus.Succeeded) { Debug.Log($"Successfully loaded resource locations"); foreach (IResourceLocation location in handle.Result) { instHandleLocation = Addressables.LoadAssetAsync(location); instHandleLocation.Completed += OnLoadCompleteLocation; } } } void OnLoadCompleteLocation(AsyncOperationHandle handle) { if (handle.Status == AsyncOperationStatus.Succeeded) { var loadedMaterial = handle.Result; Debug.Log($"Successfully loaded material '{loadedMaterial.name}'"); var renderer = goLocation.GetComponent(); if (renderer == null) renderer = goLocation.AddComponent(); 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(); // } #endregion #region SAMPLE_KEY public AssetReference materialKey; // Identify the material public GameObject goKey; // Identify the GameObject AsyncOperationHandle handleKey; public void UsingLoadAssetAsyncSampleKey() { handleKey = Addressables.LoadAssetAsync(materialKey); handleKey.Completed += OnLoadCompleteKey; } void OnLoadCompleteKey(AsyncOperationHandle handle) { if (handle.Status == AsyncOperationStatus.Succeeded) { var loadedMaterial = handle.Result; Debug.Log($"Successfully loaded material '{loadedMaterial.name}'"); var renderer = goKey.GetComponent(); if (renderer == null) renderer = goKey.AddComponent(); 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(); //} #endregion } }