첫 번째 프로젝트 실행
현재 레벨을 올바른 위치에 저장하고 플레이 모드와 실행 옵션으로 화면·입력·오브젝트 동작을 처음 검증합니다.
에디터의 패널을 둘러봤다면 이제 만든 프로젝트를 실제로 실행해 볼 차례입니다. 에디터에서 레벨을 플레이하면 화면이 어떻게 보이는지, 입력에 무엇이 반응하는지, 배치한 오브젝트가 어떻게 움직이는지를 바로 확인할 수 있습니다. 그런데 처음 플레이해 보는 사람이 가장 많이 헷갈리는 것이 플레이 중에 바꾼 내용과 저장한 레벨의 관계입니다.
이 글에서는 레벨을 먼저 저장하고, 플레이 모드로 실행한 뒤, 플레이 중의 변경이 왜 저장된 레벨에 남지 않는지 살펴봅니다. 마지막으로 첫 실행에서 자주 만나는 상황과, 저장한 레벨을 다시 열어 확인하는 방법을 정리합니다.
실행하기 전에 레벨 저장하기
프로젝트를 실행하기 전에는 지금 작업 중인 레벨을 저장하는 습관을 들입니다. 에디터가 예기치 않게 종료되면 저장하지 않은 작업은 잃을 수 있기 때문입니다.
툴바 왼쪽 끝의 디스켓 모양 저장 버튼을 누르면 현재 레벨이 저장됩니다. 파일 메뉴의 Save Current Level과 같은 명령이며, 단축키는 Ctrl+S입니다. 아직 한 번도 저장하지 않은 레벨이라면 다른 이름으로 레벨 저장(Save Level As) 창이 나타나므로, 저장할 위치와 레벨 이름을 정한 뒤 저장(Save)을 누릅니다.
이 교재에서는 레벨을 Content/Maps처럼 찾기 쉬운 폴더에 둡니다. 템플릿이 기본으로 쓰는 맵의 경로는 엔진 버전마다 다를 수 있기 때문에, 직접 만든 폴더에 저장해 두면 나중에 찾기 쉽습니다. 이름은 MainLevel이나 MyFirstLevel처럼 무엇인지 알 수 있게 짓습니다. 예를 들어 Content/Maps 폴더에 MyFirstLevel로 저장하면 디스크에는 Content/Maps/MyFirstLevel.umap 파일이 생깁니다.
여기서 저장의 범위를 분명히 해 둡니다. 현재 레벨 저장은 레벨 파일만 저장하므로, 따로 수정한 재질 같은 에셋까지 저장하려면 파일 메뉴의 Save All(Ctrl+Shift+S) 같은 명령을 씁니다. 또 저장은 지금 상태로 파일을 덮어쓸 뿐 이전 버전을 따로 남기지 않습니다. 그래서 이전 상태로 되돌리고 싶을 때를 대비해 백업이나 소스 관리를 쓰며, 이 내용은 에셋의 버전 관리에서 다룹니다.
플레이 모드로 실행하기
에디터에서 프로젝트를 실행하는 가장 기본적인 방법은 툴바 가운데의 초록색 삼각형, 플레이(Play) 버튼입니다. 이렇게 에디터 안에서 게임을 실행하는 것을 플레이 인 에디터(Play In Editor, PIE)라고 합니다. Play 버튼 옆의 메뉴에서 Selected Viewport를 고르고 실행하면 지금 뷰포트 안에서 게임을 미리 보며, Play 버튼은 마지막으로 고른 모드를 기억합니다.
실행하면 뷰포트를 클릭해 게임에 입력 포커스를 줍니다. 그러면 마우스와 키보드 입력이 게임으로 들어가며, 기본 키 설정에서는 Shift+F1을 눌러 마우스 제어를 다시 에디터로 가져올 수 있습니다.
화면에 보이는 장면은 열린 레벨과 템플릿에 따라 다릅니다. 시작용 콘텐츠를 포함해 프로젝트를 만들었더라도, 그 에셋이 지금 레벨에 저절로 배치되는 것은 아닙니다. 조작할 수 있는 것도 지금 플레이어가 조종하는 Pawn과 입력 설정이 제공하는 만큼입니다. Pawn과 그 Pawn을 조종하는 플레이어 컨트롤러의 관계는 플레이어 컨트롤러, 폰 블루프린트에서 다룹니다. WASD 이동과 마우스로 시점을 돌리는 조작은 그 입력을 구현한 템플릿이나 Pawn이 있어야 되고, 어디서 시작하는지는 레벨의 Player Start와 Play 옵션에 따라 정해집니다. 빈 프로젝트에서 별로 할 수 있는 것이 없더라도 당황할 필요는 없습니다. 아직 아무것도 배치하지 않았을 뿐입니다.
플레이를 끝내려면 Esc 키를 누르거나, 플레이 중에 빨간 사각형으로 바뀐 정지(Stop) 버튼을 누릅니다. 그러면 에디터 모드로 돌아옵니다.
플레이 중의 변경은 저장되지 않는다
PIE는 지금 열린 레벨을 그대로 실행하는 것이 아니라, 레벨의 실행 복사본을 따로 만들어 실행합니다. 그래서 플레이 중에 액터가 움직이거나 값이 바뀌어도, 그것은 복사본에서 일어난 일이고 에디터의 원본 레벨은 바뀌지 않습니다.
플레이 중 이동한 액터는 저장 원본과 구분합니다
저장 원본 A→PIE 복사 A→런타임 B→Stop에서 복사 종료라는 상태 변화이고 원본/파일 A가 유지된다.
PIE · RUNTIME COPY · SAVE
플레이 중 이동한 액터는 저장 원본과 구분합니다
레벨에 배치한 액터의 런타임 복사본만 바꾼 경우입니다. PIE의 Stop은 그 변경을 에디터 원본에 자동 반영하는 저장 명령이 아닙니다.
B를 원본에 남기고 싶다면
실행 전에 배치한 액터의 지원되는 속성은 Keep Simulation Changes로 원본에 반영할 수 있습니다. 반영 결과를 확인한 뒤 레벨을 저장합니다.
이 기능은 실행 중 새로 생성한 액터의 영구 저장을 대신하지 않습니다. 수정한 에셋 저장은 Save All 등을 별도로 확인합니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 관계·조건 설명 | 에디터 원본 위치 A를 저장하고 PIE로 복사한다. 실행 복사본을 B로 이동해도 Stop은 복사본을 끝낼 뿐 원본 A와 저장한 A를 덮어쓰지 않는다. |
| 관계·조건 설명 | 에디터 원본 A를 저장하고 PIE로 복사한다. 실행 복사본을 B로 이동해도 Stop은 복사본을 끝낼 뿐 원본 A와 파일 A를 덮어쓰지 않는다. |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 저장 원본 레벨과 파일의 값 A를 기준으로 둔다. |
|
|
| PIE 변경 사본 A를 플레이 중 B로 바꾼다. |
|
|
| Stop 런타임 사본의 수명을 끝낸다. |
|
|
플레이 중 이동한 액터는 저장 원본과 구분합니다
저장 원본 A→PIE 복사 A→런타임 B→Stop에서 복사 종료라는 상태 변화이고 원본/파일 A가 유지된다.
PIE · RUNTIME COPY · SAVE
플레이 중 이동한 액터는 저장 원본과 구분합니다
레벨에 배치한 액터의 런타임 복사본만 바꾼 경우입니다. PIE의 Stop은 그 변경을 에디터 원본에 자동 반영하는 저장 명령이 아닙니다.
B를 원본에 남기고 싶다면
실행 전에 배치한 액터의 지원되는 속성은 Keep Simulation Changes로 원본에 반영할 수 있습니다. 반영 결과를 확인한 뒤 레벨을 저장합니다.
이 기능은 실행 중 새로 생성한 액터의 영구 저장을 대신하지 않습니다. 수정한 에셋 저장은 Save All 등을 별도로 확인합니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 관계·조건 설명 | 에디터 원본 위치 A를 저장하고 PIE로 복사한다. 실행 복사본을 B로 이동해도 Stop은 복사본을 끝낼 뿐 원본 A와 저장한 A를 덮어쓰지 않는다. |
| 관계·조건 설명 | 에디터 원본 A를 저장하고 PIE로 복사한다. 실행 복사본을 B로 이동해도 Stop은 복사본을 끝낼 뿐 원본 A와 파일 A를 덮어쓰지 않는다. |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 저장 원본 레벨과 파일의 값 A를 기준으로 둔다. |
|
|
| PIE 변경 사본 A를 플레이 중 B로 바꾼다. |
|
|
| Stop 런타임 사본의 수명을 끝낸다. |
|
|
위 그림은 이 과정을 세 단계로 보여 줍니다. 처음에는 에디터 원본의 액터가 위치 A에 있고, 레벨을 저장했으므로 파일에도 A가 기록되어 있습니다. PIE를 시작하면 이 레벨을 복사한 실행 복사본이 만들어지며, 복사 직후의 액터도 A에 있지만 원본과는 다른 실행 객체입니다. 게임 중에 이 액터가 B로 움직여도 원본은 계속 A입니다.
마지막으로 Stop을 누르면 실행 복사본이 끝날 뿐, B를 원본에 저장하지는 않습니다. 그래서 Stop 뒤에도 원본의 A와 파일의 A는 그대로 남습니다. 즉 Stop은 플레이를 끝내는 명령이지, 플레이 중의 변경을 에디터 원본에 반영하는 저장 명령이 아닙니다.
그림 아래쪽은 플레이 중에 바뀐 B를 원본에 남기고 싶을 때의 방법을 덧붙입니다. 실행 전에 레벨에 배치해 둔 액터라면, 지원되는 속성에 한해 Keep Simulation Changes로 변경을 원본에 반영할 수 있습니다. 플레이 중에 Shift+F1로 마우스 제어를 되찾고 툴바의 Eject 버튼을 눌러 플레이어 조종에서 빠져나온 뒤, 그 액터를 선택하고 K 키를 누르거나 오른쪽 클릭 메뉴에서 이 명령을 고릅니다. 그다음 Stop 하고 나서 원본에 반영되었는지 확인하고 레벨을 저장합니다. 다만 이 기능은 플레이 중에 새로 생성된 액터를 영구 저장해 주지는 않으며, 수정한 에셋의 저장은 Save All 같은 명령으로 따로 확인합니다.
더 깊이: PIE의 복사본과 디스크에서 불러온 레벨의 차이
액터 수명 주기 문서는 레벨의 액터가 플레이를 시작하는 경로를 나누어 설명합니다. 디스크에서 불러오는 경로에서는 레벨 패키지에 저장된 액터를 읽어 들인 뒤 PostLoad가 호출되고, PIE 경로에서는 에디터에 있는 액터를 새 월드로 복제한 뒤 PostDuplicate가 호출됩니다. 그 뒤로는 두 경로 모두 컴포넌트를 초기화하고 BeginPlay를 호출하는 같은 단계를 거칩니다. 즉 PIE의 실행 복사본은 디스크의 파일이 아니라, 지금 에디터 메모리에 있는 레벨을 바탕으로 만들어집니다.
그래서 아직 저장하지 않은 편집도 PIE에는 그대로 나타납니다. 반면 패키징한 게임은 쿠킹한 레벨을 디스크에서 불러오는 경로를 따르므로, PIE에서 확인한 장면이라도 레벨을 저장하지 않았다면 패키지에는 들어가지 않습니다. PIE에서 잘 되던 것이 패키지에서 다르게 보인다면, 레벨과 에셋이 모두 저장되었는지부터 확인하는 이유가 여기에 있습니다.
다른 플레이 옵션 살펴보기
Play 버튼 옆의 작은 화살표나 점 세 개 메뉴를 누르면 플레이 방식을 고를 수 있습니다. 지금 모든 옵션을 알 필요는 없지만, 어떤 것이 있는지 알아 두면 프로젝트가 커졌을 때 쓸 곳이 보입니다.
| 옵션 | 하는 일 |
|---|---|
| Selected Viewport | 지금 선택한 뷰포트 안에서 게임을 실행합니다. 처음에는 이 옵션이면 충분합니다. |
| New Editor Window (PIE) | 게임을 별도의 새 창으로 실행합니다. 에디터와 분리해 더 넓은 화면으로 시험할 때 씁니다. |
| Standalone Game | 별도 프로세스에서 게임을 실행합니다. 에디터와 분리된 상태로 확인할 수 있지만, 쿠킹하고 패키징한 배포 빌드의 확인을 대신하지는 않습니다. |
| Mobile Preview ES3.1 (PIE) | 모바일 렌더링 경로를 미리 봅니다. 실제 기기의 성능과 입력, 드라이버는 따로 확인해야 합니다. |
| VR Preview | VR 헤드셋이 연결되어 있다면 VR 환경에서 미리 봅니다. |
| Simulate | 플레이어를 생성하지 않고 레벨의 물리와 로직만 실행하며, 에디터 카메라로 장면을 지켜봅니다. |
이 옵션들은 프로젝트가 커지고 여러 환경에서 시험할 필요가 생길 때 쓰게 됩니다. 지금 단계에서는 Selected Viewport로 플레이하면 충분합니다.
첫 실행에서 만날 수 있는 상황
빈 프로젝트에서 플레이했는데 아무것도 보이지 않거나 화면이 검게 나올 수 있습니다. 빈 템플릿의 레벨에는 처음부터 거의 아무것도 없을 수 있기 때문입니다. 그렇다고 검은 화면만 보고 정상인지 비정상인지 단정하지 말고, 지금 열린 레벨이 무엇인지, 조명과 카메라가 있는지, 플레이어의 Pawn과 시작 위치가 어디인지를 차례로 확인합니다.
움직임이 부드럽지 않다면 컴퓨터 사양이나 지금 에디터가 처리하는 작업량 때문에 초당 프레임 수(FPS)가 떨어진 것일 수 있습니다. 특히 프로젝트를 처음 열었을 때는 셰이더 컴파일이 뒤에서 진행되기도 합니다. 언리얼 엔진은 사양을 많이 요구하는 편이라, 원활하게 작업하려면 다른 프로그램을 정리하는 등 시스템 자원을 관리하는 것이 좋으며, 에디터의 부담을 줄이는 방법은 에디터의 성능 최적화에서 다룹니다.
작업 중에 자동 저장 메시지가 나타날 수도 있습니다. 자동 저장(auto save)은 에디터 설정에 따라 일정 시간마다 맵과 콘텐츠의 복구용 사본을 만들어 두는 기능이라, 메시지가 뜨면 잠시 기다리면 됩니다. 다만 복구용 사본은 원래 파일을 저장해 주지 않으므로, 직접 저장하는 일과 소스 관리를 대신하지는 않습니다.
실행하다가 문제를 발견하면 어떤 입력을 했는지, 어디서 시작했는지, 무엇을 기대했는지를 함께 적고, 한 번에 하나씩 고칩니다. 여러 곳을 한꺼번에 바꾸면 무엇이 문제를 해결했는지 알 수 없기 때문입니다.
저장한 레벨을 다시 열어 확인하기
첫 실행을 마쳤다면 저장이 제대로 되었는지 확인합니다. Stop 상태에서 레벨에 배치한 액터 하나를 선택해 이름과 위치를 적고 레벨을 저장합니다. 그다음 다른 레벨을 열었다가, 저장한 Content/Maps/MyFirstLevel을 다시 열어 같은 액터와 값을 찾습니다. 다른 레벨을 열기 전에 저장하지 않은 변경이 남아 있다면 에디터가 저장할지 묻는데, 이때 저장 여부를 직접 결정합니다.
이 확인은 에디터 원본을 저장하고 다시 연 결과를 보는 것이고, 앞에서 본 Keep Simulation Changes로 플레이 중의 변경을 원본에 가져오는 실습과는 별개입니다. 다음 장을 시작하기 전에는 내가 저장한 레벨을 다시 열 수 있는지를 성공 기준으로 삼습니다.
정리
- 실행하기 전에 툴바의 저장 버튼이나 Ctrl+S로 현재 레벨을
Content/Maps같은 찾기 쉬운 폴더에 저장합니다. - 현재 레벨 저장은 레벨 파일만 저장하므로, 수정한 에셋은 Save All 같은 명령으로 따로 저장하며, 저장은 이전 버전을 남기지 않습니다.
- Play 버튼으로 에디터 안에서 실행하는 것을 PIE라고 하며, 뷰포트를 클릭해 입력을 주고 Shift+F1로 마우스를 되찾고 Esc나 Stop으로 끝냅니다.
- 조작할 수 있는 것은 지금의 Pawn과 입력 설정이 제공하는 만큼이고, 시작 위치는 Player Start와 Play 옵션으로 정해집니다.
- PIE는 레벨의 실행 복사본을 실행하므로 플레이 중의 변경은 Stop 뒤에 원본에 남지 않으며, 미리 배치한 액터의 지원되는 속성만 Keep Simulation Changes로 반영할 수 있습니다.
- 자동 저장은 복구용 사본일 뿐이므로 직접 저장과 소스 관리를 대신하지 않습니다.
연습 문제
1. 플레이 중에 옮긴 상자
레벨의 위치 A에 상자를 배치하고 저장했습니다. 플레이하는 동안 상자가 밀려서 위치 B로 갔고, Stop을 눌렀습니다. 에디터에서 상자는 어디에 있을까요? B를 원본에 남기고 싶다면 어떻게 해야 할까요?
해설 보기
상자는 A에 있습니다. 플레이 중에 B로 움직인 것은 PIE가 만든 실행 복사본이고, Stop은 그 복사본을 끝낼 뿐 원본에 저장하지 않기 때문입니다. 저장한 레벨 파일에도 여전히 A가 남아 있습니다.
B를 남기려면 플레이 중에 Shift+F1과 툴바의 Eject로 조종에서 빠져나온 뒤 상자를 선택하고 Keep Simulation Changes를 적용합니다. 이 상자는 실행 전에 배치한 액터이므로 지원되는 속성인 위치를 원본에 반영할 수 있고, Stop 뒤에 원본이 B로 바뀌었는지 확인한 다음 레벨을 저장합니다.
2. 레벨은 저장했는데 남은 표시
레벨을 저장 버튼으로 저장했는데, 따로 편집한 재질 에셋에는 아직 저장되지 않았다는 표시가 남아 있습니다. 프로젝트가 모두 저장된 상태일까요?
해설 보기
아닙니다. 현재 레벨 저장은 레벨 파일만 저장하고, 재질 에셋은 별도의 파일이라 저장 범위에 들어가지 않습니다.
그 재질 에셋을 직접 저장하거나, Save All을 실행해 저장 대상에 그 재질이 들어 있는지 확인해야 합니다.
3. 검은 화면의 원인 찾기
Blank 템플릿으로 만든 프로젝트에서 새 레벨을 만들고 플레이했더니 화면이 검게 나옵니다. 엔진이 고장 났다고 결론 내리기 전에 무엇을 확인해야 할까요?
해설 보기
먼저 지금 열린 레벨이 어떤 레벨인지 확인합니다. 그다음 레벨에 조명이 있는지, 카메라 역할을 하는 Pawn이 어디서 시작하는지, Player Start가 있는지를 봅니다.
빈 레벨에 조명이 없으면 모든 것이 어둡게 보일 수 있고, 시작 위치가 이상하면 아무것도 없는 방향을 보고 있을 수 있습니다. 검은 화면 하나만으로는 정상인지 비정상인지 알 수 없으므로, 레벨과 조명, 카메라, 시작 위치를 차례로 확인합니다.
플레이 옵션과 PIE의 동작은 Epic의 플레이와 시뮬레이트 안내에서 더 자세히 확인할 수 있습니다.
이것으로 1장을 마칩니다. 1장에서는 언리얼 엔진이 어떤 도구인지 살펴보고, 에픽게임즈 런처로 엔진을 설치한 뒤, Blank 템플릿으로 프로젝트를 만들어 에디터의 주요 패널을 익히고, 레벨을 저장하고 플레이 모드로 첫 실행까지 해 봤습니다. 다음 장의 에디터 레이아웃 커스터마이징부터는 레이아웃을 작업에 맞게 바꾸는 데서 시작해, 뷰포트 이동과 오브젝트 조작, 개인 설정, 프로젝트 설정, 에디터 성능 조정까지 에디터 환경을 다룹니다.