플래시 세일라이선스 30% 할인, 같은 가격에 더 커진 토큰 팩.라이선스 30% 할인 + 더 커진 토큰 팩종료까지 …가격 보기 → V2의 새로운 기능 보기 · 새로워진 인터페이스, Crew, Blueprint를 C++로 변환, 멀티플레이어 플레이 테스트, 에디터 안에서 업데이트 변경 사항 보기 →
모든 게시물
5분 분량

Unreal Engine 줌: AI로 누르는 동안 줌인되는 카메라 만들기 (그리고 고치기)

Unreal Engine 줌 카메라: Z 키로 시야각을 90에서 50으로 부드럽게 줄이고 조준선을 띄웁니다. 테스트는 통과했지만 실제 게임은 안 됐던 이유도 다룹니다.

Unreal Engine의 줌은 세 가지 작은 아이디어로 이루어집니다. 첫째, 카메라에는 시야각(FOV)이 있으며 숫자가 작을수록 더 가까이 보입니다. 둘째, 키를 누르고 있는 동안 시야각이 줌 값을 향해 움직이고, 키를 놓으면 원래대로 돌아옵니다. 셋째, 조준선이 줌에 맞춰 나타났다 사라집니다. 가장 쉬운 방법은 AI에게 효과 전체를 한 번의 요청으로 맡기는 것입니다.

이 글은 조금 특별합니다. 테스트는 통과했는데 실제 게임에서는 동작하지 않았던 경우를 다루고 있어서 매우 유용하기 때문입니다. 정확한 프롬프트, AI가 테스트한 내용, 실제 플레이에서 아무 일도 일어나지 않았을 때의 상황, 그리고 AI가 원인을 찾아 나간 과정을 확인할 수 있습니다.

완성된 줌이 하는 일

눈 속에 서서 Z를 누르고 있습니다. 카메라가 천천히 줌인되면서 캐릭터가 화면을 가득 채우고, 위쪽에 작은 텍스트 “Zoom”이 나타납니다. 손을 떼면 화면이 부드럽게 다시 멀어집니다.

화면 위쪽에 Zoom 텍스트가 표시된 채 캐릭터를 줌인한 카메라

두 번째 실제 플레이: Z를 누르고 있으면 줌인되고 Zoom 텍스트가 표시됩니다.

프롬프트

아래 내용을 복사해서 줌을 30도로 바꾼 뒤, AI가 무엇을 만드는지 확인해 보세요.

Make a zoom view. Create BP_ZoomView in /Game/Series/EP35_Zoom, an actor that I place once in the level, that listens for the Z key. While Z is held, the player's camera zooms in: the camera field of view eases from its normal value to 50 degrees over 0.25 seconds, and a thin white crosshair made from four small bars with a gap in the middle fades in at the centre of the screen. When Z is released, the field of view eases back to the normal value over 0.25 seconds and the crosshair fades out. The actor must read the camera's normal field of view when the game starts and restore exactly that value. Create the crosshair as a widget called WBP_Crosshair. Show the text Zoom in the top centre below the existing Blizzard box while zoomed. Keep the zoom field of view and the blend time as variables. Place the actor near the player start. Then play test it: record the camera field of view before, hold Z and check it reaches 50, check the crosshair is on screen, release Z and check the field of view returns to the recorded value and the crosshair is gone, and fix anything that does not work.

기본 시야각에 관한 문장을 보세요. 액터가 그 값을 읽어서 정확히 그대로 복원해야 합니다. 얼음 구간과 같은 규칙입니다. 임의로 정한 숫자로 복원하지 말고, 항상 읽어 둔 값을 그대로 되돌리세요.

AI가 줌을 만드는 과정

AI는 먼저 줌 Blueprint와 조준선 위젯, 이렇게 두 에셋을 만들고, 프로젝트에서 위젯과 그래프가 어떻게 구성되어 있는지 읽습니다. 0에서 1까지의 블렌드 값 하나가 모든 것을 구동합니다. 이 값은 Z를 누르고 있는 동안 올라가고, 놓으면 내려갑니다.

AI는 카메라 매니저에 시야각을 설정하는, Blueprint에서 호출할 수 있는 함수가 없다는 점을 확인하고, 플레이어의 카메라 컴포넌트를 직접 제어합니다. 그런 다음 컴파일하고 그래프를 다시 읽어 확인한 뒤 액터를 배치합니다.

블렌드 값 하나로 구동되는 BP_ZoomView 이벤트 그래프

줌 그래프: 블렌드 값 하나가 시야각과 조준선을 구동합니다.

테스트는 통과합니다

액터는 먼저 시작 시야각인 90을 기록했습니다. Z를 누르고 있으면 잠깐 뒤 시야각이 62.6으로 읽히므로, 툭 튀지 않고 부드럽게 변한다는 것을 알 수 있습니다. 그다음 50에 도달합니다. 조준선은 막대 네 개가 모두 보이는 완전한 불투명도가 되고, 텍스트도 표시됩니다. Z를 놓으면 돌아오는 도중 값이 72.9였다가 정확히 90이 됩니다. 조준선은 사라집니다. 일곱 개의 검사가 모두 통과했습니다.

리포트

조준선, 카메라, 폴링, 저장되지 않은 레벨에 대한 메모가 있는 AI 리포트

첫 번째 리포트: 고칠 것은 없었고, 메모에는 한계가 정리되어 있습니다.

리포트는 테스트 후 고칠 것이 없었다고 알려 줍니다. 또한 메인 메뉴가 화면 중앙을 가리고 있어서 AI가 스크린샷으로 네 개의 막대를 확인하지는 못했고, 그 검사는 위젯의 상태를 기준으로 한 것이라고 밝힙니다. 그리고 액터가 폰의 카메라 컴포넌트를 직접 제어하고, 입력 이벤트를 거치지 않고 매 프레임 Z를 읽으며, 저장되지 않은 레벨에만 존재한다는 점도 적혀 있습니다.

실제 게임에서는 아무 일도 일어나지 않았습니다

이어서 실제 플레이입니다. 메인 메뉴에서 Play를 클릭하고 히어로가 나타난 뒤 Z를 눌러도 아무 일도 일어나지 않습니다. 카메라는 움직이지 않고 조준선도 없습니다. 테스트는 통과했지만 실제 게임에서는 동작하지 않았습니다.

그래서 같은 채팅에서 AI에게 보내는 다음 메시지는 정확히 그 내용입니다. 메인 메뉴에서 Play를 클릭하고 히어로가 스폰된 뒤 Z를 눌러도 아무 일도 일어나지 않으니, 이유를 찾아서 고치고 플레이어가 하는 방식대로 다시 테스트해 달라는 것입니다.

AI가 원인을 찾은 과정

AI는 먼저 플레이어가 거치는 경로를 그대로 재현합니다. 메뉴에서 Play를 클릭한 다음 Z를 누르고 있는 것입니다. 액터 자체에는 문제가 없어 보였고, 메뉴도 이상한 동작을 하지 않았습니다. 메뉴는 입력 모드만 전환하고 스스로를 제거할 뿐, 히어로를 다시 스폰하지 않습니다.

하지만 한 가지 실제 약점을 발견합니다. 첫 번째 버전은 시작하고 0.2초 뒤에 히어로의 카메라를 딱 한 번 찾았고, 그 이후로는 다시 찾지 않았습니다. 그 시점에 히어로가 아직 없었거나 나중에 교체되면, 그 세션이 끝날 때까지 줌은 아무 동작도 하지 않습니다. 실제로 관찰된 현상과 일치합니다.

그래서 AI는 액터를 다시 만들었습니다. 이제는 매 프레임마다 히어로의 현재 카메라를 찾습니다. 카메라가 바뀌면 이전 카메라의 시야각을 복원하고, 새 카메라의 기본값을 기록하며, 조준선을 초기화합니다. 그런 다음 플레이어가 하는 방식대로, 먼저 메뉴를 클릭하고 이어서 Z를 누르는 순서로 다시 테스트했습니다.

솔직한 리포트

후속 리포트는 읽어 볼 만합니다. AI는 문제를 재현하지 못했기 때문에 왜 그런 일이 생겼는지 확실하게 말할 수 없고, 고쳐졌다고 장담할 수도 없다고 밝힙니다. 에디터에서는 변경 전에도 후에도 줌이 작동합니다. 그리고 테스트의 한계도 나열합니다. Z 입력을 직접 주입했을 뿐 실제로 키를 누르고 있는 상황은 테스트하지 않았고, 액터가 저장되지 않은 레벨에만 있으므로 다른 맵을 실행하면 아무것도 보이지 않는다는 것입니다. 마지막으로 두 가지를 묻습니다. 어떻게 실행했는지, 그리고 여전히 실패하는지입니다.

변경 후 두 번째 실제 플레이는 잘 동작합니다. Play를 클릭하면 히어로가 나타나고, Z를 누르고 있으면 카메라가 줌인되며 Zoom 텍스트가 표시됩니다. 놓으면 부드럽게 돌아오고, 다시 누르면 다시 동작합니다.

줌의 작동 원리, 쉽게 설명하면

액터는 매 프레임 Z를 누르고 있는지 확인합니다. 누르고 있으면 블렌드 값이 블렌드 시간 동안 1을 향해, 아니면 0을 향해 움직입니다. 이 값 하나가 부드럽게 보간됩니다. 카메라 시야각은 이 블렌드를 사용해 기본값과 줌 값을 섞은 값입니다. 조준선의 불투명도도 같은 블렌드를 사용합니다. 새 버전에서는 액터가 플레이어의 현재 카메라를 한 번이 아니라 매 프레임 찾습니다.

줌 값과 블렌드 시간이 변수이므로, 숫자 두 개만 바꿔서 부드러운 줌이나 스나이퍼 줌을 만들 수 있습니다.

확장 아이디어

  • 마우스 시점 이동 속도를 늦춰서 조준이 정밀하게 느껴지는 줌.
  • 어두운 테두리가 있는 스코프 오버레이.
  • 마우스 오른쪽 버튼으로 하는 줌, 누르고 있는 방식 또는 토글 방식.

프롬프트를 복사해서 줌을 30도로 바꾼 뒤, AI가 무엇을 만드는지 확인해 보세요.

줌 프롬프트를 위한 네 가지 팁

  1. AI에게 원래 값을 읽어 두었다가 복원하도록 요청하세요.
  2. 캐릭터가 바뀔 수 있다면, 카메라를 다시 찾도록 요청하세요.
  3. 플레이어가 플레이하는 방식대로, 메뉴부터 시작해서 테스트하세요.
  4. 실제 플레이에서 실패하면, 확인한 내용을 AI에게 정확하게 알려 주세요.

자주 묻는 질문

Unreal Engine 5에서 줌은 어떻게 만드나요?

키를 누르고 있는 동안 카메라의 시야각을 기본값에서 더 작은 값으로 부드럽게 줄이고, 키를 놓으면 다시 되돌리세요. 기본값은 시작할 때 읽어 두었다가 정확히 그대로 복원하세요.

줌이 AI의 테스트에서는 작동했는데 실제 게임에서는 왜 안 됐나요?

첫 번째 버전은 시작하고 0.2초 뒤에 히어로의 카메라를 딱 한 번 찾았습니다. 그 시점에 히어로가 아직 없었거나 교체되었다면 줌은 아무 동작도 하지 않습니다. AI는 매 프레임 카메라를 찾도록 다시 만들었지만, 문제를 재현하지 못했다고도 밝혔기 때문에 그것이 원인이라고 장담하지는 못했습니다.

실제 플레이에서 실패하면 어떻게 해야 하나요?

같은 채팅에서 확인한 내용을 AI에게 정확하게 알려 주고, 플레이어가 플레이하는 방식대로 메뉴부터 시작해서 테스트해 달라고 요청하세요.

프로젝트에서 직접 사용해 보세요

Ultimate Engine CoPilot으로 무엇을 만들 수 있는지 제품 페이지에서 확인하거나, Fab에서 받아 보세요. AI Blueprint 생성기가 어떻게 작동하는지 확인해 보세요.

이 시리즈의 다른 빌드: Unreal Engine 슬로 모션, Unreal Engine 나침반 바, 그리고 Unreal Engine 원거리 무기.

어떠셨나요?

에디터에서 직접 사용해 보세요
Unreal Engine 5용 도구 1,655개.
플러그인 받기