/// <summary>
 /// Release an instantiated object.
 /// </summary>
 /// <param name="obj">The object to release.</param>
 public void ReleaseInstance(GameObject obj)
 {
     Addressables.ReleaseInstance(obj);
 }
 /// <summary>
 /// Instantiate the referenced asset as type TObject.
 /// </summary>
 /// <typeparam name="TObject">The object type.</typeparam>
 /// <param name="parent">The parent of the instantiated object.</param>
 /// <param name="instantiateInWorldSpace">Option to retain world space when instantiated with a parent.</param>
 /// <returns></returns>
 public AsyncOperationHandle <GameObject> Instantiate(Transform parent = null, bool instantiateInWorldSpace = false)
 {
     return(Addressables.Instantiate(RuntimeKey, parent, instantiateInWorldSpace, true));
 }
 /// <summary>
 /// Unloads the reference as a scene.
 /// </summary>
 /// <returns>The operation handle for the scene load.</returns>
 public virtual AsyncOperationHandle <SceneInstance> UnLoadScene()
 {
     return(Addressables.UnloadSceneAsync(m_Operation, true));
 }
 /// <summary>
 /// Instantiate the referenced asset as type TObject.
 /// </summary>
 /// <param name="position">Position of the instantiated object.</param>
 /// <param name="rotation">Rotation of the instantiated object.</param>
 /// <param name="parent">The parent of the instantiated object.</param>
 /// <returns></returns>
 public AsyncOperationHandle <GameObject> Instantiate(Vector3 position, Quaternion rotation, Transform parent = null)
 {
     return(Addressables.Instantiate(RuntimeKey, position, rotation, parent, true));
 }
 static AsyncOperationHandle <T> CreateFailedOperation <T>()
 {
     //this needs to be set in order for ResourceManager.ExceptionHandler to get hooked up to AddressablesImpl.LogException.
     Addressables.InitializeAsync();
     return(Addressables.ResourceManager.CreateCompletedOperation(default(T), new Exception("Attempting to load an asset reference that has no asset assigned to it.").Message));
 }