- 목차
관련 용어
- (Cook) On the fly : 런타임 실행 시 필요한 에셋(맵, 머티리얼, 텍스처, 사운드 등)을 실시간으로 변환(cook)해서 스트리밍해 주는 방식. 다시말해 서버를 두고, 요청이 들어올 때 필요한 에셋만 변환하여 클라이언트(에디터 또는 실행된 게임)로 전송
- 개발 중 멀티 디바이스 테스트 시 유용 (예: 모바일/콘솔에서 실행 시 필요한 리소스만 전송).
- 빠른 반복(iteration) 가능 (전체 패키징 없이 필요한 부분만 즉시 반영).
- 최적화나 안정성은 일반 Cook/패키징보다 떨어질 수 있음.
- 개발/테스트 단계에서 주로 사용.
- By the book : "책에 적힌 대로" 라는 의미대로 엔진이 내부적으로 사용하는 표전적인 쿠킹 절차만 수행.
- 개발/테스트 단계에서 주로 사용.
- 빌드 시간이 오래 걸림
프로젝트 패키지, 프로젝트 런처
- 프로젝트 패키지 : 설정한 플랫폼에 맞는 실제 EXE 파일 생성 (포스트 참조)
- 프로젝트 런처 : "프로젝트 패키지" 보다 기능이 좀 더 많음. 즉, Platform, Configuration, Target 등 여러 설정을 이용하여 빌드/배포가능 (빌드 파이프라인 관리 도구)
옵션 설명
프로젝트 세팅
패키징
- Prerequisites (사전적 의미 : 전제 조건)
- 필수 구성 요소 인스톨러에 포함 : 별다른 서드파티 라이브러리(프로그램)를 추가하지 않았다면, 언리얼 프로그램 실행에는 재배포 패키지만 필요함. 해당 요소를 체크하면 패키징(Shipping)시 재배포 패키지 설치 파일이 포함됨.
Path 값 출력 테스트
개요
에디터에서 실행할 때와 패키지된 실행파일에서 경로 값이 어떻게 반환 되는지 txt파일로 출력한 후 확인
출력 결과 코드
===Gist code start===
===Gist code end===
추가
Shipping mode에서 위 경로에 파일 생성이 되지 않는 경우. 테스트할 게임을 관리자 권한으로 실행해보거나 "FPlatformProcess::UserDir()" 함수를 이용하여 사용자 경로에 파일 생성을 시도한다.
FPlatformProcess::UserDir() => C:\Users\"사용자 이름?"\Documents\
Open Level 버그
개요
Open Level (by name, by reference)가 에디터에서는 잘 동작하는데 shipping에서는
동작하지 않는 현상이 있어 해결하는 과정을 기록해본다. 엔진 버전은 5.3
시도해본 방법
- Map 파일 이동
- Content/Maps 즉, 레퍼런스 경로 /Game/Maps 내부에 맵 파일 이동
- 에셋 매니저에 맵 : 프로젝트 세팅 → 게임 → 에셋 매니저
- 기본적으로 "스캔할 프라이머리 에셋 타입" 부분에 "인덱스 [0]" 부분에 "프라이머리 에셋 타입"에는 Map, "에셋 베이스 클래스" 에는 World가 설정되어 있다.
- "에디터 전용 여부" : 체크 해제
- "디렉터리" 또는 "특정 에셋" 부분 설정
- "규칙" → "쿠킹 규칙" : Always Cook
- 패키징 설정 : 프로젝트 세팅 → 프로젝트 → 패키징
- 모두 쿠킹 활성화
- "프로젝트 콘텐츠 디렉터리의 모든 걸 쿠킹 (아래 맵 목록을 무시)" : 체크 ON
- 패키지 된 빌드에 맵 목록 추가
- "패키지 된 빌드에 포함시킬 맵 목록"
- "+" 버튼을 눌러 인덱스를 추가한 후, 레퍼런스 경로를 입력
- 예시 : "/Game/Maps/LevelName" 또는 "LevelName"
- 쿠킹할 추가 에셋 디렉터리 추가
- "쿠킹할 추가 에셋 디렉터리" 부분에서 "+"을 누르면 인덱스가 추가된다.
- 추가된 인덱스의 "..." 버튼을 누르고 맵이 있는 경로를 선택
- "풀 리빌드" 체크
- 코드 디버깅 ← 위 방법들로도 안되면 사실상 코드 문제임
- 에디터 전용 기능을 사용했는지 체크
- 빌드 때 에디터 기능이 제외되는데, 제외되는 부분이 핵심 부분인지 체크 해봐야됨.
- C++ 생성자 부분 체크
- 에셋을 찾는 함수는 생성자에서는 ConstructHelpers::FObjectFinder 또는 ConstructHelpers::FClassFinder를 사용하고 이외의 영역에서는 LoadObeject를 활용할 것
- 에디터가 아닌 게임 실행 상태에서 디버깅 방법
- VS 같은 IDE에서 Configuration을 DebugGame, Target을 Game으로 맞추어 놓고 디버깅 실행
- "프로젝트 런처"를 이용하여 프로젝트를 실행하며, 이 때 에디터에 나오는 로그를 확인해 보는 방법도 있음.
참고 자료
- 프로젝트 설정의 에셋 매니저 부분 변경
- 패키지 된 빌드에 포함시킬 맵 목록
댓글
댓글 쓰기