UniRx
UniRx에서 First()와 Take(1) 중 어느 것을 써야하는가
2019. 10. 13.개인 프로젝트를 하던 중, 다음과 같은 에러를 만났습니다. InvalidOperationException: sequence is empty System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () (at :0) UniRx.InternalUtil.ExceptionExtensions.Throw (System.Exception exception) (at Assets/Plugins/UniRx/Scripts/InternalUtil/ExceptionExtensions.cs:10) UniRx.Stubs+c.b__3_1 (System.Exception ex) (at Assets/Plugins/UniRx/Scripts/Observer.cs:496) UniRx.Ob..
UniRx에서 여러개의 Observable을 합성하는 방법
2019. 9. 11.비단 UniRx 뿐만 아니라 Rx로 프로그래밍을 하다 보면, 필연적으로 여러 개의 Observable을 동시에 구독하는 것처럼 동작하게 만들어야 할 필요가 있습니다. 예를 들어 비밀번호 확인을 위해 2개의 input필드가 있고, 그 값이 바뀔 때마다 비밀번호가 유효한 규칙으로 작성되었는지 확인하고 싶을 때를 생각해봅시다. 2개의 input 필드를 각각 구독하고 유효한 규칙인지 판단해도 되지만, 2개의 input Observable을 합성하고 그것을 구독하는 방법도 있을 것입니다. 이런 상황처럼 실제로 UniRx를 이용하여 게임 로직을 작성하다 보면, 여러 개의 ReactiveProperty나 Subject를 동시에 구독해서 처리해야 하는 상황들이 많이 나오게 됩니다. 0. Zip 말 그대로 2개의 스트림..
UniRx Operator 관련 정리
2018. 6. 19.Observable Operator Operator When Description Observable.Return 값을 하나만 발행 Observable.Repeat 값을 반복해서 발행 Observable.Range 지정한 범위의 수치들 발행 Observable.Empty 더미 스트림을 만들어 사용하고 싶을 때 OnCompleted를 즉시 발행하게됨 Observable.EveryUpdate Observable.EveryFixedUpdate (etc...) Life cycle에서 Update 부분의 로직을 작성하고 싶을 때 MainThreadDispatcher에서 코루틴이 돌기 때문에 Life cycle관리 주의! - UpdateAsObservable 을 사용 - 마지막에 AddTo(this.gameObje..
UniRx 활용하기(3) - 변수의 변화를 관찰하자
2017. 8. 5.UniRx에서는 여러가지 애플리케이션 패턴 중에서도 MV(R)P 패턴을 권장한다. 다른 서드파티 라이브러리를 통하여 MVVM을 활용하는 방법도 있는 것같지만 일단 공식 Github Readme에서 추천하는 패턴은 MV(R)P이다. 안드로이드나 WPF 개발에 대해서 다루어보았다면 MVP패턴과 다른 패턴들에 대해서 들어보았을 것이다. 기본적인 지식은 Realm의 기술 블로그에서 알아 볼 수 있다.MV(R)P?!위 그림은 공식 Github Readme에 사용된 그림이다. 게임을 UI를 통해 유저와 게임을 이어주고 게임에 관련된 정보들(점수, 적, 아이템 등)을 컨트롤하는 과정이라고 생각하면 View를 통해 Input을 받고, Model 값을 표시해 줄 수 있다. 그 중간에서 Presenter는 View와 Mo..
UniRx 활용하기(2) - A와 B 사이의 일 처리하기
2017. 7. 8.이벤트를 처리하다 보면 A가 일어난 후에 B가 일어나기까지 반복작업해야 하는 일을 만들어야 할 때가 있다. 예를 들어 (예제의 내용이지만) 마우스 드래그를 표현할 때 마우스 버튼이 눌리고 때어질 때까지 마우스의 움직임을 캡처하여 오브젝트의 회전에 반영하는 상황이나 특정 조합키를 입력해서 캐릭터의 춤동작 애니메이션을 재생하고 다른 특별한 입력이 있을 때까지 애니메이션을 반복 재생하는 상황이 있을 수 있겠다. 우선 기존의 프로그래밍 방법을 유니티 초심자의 입장에서 생각해보자. 마우스 드래그를 보게 되면 (1)오브젝트의 Update 문에 마우스의 위치와 오브젝트의 Rotation을 연동시키는 코드를 삽입하고 또, (2)마우스 버튼이 눌렸을 때와 릴리즈될 때를 캐치하여 bool 변수(isDraged 정도)를 통..
UniRx 활용하기(1) - Where과 Select 사용하기
2017. 7. 3.저번 포스팅에서는 UniRx가 모든 것을 스트림으로 보는 프로그래밍 방식이고, 스트림을 어떻게 만들고 사용하는지에 대해서 공부했었다. UniRx는 이렇게 만든 스트림을 여러가지 오퍼레이터를 통해 필터링하여 원하는 데이터들만 가지고 원하는 타이밍에 원하는 작업을 수행할 수 있도록 만들 수 있다. 사실 얼마나 이 필터링 작업을 자유롭게 하는지에따라 UniRx를 다루는 실력이 나누어질거라고 생각한다. (물론 나는 초짜) 이번에는 스트림을 필터하는 친구들 중에서도 가장 기본이되는 Where과 Select에 대해서 알아보도록하자. Where조건에 맞는 메세지만 필터링하는 오퍼레이터 무작정 구독한 스트림에서 오는 모든 메세지를 원하는 것은 아닐 것이다. 만약 0~9까지의 숫자들이 넘어 오는 스트림에서 5 이상의 숫..
UniRx 입문하기 - 기본적인 사용법
2017. 7. 1."아 이런 것이 있구나"하고 접했던 것은 오래되었지만 최근 들어 천천히 공부를 시작한 것이 UniRx이다. 일본인이 만든 Unity용 Reactive 프로그래밍 라이브러리 같은데 Unity는 .NET 버전도 낮고, .NET용 Rx는 무거운 감이 있어서 Unity에서 사용할 수 있게끔 만들었다고 한다. (일본에서 만들어서인지 검색하면 절반은 일본어 자료라 일본어를 읽지 못하는 입장에서는 대략 난감....) Reactive Programming(Rx)이란?이쪽 분야 프로그래밍은 많이 접해본 것이 아니지만, 초심자의 눈으로 보기에는 객체지향(OOP)이 모든 것을 "객체"로 보고 객체를 만들고 이용해서 프로그래밍했다면, Rx는 모든 것을 "스트림"으로 보고 스트림을 만들고 구독해서 데이터가 어떻게 변하고 어떤 ..