반응형
1. 구조적 역할 분담
CameraComponent (Character에 부착)
- 용도: 카메라의 '시점'과 '기초 데이터'를 제공합니다.
- 역할: 캐릭터의 머리 위나 어깨 뒤 등, 카메라가 물리적으로 어디에 위치해야 하는지(Transform), 시야각(FOV)은 얼마인지에 대한 정보를 가지고 있습니다.
- 특징: 캐릭터(Pawn)에 종속되어 있으므로, 캐릭터가 죽거나 바뀌면 해당 컴포넌트도 사라집니다.
PlayerCameraManager (PlayerController가 소유)
- 용도: 최종적인 '카메라 뷰'를 결정하고 렌더링하는 최종 의사결정자입니다.
- 역할: CameraComponent로부터 받은 위치 정보를 바탕으로 포스트 프로세스 효과, 카메라 셰이크(Shake), 블렌딩(보간), 시야 제한 등을 최종 계산합니다.
- 특징: 플레이어 컨트롤러에 붙어 있기 때문에 캐릭터가 사망하여 리스폰되는 과정에서도 카메라는 끊기지 않고 부드럽게 유지될 수 있습니다.
2. 왜 이렇게 분리해서 사용하나요?
① 관전 및 캐릭터 전환의 유연성
Lyra처럼 멀티플레이어 환경에서는 캐릭터가 죽고 다른 캐릭터로 빙의(Possess)하는 일이 빈번합니다.
- 만약 CameraComponent만 사용한다면, 캐릭터가 파괴될 때 카메라도 즉시 사라져 화면이 툭 끊기게 됩니다.
- CameraManager가 중심을 잡고 있으면, **A 캐릭터의 카메라 위치에서 B 캐릭터의 카메라 위치로 부드럽게 전환(Blending)**하는 로직을 구현하기가 매우 쉽습니다.
② 카메라 로직의 중앙 집중화
게임 중에 상점 창을 열거나 인벤토리를 열 때, 카메라가 캐릭터를 바라보는 것이 아니라 특정 UI 배경을 비춰야 할 때가 있습니다. 이때 캐릭터에 붙은 컴포넌트를 수정하는 것이 아니라, CameraManager에서 "지금은 이 뷰 타겟을 봐라"라고 명령만 내리면 됩니다.
③ 복합적인 카메라 효과 처리
CameraManager는 여러 소스에서 오는 데이터를 합칩니다.
- 기본 위치: CameraComponent
- 추가 효과: 카메라 셰이크(반동), 피격 애니메이션, 시야각 변화(줌)
- 이 모든 것이 섞여서 최종 화면이 나오는데, 이 "섞는 작업"을 담당하는 전용 처리 장치가 바로 CameraManager입니다.
3. 요약 및 흐름
이미지에서 언급된 "CameraComponent는 직접 Update를 호출하기보다 CameraManager에 의해 업데이트가 진행된다"는 점이 핵심입니다.
| 구분 | CameraComponent (Pawn) | PlayerCameraManager (PC) |
| 성격 | 데이터 제공자 (Anchor) | 최종 처리기 (Processor) |
| 위치 정보 | 캐릭터 기준 상대적 위치 | 월드 기준 최종 렌더링 위치 |
| 주요 기능 | FOV, 가이드 라인 제공 | 블렌딩, 셰이크, 포스트 프로세싱 적용 |
결론적으로:
Lyra는 "카메라가 단순히 캐릭터를 따라다니는 눈이 아니라, 게임 상태에 따라 언제든 변할 수 있는 독립적인 시스템"으로 설계했기 때문에 이 구조를 채택하고 있습니다.
이 구조에 대해 더 궁금하시거나, Lyra의 CameraMode 시스템(데이터 에셋 기반)이 어떻게 연동되는지 알고 싶으신가요?
반응형
'게임 개발 > Unreal Engine' 카테고리의 다른 글
| [UE] CastChecked (0) | 2024.01.30 |
|---|---|
| [UE] 언리얼 엔진 AsyncTask 사용 (0) | 2024.01.24 |
| [UE] BindWidget으로 C++와 UMG 연결 (0) | 2024.01.23 |
| [UE] Unreal Engine UObject에서 Tick함수 사용하는 법 (1) | 2023.11.18 |
| [UE5] Game Ability System 상세 로그 보기 (0) | 2023.09.15 |