icon안동민 개발노트

패키징 및 빌드 설정


 언리얼 엔진 프로젝트를 다양한 플랫폼에 맞게 패키징하고 빌드하는 과정은 게임 출시의 핵심 단계입니다.

 이 절에서는 효율적인 패키징 및 빌드 설정 방법을 살펴보겠습니다.

프로젝트 패키징 설정

 프로젝트 설정 파일(DefaultGame.ini) 구성

[/Script/UnrealEd.ProjectPackagingSettings]
Build=IfProjectHasCode
BuildConfiguration=Shipping
BuildTarget=
StagingDirectory=(Path="")
FullRebuild=False
ForDistribution=True
IncludeDebugFiles=False
BlueprintNativization=False
bWarnIfPackagedWithoutNativizationFlag=True
UsePakFile=True
bGenerateChunks=False
bChunkHardReferencesOnly=False
IncludePrerequisites=True
IncludeAppLocalPrerequisites=False
bShareMaterialShaderCode=True
bSharedMaterialNativeLibraries=True
ApplocalPrerequisitesDirectory=(Path="")
IncludeCrashReporter=False
InternationalizationPreset=English
CulturesToStage=en
DefaultCulture=en
bCookAll=False
bCookMapsOnly=False
bCompressed=True
bSkipEditorContent=True

타겟 플랫폼별 빌드 구성

 플랫폼별 빌드 설정 관리자

UCLASS()
class UPlatformBuildManager : public UObject
{
    GENERATED_BODY()
 
public:
    UFUNCTION(BlueprintCallable, Category = "Build")
    void ConfigureBuildForPlatform(EPlatformType Platform);
 
private:
    void SetupPCBuild();
    void SetupConsoleBuild();
    void SetupMobileBuild();
};
 
void UPlatformBuildManager::ConfigureBuildForPlatform(EPlatformType Platform)
{
    switch (Platform)
    {
        case EPlatformType::PC:
            SetupPCBuild();
            break;
        case EPlatformType::Console:
            SetupConsoleBuild();
            break;
        case EPlatformType::Mobile:
            SetupMobileBuild();
            break;
    }
 
    // 공통 설정 적용
    GConfig->SetBool(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("bCompressed"), true);
}

쿠킹 옵션 최적화

 쿠킹 옵션 설정

UCLASS()
class UCookingOptimizer : public UObject
{
    GENERATED_BODY()
 
public:
    UFUNCTION(BlueprintCallable, Category = "Build")
    void OptimizeCookingOptions();
 
private:
    void SetCookingRules();
    void ConfigureAssetCooking();
};
 
void UCookingOptimizer::OptimizeCookingOptions()
{
    SetCookingRules();
    ConfigureAssetCooking();
 
    // 쿠킹 명령어 예시
    FString CookCommand = FString::Printf(TEXT("UE4Editor-Cmd.exe %s -run=Cook -targetplatform=WindowsNoEditor -fileopenlog"), *FPaths::GetProjectFilePath());
    FPlatformProcess::CreateProc(*CookCommand, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
}

에셋 패키징 전략

 에셋 패키징 매니저

UCLASS()
class UAssetPackagingManager : public UObject
{
    GENERATED_BODY()
 
public:
    UFUNCTION(BlueprintCallable, Category = "Build")
    void PackageAssets();
 
private:
    void OrganizeAssetChunks();
    void CompressAssets();
    void GenerateAssetRegistry();
};
 
void UAssetPackagingManager::PackageAssets()
{
    OrganizeAssetChunks();
    CompressAssets();
    GenerateAssetRegistry();
 
    // 에셋 패키징 명령어 예시
    FString PackageCommand = FString::Printf(TEXT("UE4Editor-Cmd.exe %s -run=Cook -targetplatform=WindowsNoEditor -pak"), *FPaths::GetProjectFilePath());
    FPlatformProcess::CreateProc(*PackageCommand, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
}

패치 및 DLC 준비

 패치 및 DLC 관리자

UCLASS()
class UPatchDLCManager : public UObject
{
    GENERATED_BODY()
 
public:
    UFUNCTION(BlueprintCallable, Category = "Build")
    void PreparePatchAndDLC();
 
private:
    void SetupPatchStructure();
    void ConfigureDLCContent();
};
 
void UPatchDLCManager::PreparePatchAndDLC()
{
    SetupPatchStructure();
    ConfigureDLCContent();
 
    // 패치 생성 명령어 예시
    FString PatchCommand = FString::Printf(TEXT("UE4Editor-Cmd.exe %s -run=DiffPatch -base=BaseBuild -patch=PatchContent"), *FPaths::GetProjectFilePath());
    FPlatformProcess::CreateProc(*PatchCommand, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
}

빌드 자동화 스크립트 작성

 빌드 자동화 스크립트 예시 (PowerShell)

# Build.ps1
 
param (
    [string]$Platform = "Win64",
    [string]$Configuration = "Shipping"
)
 
$UE4EditorCmd = "C:\Program Files\Epic Games\UE_4.27\Engine\Binaries\Win64\UE4Editor-Cmd.exe"
$ProjectFile = "C:\Projects\MyGame\MyGame.uproject"
 
# 프로젝트 빌드
& $UE4EditorCmd $ProjectFile -run=Compile -platform=$Platform -configuration=$Configuration
 
# 쿠킹
& $UE4EditorCmd $ProjectFile -run=Cook -targetplatform=$Platform
 
# 패키징
& $UE4EditorCmd $ProjectFile -run=Package -platform=$Platform -configuration=$Configuration
 
Write-Host "Build completed for $Platform in $Configuration configuration."

다양한 배포 시나리오에 따른 패키징 고려사항

 스팀 배포용 설정

[/Script/SteamSourceSDK.SteamSourceSDKSettings]
AppId=480

 콘솔 스토어 설정 (예 : PlayStation)

[/Script/PS4DevSettings.PS4DevSettings]
TitleId=ABCD12345

 모바일 앱 스토어 설정

[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
PackageName=com.YourCompany.YourGameName
bPackageDataInsideApk=True

빌드 크기 최적화 전략

 빌드 크기 최적화 매니저

UCLASS()
class UBuildSizeOptimizer : public UObject
{
    GENERATED_BODY()
 
public:
    UFUNCTION(BlueprintCallable, Category = "Build")
    void OptimizeBuildSize();
 
private:
    void CompressTextures();
    void StripDebugSymbols();
    void RemoveUnusedAssets();
};
 
void UBuildSizeOptimizer::OptimizeBuildSize()
{
    CompressTextures();
    StripDebugSymbols();
    RemoveUnusedAssets();
 
    // 빌드 크기 최적화 명령어 예시
    FString OptimizeCommand = FString::Printf(TEXT("UE4Editor-Cmd.exe %s -run=ResavePackages -compress=ZLIB"), *FPaths::GetProjectFilePath());
    FPlatformProcess::CreateProc(*OptimizeCommand, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
}

효율적인 빌드 파이프라인 구축

 CI / CD 파이프라인 구성 (예 : Jenkins)

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('Build') {
            steps {
                bat "powershell.exe -File Build.ps1 -Platform Win64 -Configuration Shipping"
            }
        }
        stage('Package') {
            steps {
                bat "powershell.exe -File Package.ps1"
            }
        }
        stage('Deploy') {
            steps {
                bat "powershell.exe -File Deploy.ps1"
            }
        }
    }
}

일반적인 문제와 해결 방법

 문제 해결 가이드

  1. 빌드 실패
  • 로그 파일 확인 (Engine/Saved/Logs/)
  • 프로젝트 재생성 시도
  • 엔진 버전 업데이트 확인
  1. 패키징 오류
  • 쿠킹 단계 검증
  • 플랫폼 SDK 설치 확인
  • 에셋 종속성 확인
  1. 성능 이슈
  • 프로파일링 툴 사용 (언리얼 인사이트)
  • 최적화 설정 재검토
  • 에셋 최적화 수행

최종 사용자 경험을 고려한 빌드 최적화 팁

  1. 초기 로딩 시간 최소화
  • 에셋 스트리밍 최적화
  • 초기 로드 화면 구현
  1. 패치 크기 최소화
  • 증분 패치 시스템 구현
  • 에셋 버전 관리 시스템 도입
  1. 안정성 보장
  • 철저한 QA 프로세스
  • 크래시 리포팅 시스템 통합
  1. 다양한 하드웨어 지원
  • 스케일러블 설정 구현
  • 자동 그래픽 설정 조정 기능
  1. 빠른 업데이트 및 패치
  • 효율적인 패치 배포 시스템 구축
  • 백그라운드 다운로드 및 설치 기능

 언리얼 엔진 프로젝트의 패키징 및 빌드 설정은 게임의 최종 품질과 사용자 경험을 결정짓는 중요한 과정입니다. 프로젝트 패키징 설정을 통해 빌드의 기본적인 구조와 옵션을 결정하고, 타겟 플랫폼별 빌드 구성을 통해 각 플랫폼의 특성에 맞는 최적화를 수행할 수 있습니다.

 쿠킹 옵션 최적화는 빌드 프로세스의 효율성과 최종 빌드의 품질을 향상시키는 데 중요합니다. 에셋 패키징 전략을 통해 게임 콘텐츠를 효율적으로 관리하고, 패치 및 DLC 준비를 통해 게임의 수명주기 전반에 걸친 콘텐츠 업데이트를 계획할 수 있습니다.

 빌드 자동화 스크립트 작성은 반복적인 빌드 프로세스를 효율화하고 일관성을 유지하는 데 도움이 됩니다. 다양한 배포 시나리오에 따른 패키징 고려사항을 통해 각 플랫폼의 요구사항을 충족시킬 수 있습니다.

 빌드 크기 최적화 전략은 다운로드 시간을 줄이고 스토리지 사용을 최소화하는 데 중요합니다. 효율적인 빌드 파이프라인 구축을 통해 개발 팀의 생산성을 높이고 빌드 품질을 일관되게 유지할 수 있습니다.

 일반적인 문제와 해결 방법에 대한 이해는 빌드 프로세스에서 발생할 수 있는 장애물을 신속하게 해결하는 데 도움이 됩니다. 최종 사용자 경험을 고려한 빌드 최적화 팁은 게임의 전반적인 품질과 사용자 만족도를 높이는 데 기여합니다.

 결론적으로, 효과적인 패키징 및 빌드 설정은 기술적 숙련도와 사용자 중심 사고가 요구되는 복합적인 과정입니다. 이를 통해 안정적이고 최적화된 게임 빌드를 제공함으로써, 최종 사용자에게 높은 품질의 게임 경험을 전달할 수 있습니다.