public static void LoadScene(IKeyEvaluator scene, Action callBack = null)
 {
     Addressables.LoadSceneAsync(scene).Completed += (loadComplete) =>
     {
         callBack?.Invoke();
     };
 }
 private static void OpenAddressableMenu <T>(IKeyEvaluator menuReference) where T : IUserInterface
 {
     AssetReferenceLoader.LoadAssetReferenceAsynchronously <GameObject>(menuReference, (returnVariable) =>
     {
         var menu = Instantiate(returnVariable).GetComponent <T>();
         AssetReferenceLoader.DestroyOrUnload(returnVariable);
         menu.Enable();
     });
 }
    public static void LoadAssetReferenceAsynchronously <T>(IKeyEvaluator assetReference, Action <T> callBack)
    {
        //if (!assetReference.RuntimeKeyIsValid()) return; //TODO

        var operationHandler = Addressables.LoadAssetAsync <T>(assetReference);

        operationHandler.Completed += (operation) =>
        {
            callBack(operation.Result);
            Addressables.Release(operationHandler);
        };
    }