SHARE
TWEET

Untitled

a guest Oct 22nd, 2019 65 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top