Unity

[Unity] UniTask + Action + Lambda 고찰

성엽이 2023. 5. 16. 11:38
  public static class UniTaskHelper {
    public static Action<T> Action<T>(Func<T, UniTaskVoid> asyncAction) {
      return (t1) => asyncAction(t1).Forget();
    }
  }

    Action<GameScene> _fooAction;

    void Awake() {
      _fooAction = UniTaskHelper.Action<GameScene>(OnSceneReady);
    }

    void OnEnable() {
      _sceneReadyEvent += _fooAction;
    }

    void OnDisable() {
      _sceneReadyEvent -= _fooAction;
    }
    
    async UniTaskVoid OnSceneReady(GameScene scene) {
      _logger.Info("Scene ready: " + scene);
      // await something
      await UniTask.Yield();
    }

 

https://github.com/Cysharp/UniTask/issues/329

 

How do you pass parameter types to a "UniTask.Action"? · Issue #329 · Cysharp/UniTask

How do you pass parameter types to a "UniTask.Action"? void OnEnable() { _loadSceneEvent.Register(UniTask.Action(OnLoadScene)); // this doesnt work, need to use regular "async void" callback or del...

github.com

 

UniTask 에서 지원하지않는 UniTask.Action<T> 사용해보기.

event Action<T> Callback 에 Lambda 를 사용해서 Parameter 를 전달받기 위해서 Func 를 이용하면 가능.