private async UniTask WaitForPlayerAction(TutorialActionType actionType)
{
switch (actionType)
{
case TutorialActionType.MOVE:
initialPlayerPosition = playerTransform.position;
await UniTask.WaitUntil(() => PlayerHasMoved());
break;
case TutorialActionType.ATTACK:
tutorialEnemy.EnemyStat.CurHp = 9999999f;
await UniTask.WaitUntil(() => AttackEnemy());
break;
case TutorialActionType.SHIFT:
await UniTask.WaitUntil(() => ChangePosition());
break;
case TutorialActionType.Q:
await UniTask.WaitUntil(() => ChangeHealth());
break;
case TutorialActionType.E:
await UniTask.WaitUntil(() => ChangeAbility());
break;
}
}
튜토리얼에서 사용자의 입력을 기다리는 로직이 필요해서 UniTask의 WaitUntil 함수로 튜토리얼 액션을 취하기 전까지 다음으로 넘어가지 않게 했다.
WaitUntil은 특정 조건이 충족될 때까지 비동기로 대기할 수 있어서, 튜토리얼 흐름 제어에 유용하다고 느꼈다.
지금은 튜토리얼만을 위한 일회성 구조이기 때문에 switch문으로 단순하게 처리했지만, 만약 행동 타입이 더 많아지거나 재사용 가능성이 높아진다면, Dictionary<TutorialActionType, Func>로 리팩토링하는 것도 고려해볼만 할 것 같다.