WuhuIslandTesting/Library/PackageCache/com.unity.addressables@1.21.12/Tests/Editor/DocExampleCode/ScriptReference/UsingLoadAssetAsync.cs

120 lines
4.1 KiB
C#
Raw Normal View History

2025-01-07 02:06:59 +01:00
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<TObject> LoadAssetAsync<TObject>(IResourceLocation location)
#endregion
{
return default;
}
#region DECLARATION_2
public static AsyncOperationHandle<TObject> LoadAssetAsync<TObject>(object key)
#endregion
{
return default;
}
#region SAMPLE_LOCATION
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();
// }
#endregion
#region SAMPLE_KEY
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();
//}
#endregion
}
}