private async UniTaskVoid GameLoopAsync(CancellationToken token = default) { GameState = GameState.Initialize; GameState = GameState.GameUpdate; var result = await UniTask.WhenAny( _playerProvider.GoalObservable.ToUniTask(cancellationToken: token), _playerProvider.GameOverObservable.ToUniTask(cancellationToken: token), _playerProvider.ObserveEveryValueChanged(x => x.PlayerHealth.HitPoint) .Where(x => x < 0f || Mathf.Approximately(x, 0f)) .FirstOrDefault() .ToUniTask(cancellationToken: token) ); IsCleared = result.winArgumentIndex == 0; if (!IsCleared) { SceneLoader.LoadScene("Title", container => { }); } GameState = GameState.Result; }