이번 프로젝트에서 RTS 스타일의 카메라 제어 시스템을 언리얼 엔진의 블루프린트를 활용해 구현했다. 카메라의 움직임과 사용자 입력에 따른 동작을 자연스럽고 직관적으로 만드는 데 초점을 맞췄으며, 각 기능은 테스트와 피드백을 통해 최적화하려고 노력했다. 아래는 구현한 기능과 개발 과정에서의 주요 기록이다.
1. 기본 구조 설정
- RtsCamera: 카메라를 SpringArm 컴포넌트에 연결해 부드러운 카메라 이동과 회전을 구현했다. SpringArm의 설정을 조정하며 카메라의 거리와 각도를 최적화했다.
- RtsCameraController: Pawn 클래스로 구성해 플레이어의 입력을 처리하도록 설계했다. 초기에는 컨트롤러와 카메라 간의 연결에서 약간의 지연이 발생했으나, Tick 이벤트의 최적화로 문제를 해결했다.
2. 카메라 디버깅 기능
- PrintCameraLocation: 디버깅을 위해 T 키를 눌렀을 때 카메라의 현재 위치를 출력하도록 했다. 초기에는 로그가 화면에 출력되지 않는 문제가 있었으나, Print String 노드의 설정을 수정해 정상 동작을 확인했다.
3. 카메라 줌 기능
- CameraZoom: 마우스 휠 입력에 따라 SpringArm의 길이를 조정해 카메라를 줌인/줌아웃하도록 구현했다. 휠 감도의 밸런스를 맞추는 데 시간이 걸렸지만, 최종적으로 부드러운 줌 경험을 제공할 수 있었다.
- AutoCameraZoomIn/Out: 특정 좌표로 카메라를 이동시킨 뒤 자동으로 줌인/줌아웃하는 기능이다. 좌표 이동과 줌 동작을 동시에 처리하기 위해 Timeline 노드를 활용했다. 초기에는 이동 중 카메라가 부자연스럽게 흔들리는 문제가 있었으나, Lerp를 적용해 부드럽게 전환되도록 수정했다.
- GameOverZoomIn: 게임 오버 시 특정 위치(예: 적 유닛의 좌표)로 카메라를 이동시키고 줌인하는 기능이다. 이벤트 기반으로 작동하도록 설정했으며, 카메라 이동 속도를 조정해 드라마틱한 연출을 강조했다.
4. 카메라 이동 및 회전
- CameraMoveWithKeyboard: WASD 키보드 입력으로 카메라를 이동하도록 했다. 맵 밖으로 벗어나지 않도록 Limitation 변수를 추가해 경계를 설정했다. 경계 체크 로직에서 카메라가 경계에 도달했을 때 부드럽게 멈추도록 Clamp 노드를 활용했다.
- MoveCameraWithMouse: 마우스 커서를 화면 모서리에 위치시키면 해당 방향으로 카메라가 이동하도록 구현했다. 초기에는 마우스 감지 범위가 너무 좁아 불편했으나, 감지 영역을 확장하고 이동 속도를 조정해 자연스러운 조작감을 얻었다.
- RotateCamera: 마우스 오른쪽 버튼을 누른 상태에서 드래그하면 카메라가 회전하고, 버튼을 놓으면 원래 각도로 복귀하도록 했다. 회전이 지나치게 빠르다는 피드백을 받아 감도를 낮추고, Slerp를 적용해 부드러운 회전을 구현했다.
5. 카메라 초기화
- CameraReset: R 키 또는 마우스 가운데 버튼으로 카메라를 초기 위치와 각도로 복원하는 기능이다. 초기에는 리셋 시 카메라가 순간적으로 이동해 어지러움을 유발했으나, 이동 애니메이션을 추가해 부드럽게 전환되도록 했다.
6. 개발 중 주요 이슈와 해결
- 카메라 이동의 부자연스러움: 여러 기능에서 카메라 이동이 부드럽지 않거나 끊기는 문제가 있었다. Timeline과 Lerp 노드를 적극 활용하고, Tick 이벤트의 프레임별 업데이트를 최적화해 대부분 해결했다.
- 입력 충돌: 키보드와 마우스 입력이 동시에 처리될 때 간헐적으로 충돌이 발생했다. 입력 우선순위를 설정하고, 이벤트 기반 처리를 강화해 문제를 최소화했다.
- 성능 최적화: 블루프린트 노드가 많아지면서 성능 저하가 우려되었다. 불필요한 노드를 정리하고, 자주 호출되는 로직은 함수로 모듈화해 가독성과 효율성을 높였다.
'공부 > 언리얼 엔진' 카테고리의 다른 글
ChatGpt에게 언리얼 카메라 개발시키기 (0) | 2023.04.23 |
---|---|
개발일지: 언리얼 엔진의 핵심 개념 정리 - Pawn, Character, Controller, Actor (0) | 2023.03.26 |
개발일지: 언리얼 엔진 튜토리얼 시스템 개발 - 블루프린트, 입력 처리, Enum 활용 (0) | 2023.03.10 |
언리얼 튜토리얼과 UMG 제작 공부 일지 (0) | 2023.02.26 |