[TIL] Unity 통합과 비동기
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!
Observable.EveryUpdate(): 매 프레임 발행하는 전역 스트림. Update() 함수의 리액티브 대응물.Timer/Interval/Debounce 같은 시간 연산자가 내부에서 쓰는 “시계”를 유니티 것으로 교체함. R3.Unity가 시작 시 자동으로 기본값을 등록하므로(UnityTimeProvider.Update / UnityFrameProvider.Update) 아무 설정 없이 유니티 시간 기준으로 동작함.UnityTimeProvider.UpdateIgnoreTimeScale) 등이 필요하면 연산자의 TimeProvider 인자로 골라 끼움. 일시정지 중에도 돌아야 하는 UI 타이머 같은 곳에서 씀.DelayFrame, DebounceFrame, ThrottleFirstFrame처럼 시간 대신 프레임 수로 동작하는 변형이 있음. “다음 프레임에”, “3프레임 모아서” 같은 게임 특유의 요구와 맞음.AddTo(구독 수명 관리), SerializableReactiveProperty(인스펙터에 노출되는 ReactiveProperty), uGUI 확장(아래), Window > Observable Tracker(구독 추적 창).// 매 프레임 입력 검사 - Update() 함수 없이. 전역 스트림이므로 AddTo 필수!
Observable.EveryUpdate()
.Where(_ => Keyboard.current != null && Keyboard.current.spaceKey.wasPressedThisFrame)
.Subscribe(_ => Jump())
.AddTo(this);
Update() 함수와 뭐가 다른가 - 함수 하나에 입력·타이머·상태 검사가 섞이는 대신, 관심사마다 독립된 파이프라인으로 분리되고 각자 수명을 가짐. 다만 매 프레임 폴링 자체가 사라지는 건 아님 - 표현이 정리되는 것임.
onClick.AddListener와 다르게 이벤트가 스트림 된 것
Observable -> await: 한번의 사건 기다리기
// "다음 클릭 한 번"을 await - 컷씬 진행, 튜토리얼 "아무 키나 누르세요"
await m_Button.OnClickAsObservable().FirstAsync(destroyCancellationToken);
// 스트림이 완료될 때까지 대기
await someStream.WaitAsync(ct);
비동기 작업 -> Observable: 단발 작업을 스트림으로
// 비동기 함수 하나를 Observable로 - 결과가 스트림으로 흘러 연산자를 이어 붙일 수 있다
Observable.FromAsync(async ct => await LoadPlayerDataAsync(ct))
.Subscribe(data => Apply(data))
.AddTo(this);
SubscribeAwait - 스트림 처리 자체가 비동기일 때 (SubscribeAwait)
// 평범한 async UniTask 메서드 - 속엔 R3가 없고, R3가 이걸 바깥에서 합성한다
async UniTask LoadAsync(CancellationToken ct)
{
await UniTask.Delay(TimeSpan.FromSeconds(1.5), cancellationToken: ct);
}
m_LoadButton.OnClickAsObservable()
.SubscribeAwait(async (_, ct) =>
{
await LoadAsync(ct); // ct: 구독 해제(오브젝트 파괴) 시 자동 취소
}, AwaitOperation.Drop) // 처리 중 들어온 클릭은 버림 - 연타 방지
.AddTo(this);
이벤트가 오면 어떻게 처리할지 -> AwaitOperation 인자
| AwaitOperation | 처리 중 새 이벤트가 오면 | 용례 |
|---|---|---|
Sequential | 줄 세워 순서대로 처리(기본) | 순서 보장이 필요한 큐 |
Drop | 버림 | 저장/로드 버튼 연타 방지 |
Switch | 진행 중인 걸 취소하고 갈아탐 | 최신 검색어만 유효한 자동완성 |
Parallel | 동시에 처리 | 독립적인 다발 작업 |
XR을 활용한 게임 개발 3기(유니티) 수강생입니다. 곧 수료 하지만 앞으로 이곳에 가끔 저의 개발 경험이 나 지식 기록할까 합니다. 더 나아가 이 사이트가 제 개인위키의 역할을 할 수 있으면 좋겠습니다. 한국 게임 시장을 흔들겠습니다

게임 광고 수익은 단순히 광고를 붙이는 것이 아니라, 여러 광고 네트워크를 경쟁시켜 가장 높은 수익을 만드는 구조입니다.

안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.