[Error] [UniRx] bool 변수 여러개 구독하기 및 구조 재정립
태그: Game Engine, UI, UniRx, Unity
카테고리: UnityDocs
문제점
먼저 기반 설명과 잘못 생각한 구조를 서술하겠음.
회원가입 시스템 작업을 하고 있는데,
가입 단계별로 뜨는 팝업에서 요구하는 각 유저 정보를 입력하고,
유저 정보를 입력하면 다음 버튼 이 활성화 되어 누르면 다음 단계 팝업이 뜨는 형태이다.
여기서 나는 UniRx를 사용하여
- 각 항목별
InputField의onValueChanged이벤트를 구독하여
InputField변수들의 값이 모두IsNullOrEmpty이 아니고, - 메일 인증 확인이 되고(
isEmailCheck), 비밀번호를 2번 정확히 썼다면(isPasswordCheck)
다음 버튼이 활성화 되도록 작업했는데…
했다고 생각했는데…
다음이 문제의 코드이다.
1
2
3
4
5
6
7
Observable.CombineLatest(inputFields.Select(field => field.onValueChanged.AsObservable()))
.Subscribe(values =>
{
nextButton.interactable = values.All(value => !string.IsNullOrEmpty(value)) &&
isEmailCheck && isPasswordCheck;
})
.AddTo(this);
이 코드의 최대 문제점은
InputField 들의 값들이 변하는 이벤트(onValueChanged)가 생겨야만 버튼이 활성화 된다는 것이다. ㅎㅎ…
비밀번호를 먼저 올바르게 다 작성하고, 이메일 인증을 이후에 한다면
인증 확인(isEmailCheck) 절차는 버튼 클릭 이벤트로 완료되도록 구현했기 때문에
최종적으로 다음 버튼이 활성화 되지 않는다.
해결 방법
해결 방법은 간단하다.
isEmailCheck 변수와 isPasswordCheck 변수를 BoolReactiveProperty 타입으로 바꾸고
저 변수들을 구독하여 2개 다 true가 되는 시점에 다음 버튼 을 활성화 시켜 주면 된다.
1
2
3
isEmailCheck.CombineLatest(isPasswordCheck, (x, y) => x && y)
.Subscribe(allTrue => nextButton.interactable = allTrue)
.AddTo(this);
댓글남기기