BuildCookRun 과정 (코드)

 // -------------------- BuildCookRun Command --------------------   
    ExecuteBuild();                         // BuildCookRun.Automation.cs
      DoBuildCookRun();                     // BuildCookRun.Automation.cs
        // -------------------- Build --------------------
        Build();                            // BuildProjectCommand.Automation.cs 
          Build();                          // UE4Build.cs
            BuildWithUBT();                 // UE4Build.cs
              RunUBT();                     // UBTUtils.cs
                Run();                      // ProcessUtils.cs
        // -------------------- Cook --------------------
        Cook();                             // CookCommand.Automation.cs
          CookCommandlet();                 // CommandletUtils.cs
            Main();                         // CookCommandlet.cpp
              CookByTheBook();              // CookCommandlet.cpp
        // -------------------- Stage --------------------
        CopyBuildToStagingDirectory();      // CopyBuildToStagingDirectory.Automation.cs
          ApplyStagingManifest()            // CopyBuildToStagingDirectory.Automation.cs
            CreatePakUsingStagingManifest() // CopyBuildToStagingDirectory.Automation.cs
            CreatePaksUsingChunkManifests() // CopyBuildToStagingDirectory.Automation.cs
              CreatePaks()                  // CopyBuildToStagingDirectory.Automation.cs
                RunUnrealPakInParallel()    // CopyBuildToStagingDirectory.Automation.cs
                  ExecuteUnrealPak()        // PakFileUtilities.cpp
        // -------------------- Package --------------------
        Package();                          // PackageCommand.Automation.cs
          Package();                        // [PlatformName]Platform.Automation.cs
        // -------------------- Archive --------------------
        Archive();                          // ArchiveCommand.Automation.cs
          CreateDeploymentContext();        // CopyBuildToStagingDirectory.Automation.cs
          ApplyArchiveManifest();           // ArchiveCommand.Automation.cs
          ProcessArchivedProject();         // [PlatformName]Platform.Automation.cs
        // -------------------- Deploy --------------------
        Deploy();                           // DeployCommand.Automation.cs
          CreateDeploymentContext();        // CopyBuildToStagingDirectory.Automation.cs
          PushDir();                        // CopyBuildToStagingDirectory.Automation.cs
          Run();                            // ProcessUtils.cs
        // -------------------- Run --------------------
        Run();                              // RunProjectCommand.Automation.cs
          RunInternal();                    // RunProjectCommand.Automation.cs

 

Perforce 관련

p4 -p ${P4_PORT} -u ${P4_USER} -P ${P4_PASSWORD} -c ${P4_CLIENT} -u ${P4_USER}

 

p4 뒤에 -p ~ -u 붙이는 이유는 해당 Perforce 서버 컴퓨터에서 P4 명령을 실행하기 위해 붙입니다

만약 붙이지 않으면 로컬에서 실행됩니다.

 

ex)

p4 -p ${P4_PORT} -u ${P4_USER} -P ${P4_PASSWORD} -c ${P4_CLIENT} -u ${P4_USER} | p4 set -s P4CHARSET=utf8
p4 -p ${P4_PORT} -u ${P4_USER} -P ${P4_PASSWORD} -c ${P4_CLIENT} -u ${P4_USER} submit -d "description"

 

p4 set -s P4CHARSET=utf8

언어 설정 (P4CHARSET = 유니코드 파일의 코드 변환에 사용되는 문자)

이 명령어를 실행하지 않으면 파일 타입이 다르게 올라가거나 한글이 깨질 수 있습니다.

 

 

RunUAT 매개변수

https://github.com/botman99/ue4-unreal-automation-tool#What-Happens-When-A-Game-Is-Packaged 모든 인자가 있진 않지만, 해당 깃허브에 자세하게 설명되어 있음

 

https://docs.unrealengine.com/5.0/ue/build-operations-cooking-packaging-deploying-and-running-projects-in-unreal-engine/

Turnkey -command=VerifySdk -UpdateIfNeeded -platform=%TargetPlatform% -project=%ProjectFullPath%

Turnkey

언리얼 엔진 5 에 도입된 시스템 으로, SDK 설치 및 개발 키트 플래싱을 위한 소스 파일 찾기를 포함하여 플랫폼 지원 설정에 필요한 대부분의 단계를 자동화합니다.

-command=Vertify

-Platform=%Platform%

확인하려는 SDK가 있는 플랫폼을 선택하라는 메시지를 표시합니다. 그런 다음 Turnkey는 현재 SDK 설치에 대한 정보를 출력하고 언리얼 엔진이 예상하는 매개변수와 일치하는지 확인합니다.

해당 프로젝트의 플랫폼에 대한 SDK를 확인하고 필요하면 업데이트를 합니다.

 

 

BuildCookRun 과정

https://qiita.com/donbutsu17/items/f798d159049f82a277ee

 

1. Build - 선택한 플랫폼에 대한 실행 파일 컴파일

  • 프로젝트 및 엔진 소스코드를 각 플랫폼에 대해 빌드 / 실행파일(.exe) 생성
  • C++은 [Project]/Binaries/[Platform]
  • 블루프린트는 Engine/Binaries/[Platform]

 

2. Cook - 편집기를 실행하여 콘텐츠 변형

  • 플랫폼에 최적화된 형태로 내부 데이터를 변환   ex) 안드로이드: RGB → ETC 포맷

 

3. Stage - 실행 파일과 컨텐츠를 개발 dir 와 별도의 dir인 스테이징 영역에 복사

  • Build 시 생성한 실행 파일과 Cook 시 생성한 에셋을 Stage dir에 복사
  • 쿠킹된 에셋 세트를 하나의 파일로 묶는 경우 이 단계 에서 .pak 파일로 만듦

(.pak 파일로서 1 파일에 모아 두는 이유로서는, 파일 액세스를 효율적으로 실시할 수 있는 것이나, 애셋을 압축해 절대 크기로 패키지에 포함하는 것 수 있기 때문)

 

4. Package - 프로젝트를 플랫폼의 기본 배포 형식으로 패키지

  • 각 플랫폼에서 실행되는 어플리케이션 패키지를 만드는 단계 ex) 안드로이드 .apk

 

5. Deploy - 대상 장치에 빌드 배포

 

6. Run - 대상 플랫폼에서 패키징 된 프로젝트를 시작하는 단계

 

 

$ProjectDir/$EngineRunUAT -ScriptsForProject=$ProjectFullPath \
 Turnkey -command=VerifySdk -platform=$TargetPlatform -UpdateIfNeeded -project=$ProjectFullPath \
 BuildCookRun -nop4 -utf8output -build -cook -stage -package -archive -project=$ProjectFullPath \
 -target=$ProjectName -platform=$TargetPlatform -clean -pak -iostore -compressed -ddc=DerivedDataBackendGraph -prereqs \
 -archivedirectory=$PackageDir -clientconfig=$BuildConfig -nocompileeditor -skipbuildeditor

 

-build 타겟플랫폼 -platform 혹은 -targetplatform 에 대해 실행 파일을 컴파일 (C++ 프로젝트)
반대 옵션은 -nocompile 컴파일 단계를 건너뛰고 이전에 컴파일된 실행 파일을 사용하여 게임을 빌드
-nocompileuat

-nocompileeditor

-skipbuildeditor
-nocompileuat
UAT로 컴파일 하지 않도록 지시?? → 이 옵션을 사용하면 targetplatform 무시하고 그냥 해당 플랫폼 (맥이면 맥) 으로 뽑아버린다.

-nocompileeditor
에디터의 컴파일을 수행하지 않도록 지시 / 에디터를 컴파일하지 않고, 이전에 컴파일된 에디터 실행 파일을 사용

-skipbuildeditor
에디터의 빌드를 건너뛰도록 지시 / 빌드 단계 자체를 건너뛰므로 컴파일된 에디터 실행 파일도 사용하지 않음

패키징 된 파일은 에디터 실행파일 자체를 사용하지 않으므로 패키징을 뽑을 때, -nocompileeditor / -skipbuildeditor 옵션을 둘 다 사용해야 함
-cook 패키징을 위해 게임 콘텐츠를 쿠킹하도록 AutomationTool에 지시합니다.

쿠킹은 에디터에서만 필요한 Unreal .uasset 패키지의 데이터를 제거하므로 쿠킹은 애셋을 조금 더 작게 만듭니다.

Cooking은 또한 오래된 셰이더가 있는 모든 콘텐츠에 대해 셰이더를 빌드합니다.
-stage 실행 파일과 콘텐츠를 개발 디렉터리 외부의 독립형 디렉터리인 스테이징 영역에 복사 ??
-package 타겟플랫폼 -platform 혹은 -targetplatform 에 대해 프로젝트를 패키징 합니다.
-archive 이 빌드를 -archivedirectory 디렉토리에 넣습니다.
-archivedirectory 빌드를 넣을 디렉토리 경로

ex) -archivedirectory={path}
-platform 혹은
-targetplatform
빌드할 플랫폼

Win64 / Android / Mac / IOS 등..

join multiple platforms using +

ex) -platform = Mac+IOS

-configuration

빌드 구성을 나타내며 패키지 빌드에 포함될 게임 실행 파일을 식별



join multiple platforms using +

ex) -configuration = Debug

 
-target 과 같이 사용하면 ERROR: Cannot mix game and client targets 발생

-target 사용하려면 -configuration 대신 -clientconfig 사용

-client

-noclient

-dedicatedserver
빌드 타겟 설정

client : 클라이언트와 서버를 빌드, 쿠킹 및 실행하고 클라이언트 대상 구성을 사용

noclient : 클라이언트를 실행하지 않고 서버만 실행

dedicatedserver : 클라이언트와 서버를 모두 빌드, 쿠킹 및 실행
-target 빌드 타겟 설정

인수는 프로젝트 이름(예: MyAwesomeGame) 또는 편집기(예: MyAwesomeGameEditor) 형식으로 프로젝트를 지정하고 그 뒤에 플랫폼(Win32, Win64, Linux, Mac 등), 빌드가 옵니다. 구성(개발, 테스트, 출하 등). "-WaitMutex"는 여러 프로세스가 동시에 동일한 파일에 액세스하는 것을 방지하는 뮤텍스를 생성하기 위해 여러 프로세스를 사용하는 빌드를 처리하기 위해 UBT에서 사용


join multiple platforms using +

ex) -Target="MoonEditor Win64 Development"

프로젝트 이름 / 플랫폼 / configuration 한번에 쓸 수 있는 듯
-map

-allmaps
지정된 맵 목록만 쿠킹 및 스테이징

ex) -map=맵이름1+맵이름2
 
모든 맵 빌드

allmaps 플래그를 사용하는 경우 유효한 +Map=\Game\Maps\Map.umap 구문이 있는 [AllMaps]를 DefaultEditor.ini에 추가해야 합니다.
-pak 패키징 도구에 모든 쿠킹된 콘텐츠를 압축 가능한 Unreal Engine .pak 파일에 넣도록 지시합니다. Pak 파일을 암호화하여 사람들이 게임을 조작하거나 게임에서 자산을 추출하는 것을 더 어렵게 만들 수도 있습니다. 모든 콘텐츠를 .pak 파일에 넣으면 어떤 자산이 패키징되고 어떤 자산이 패키징되지 않는지 확인하기가 훨씬 더 어려워집니다.
 
→ 그래픽, 개체, 텍스처, 사운드 및 기타 게임 데이터들을 단일 파일로 "패키징" 할 수 있습니다. PAK 파일은 종종 이름이 바뀐 .ZIP 파일입니다.

에셋들을 '암호화' 할 수 있으므로 보안강화 (암호화 방법은 따로 찾아야 할듯) https://github.com/allcoolthingsatoneplace/UnrealPakTool/blob/master/Readme.md
-iostore I/O Store 컨테이너 파일은 게임의 에셋, 텍스처, 사운드 등의 데이터를 하나의 파일로 묶어서 저장하는 방식입니다. 이렇게 하면 게임 실행 중에 필요한 데이터를 더 효율적으로 로드하고 압축을 풀어서 사용할 수 있습니다. I/O Store는 게임의 크기를 줄이고 로딩 시간을 단축하는 데 도움을 줍니다.
 
pak 이랑 같은 옵션인것 같은데

-pak 은 안정성과 호환성이 검증된 데이터 패키징 형식이고

-iostore 는 최신기능이라 한다. https://docs.unrealengine.com/5.0/ko/zen-loader-in-unreal-engine/
-clean 패키징 프로세스가 시작되기 전에 Intermediate 파일을 삭제하고, 이전의 쿠킹 또는 스테이징(패키지) 파일을 삭제합니다.

 

 

'Jenkins' 카테고리의 다른 글

Groovy 기초  (0) 2024.10.04
Jenkins 팁  (0) 2023.04.01

+ Recent posts