RxModel을 가시화
게임 개발에서 데이터 구조를 시각적으로 검토하는 것은 디버깅과 밸런싱 측면에서 매우 중요하다. 특히 복잡한 반응형(Reactive) 모델을 사용하는 경우, 내부 값의 실시간 변화를 추적할 수 있는 에디터 도구는 개발 효율성과 안정성을 크게 향상시킨다. 오늘은 Unity 에디터에서 RxModel의 내부 값을 효율적으로 시각화하는 방법에 대해 학습하였다.
RxModel과 인스펙터 가시화의 과제
RxModel은 기본적으로 런타임 중심 구조이며, RxVar, RxFlag, RxEvent 등의 필드를 포함한다. 그러나 이들은 일반 Unity 인스펙터에서 바로 노출되지 않으며, 특히 제네릭 기반 구조는 리플렉션을 통해서도 필드 정보가 정확히 드러나지 않는 경우가 많다. 이러한 점에서, Unity 에디터 상에서 RxModel을 디버깅하는 데에는 다음과 같은 문제점이 있다:
- 제네릭 필드의 리플렉션 제한: RxVar<T>와 같은 제네릭 타입은 런타임 리플렉션에서 자동으로 필드명이 노출되지 않거나, 인스턴스 내부의 값 접근이 어렵다.
- 상속 구조에서의 정보 은닉: 베이스 클래스에 정의된 필드는 Unity 인스펙터 상에서 노출되지 않을 수 있다.
- 런타임 전용 구조에 의존하는 문제: UnityEditor 전용 디버깅 기능을 위해서는 런타임 외 접근 지점이 필요하다.
IRxInspectable 인터페이스의 도입
이 문제를 해결하기 위해 새로운 인터페이스 IRxInspectable을 정의하였다. 이 인터페이스는 모델이 내부 필드 정보를 외부에 제공할 수 있도록 하는 역할을 하며, 주로 디버깅 또는 에디터 가시화 목적에 한정된다. 핵심 설계 방향은 다음과 같다:
- 런타임 리플렉션 최소화: 리플렉션 없이 필드 정보를 수집하기 위해 IRxInspectable.GetInspectableFields() 메서드를 정의
- 에디터 전용 구현 유도: IRxInspectable은 UnityEditor 전용 코드에서만 사용되며, 빌드 환경에서는 참조되지 않도록 분리 구조를 유지
- RxBase 기반 구조 연동: RxStateFlag와 같이 RxBase를 상속받는 객체는 기본적으로 이 인터페이스를 통해 값의 노출 여부를 선택할 수 있다.
이 방식은 일종의 수동 리플렉션 시스템이며, 성능과 안전성을 동시에 고려한 구조라고 볼 수 있다.
디버거와의 통합: EntityModelDebuggerEditor
에디터 상에서 시각화된 정보를 표현하는 부분은 EntityModelDebuggerEditor라는 커스텀 에디터 클래스에서 담당하게 된다. 이 클래스는 다음과 같은 기능을 갖는다:
- 대상 RxModel이 IRxInspectable을 구현하고 있는 경우, 해당 모델에서 제공하는 모든 필드 정보를 조회
- 각 필드를 Unity 인스펙터 상에서 Foldout 형태로 출력하며, 실시간 변경값을 시각적으로 확인 가능
- 클래스 상속 정보, 필드의 접근 권한, 구독 구조까지 시각적으로 표현할 수 있는 확장 계획을 수립
한 가지 주의할 점은 Unity 인스펙터의 기본 구조상, 클래스 명 옆의 상속 구조는 숨길 수 없으며, 이러한 메타정보 노출은 제한이 있다. 또한, EntityModelDebuggerEditor 자체도 필요에 따라 UnityEditor 조건부 컴파일로 감싸야 하며, 런타임과 에디터의 책임 구분을 명확히 할 필요가 있다.
마무리하며
오늘의 학습을 통해, 런타임 중심으로 설계된 RxModel을 에디터 상에서도 명확하게 추적할 수 있는 방법론을 정립하였다. 핵심은 데이터 소유 구조의 시각화, 리플렉션 대체 인터페이스 설계, 그리고 에디터 전용 클래스와의 연동이다. 앞으로는 RxContextBehaviour 또는 Manager 단위의 디버깅에도 이 구조를 확장 적용하여, 프레임워크 전반의 가시성과 유지보수성을 개선할 계획이다.
'내일배움캠프' 카테고리의 다른 글
| 트러블 슈팅 상속으로 인한 프로시저 꼬임 (0) | 2025.02.20 |
|---|---|
| TIL 240212 매니저 클래스의 싱글톤 패턴 개선 (0) | 2025.02.12 |
| TextRPG의 필수기능 기본 구조 및 분석 (0) | 2025.02.06 |
| TIL 0205 TextRPG 의존성 주입 (0) | 2025.02.05 |
| 틱택토 게임 (1) | 2025.01.25 |