Unity

[라이브러리] R3 Reactive Extensions (Rx) - 1

CCS_Cheese 2026. 4. 23. 14:01

오늘 다루어볼 주제는. NET용 차세대 Reactive Extensions 라이브러리인 R3에 대해 다루어 보겠습니다. 해당 게시글에서는 기본 시작 가이드 및 R3의 기본 설명에 대해서 다루겠습니다.

다루게 된 계기

R3를 다루게 된 계기로는 최근 많은 프로젝트를 진행하며, 소프트웨어 아키텍처 설계의 필요성을 느끼며, 관심이 많아져, MVVM, MVP, MVC 등 다양한 설계에 대해 알아보던 중 R3가 구현에 많은 도움을 줄 수 있을 것 같아 해당 주제를 다루게 되었습니다. 

 

 

R3란?

'UniRx'의 개발자 neuecc가 현대적인 C# 환경 (C# 12+)에 최적화하여 새롭게 설계했으며, 기존 Rx의 성능 문제와 구조적 한계를 극복하는 것을 목표로 개발한 라이브러리 입니다. 관련 Github는 아래 링크를 참고하겠습니다.

라이브러리 GitHub 주소 - Cysharp_R3

 

GitHub - Cysharp/R3: The new future of dotnet/reactive and UniRx.

The new future of dotnet/reactive and UniRx. Contribute to Cysharp/R3 development by creating an account on GitHub.

github.com

 

Unity 개발자를 위한 가이드

  • 프레임 기반 연산 (FrameProvider)
게임 엔진 특화 기능으로, 시간 대신 프레임을 기준으로 작동하는 연산자들을 제공합니다.
Ex) 'IntervalFrame', 'DelayFrame', 'DebounceFrame', 'EveryUpdate()',
'EveryValueChanged()' 등을 통해 프레임 단위의 로직 작성이 매우 간결함.
  • Unity Life Cycle 및 타임 스케일 지원
'UnityTimeProvider'를 통해 'FixedUpdate', 'PostLateUpdate' 등 유니티의 특정 업데이트루프를 지정.
'Time.timeScale'의 영향을 받거나 무시하는 설정을 쉽게 적용할 수있음 (유니티 타임 스케일 지원)
  • 이벤트 연동 및 수명 관리 
AsObservable : UnityEvent를 Observable로 변환할 때 'CancellationToken'을  함께 전달할 수있음.
수명관리 및 자동 해제 : 'this.destroyCancellationToken'을 사용하면 GameObject가 파괴될 때 구독이 안전하게 해제됨.
R3.Triggers : 물리 충돌 (OnCollisionEnter) 등의 메시지를 바로 Observable로 처리할 수 있음.
위 가이드 내용별로 별도의 샘플 혹은 관련내용을 순서대로 다룰 예정이며, 해당 게시글에서는 위 내용을 다룰 수 있다는 내용을 설명하고, 아래에서는 설정 방법에 대하여 다루겠습니다.

Unity 설치 및 설정 방법

  • NeGet 설치 (Core)

PackageManager - Install package from git URL
https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity
Nuget - Manage NuGet Packages : R3검색 및 Install

  • Unity 패키지 설치

Package Manager - Install package from git URL

NuGet을 통해서도 설치가 가능하고, PackageManager에 Github 주소를 직접 입력해서도 설치가 가능합니다.
NuGet은 R3 뿐만 아니라, 다른 패키지를 검색을 통해 설치할 수 있는 기능을 제공하고 있습니다. 

 

다음 게시글에서는 프레임 기반 연산 (FrameProvider)에 대해 직접 작성해 보면서 다루어 보겠습니다.