UniRx의 간단한 샘플 7(완료 알림)
이전(가입 중지)
후(Observable W.Get 다운로드)
완료 알림(On Commpleted)
이번에는 기능이나 콘셉트를 소개합니다.
Rx에는 값이 밀리지 않음을 나타내는 On Commpleted 기능이 있습니다.
예를 들어First() 방법은 전형적인 것으로 한 번의 수치가 흐르더라도 다시 수치를 누르지 않는다.
만약 이미 이 가격으로 할 수 없는 상태에 이르렀다면, 나는 너에게 통지할 것이다.(On Commpleted라고 함)
왜 이런 게 있었는지, 그건 이 알림을 활용하는 방법 같은 게 있어서 그런 건 차치하고, 이번에는 Take를 사용해 On Compuleted 액션을 시도해보겠습니다.
미리 준비하다
평소처럼 On Commpleted라는 Game Object에는 On Commpleted Sample라는 스크립트가 붙어 있습니다.
100 프레임 후 색상 변경
이번에는 100프레임 사이를 계속 오른쪽으로 이동하다가 마지막에 색이 파랗게 변해 멈추는 게임오브젝트를 만들었다.
코드 여기 있어요.
OCompletedSampleusing UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class OnCompletedSample : Base
{
// Use this for initialization
void Start () {
gameObject.transform.position = new Vector2(0, 1f);
//100Frameだけ右に行くそれが終わったらもうプッシュされる値がないのでOnCompleteに行って青くなる
this.UpdateAsObservable()
.Take(100).Subscribe(
_ => { Move(0.01f, 0); }, //プッシュされた時は右へ移動
//全て終わったら色を青に
() => { GetComponent<SpriteRenderer>().color = Color.blue; });
}
}
Take(100) 중 첫 번째 100번은 오른쪽으로 이동UniRx용 단순 샘플 3(First 및 Take)하는 것과 다름없다.
변경된 것은 서브스크리브에 두 번째 매개변수를 추가한 것입니다.사실 Subscribe에는 중량 초과 짐이 몇 개 있다.그 중 하나 이하의 과부하를 사용합니다.
Subscribe(Action onNext, Action onCompleted)
온넥스트는 지금까지 서로에게 바라는 처리 부분이라 문제가 없다.
이번 주인공은 두 번째 파라미터의 onCommpleted입니다.
만약 이 값이 오지 않을 것이라고 통지한다면 실행해라.
(내부적으로는 이 onCommpleted의 호출이야말로 알림 자체를 완성하는 것이다.)
Take(100) 릴리즈 완료 알림(On Commpleted)은 값을 100번 누르면 더 이상 값을 누르지 않기 때문입니다.
그 완료 통지를 받은 후 이번 스프릿 렌더의 색깔은 파란색이었다.
(참고로 100Frame 이후에만 파란색으로 변하고 싶다면 Observable.Timer를 추천합니다.)
실행 결과
이로써 100Frame 이후 파랗게 변한 게임Object가 완성됐다.
통지가 오지 않는 방법을 완성하다
통지를 완성하지 않는 방법도 있다.
예컨대this.UpdateAs Observable이 대표적입니다.
게임오브젝트가 살아있을 때 업데이트가 발생하기 때문에 원칙적으로 끝나지 않는다.
스킵도 그렇고어느 시점부터 하지 않기 때문에 끝나지 않았다.
하지만 이 녀석들의 앞뒤에 완성 알림이 오는 방법을 끼워 넣으면 온 컴플릿을 발매할 수 있다.
이번 테이크는 이렇습니다. 100번 이후에는 아무것도 미루지 않기 때문에 종료를 알릴 수 있습니다.
마지막 Take Unitil Destroy 역시 On Compuleted 릴리즈로 삭제되었습니다.
다른 On Commpleted의 경우
퍼스트가 온넥스트로 한 번도 불리지 않은 상태에서 온컴퍼니를 발매하면 예외가 된다.
FirstOrdefault 같은 경우 기본값으로 onCompuleted를 한 번만 발행합니다.
이 근처는 IEnumarable의 동작과 같다.
Single도 마찬가지입니다. Single은 onCommpleted가 발행되기 전에 수치를 캐시합니다.
온넥스트가 다시 발매된다면 예외로 할 수 없기 때문이다.
그런데 무슨 용도로...?
Reference
이 문제에 관하여(UniRx의 간단한 샘플 7(완료 알림)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Marimoiro/items/31cad556e1675c557be3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class OnCompletedSample : Base
{
// Use this for initialization
void Start () {
gameObject.transform.position = new Vector2(0, 1f);
//100Frameだけ右に行くそれが終わったらもうプッシュされる値がないのでOnCompleteに行って青くなる
this.UpdateAsObservable()
.Take(100).Subscribe(
_ => { Move(0.01f, 0); }, //プッシュされた時は右へ移動
//全て終わったら色を青に
() => { GetComponent<SpriteRenderer>().color = Color.blue; });
}
}
Reference
이 문제에 관하여(UniRx의 간단한 샘플 7(완료 알림)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Marimoiro/items/31cad556e1675c557be3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)