Guest User

Untitled

a guest
Oct 22nd, 2019
78
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System.Collections;
  2. using UniRx;
  3. using UnityEngine;
  4.  
  5. public class ConvertFromCoroutine : MonoBehaviour
  6. {
  7. public bool IsPaused;
  8.  
  9. void Start()
  10. {
  11. Observable.FromCoroutine<long>(observer => CountCoroutine(observer)) //IObserver<T> 를 인자로 넘겨준다
  12. .Subscribe(x => Debug.Log(x))
  13. .AddTo(gameObject);
  14. }
  15.  
  16. //IsPaused == false 일때만 카운트하는 코루틴
  17. IEnumerator CountCoroutine(IObserver<long> observer)
  18. {
  19. long current = 0;
  20. float deltaTime = 0;
  21.  
  22. //while(true) 를 사용해도 Dispose 로 코루틴을 직접 중지 시킬 수 있다.
  23. while (true)
  24. {
  25. if (!IsPaused)
  26. {
  27. deltaTime += Time.deltaTime;
  28. if (deltaTime >= 1.0f) //누적된 deltaTime 이 1초를 넘으면 정수 부분을 통지
  29. {
  30. var integerPart = (int)Mathf.Floor(deltaTime);
  31. current += integerPart;
  32. deltaTime -= integerPart;
  33.  
  34. observer.OnNext(current); //코루틴 내에서 직접 IObserver.OnNext 를 발행하여 Subscribe 에 통지해 준다
  35. }
  36. }
  37. yield return null;
  38. }
  39. }
  40. }
RAW Paste Data