모바일개발설정과패키징 신광섭 Developer Relations Manager/Programmer Epic Games Korea 목차 모바일개발환경설정 실행 버튼살펴보기 프로젝트런쳐 패키징프로젝트 배포버전제작 1
모바일개발환경설정 안드로이드개발준비 안드로이드개발을위한 SDK 설치 엔비디아의 Tegra Andorid Development Pack(TADP) 를추천 Unreal Engine\4.7\Engine\Extras\Android 에서찾으실수있음 TADP 개발자프로그램가입을통해서 tadp-3.0r4-windows 버전설치를추천 https://developer.nvidia.com/tegra-android-development-pack 최신버전의 4.x 버전이있지만호환성에보장되지않음 혹시라도 TADP 설치를원하지않으시면수동설정가능 프로젝트세팅 -> 안드로이드 SDK 2
안드로이드개발준비 기타디바이스관련설정 안드로이드디바이스 개발자옵션 및 USB 디버깅활성화 PC 에안드로이드디바이스의 ADB 드라이버설치 디바이스첫연결시 USB 디버깅을허용할까요? 에서꼭허용 실행 버튼에서타겟디바이스로보이면설정완료! 안드로이드개발준비 네이티브코드수정시에안드로이드빌드 TADP 설치나안드로이드 SDK 가제대로설정된후에는 VS 에서빌드가능 만약.sln 파일이 TADP 설치나 SDK 설정전에만들어졌다면다시만들어줘야 Solution Platforms 에 Android 가보임 GitHub 버전은 GenerateProjectFiles.bat 실행이나.uproject 선택후에 제대로설정되면 Android 선택가능 3
안드로이드개발준비 참고로특정프로젝트의 Unreal Engine Version 을변경해서다른엔진버전을사용하게하고싶다면, Switch Unreal Engine Version 을선택해서가능 런쳐가설치되어있어야메뉴가보임 단, GitHub 버전의풀소스코드사용시에혹시나그버전이안보이는경우가있을수있음이경우에그엔진의 Engine\Binaries\Win64\UnrealVersionSelector-Win64-Shipping.exe 실행하면등록가능 안드로이드개발준비 VS 빌드시에 APK 까지만들어져서네이티브코드를포함한 Java 까지모두빌드됨 실행 을눌러서디바이스에설치시에코드빌드가필요한경우빌드가자동으로수행되어서새로운 APK 가생성되고그버전이설치됨 4
ios 개발준비 itunes 설치필수 ios Developer Program 가입필수! 첫 ios 개발이라면 Key 와 Certificate 가필요 Mac 이있는경우 Keychain Access 이용 Mac 이없는경우 PC 에서는 UE4 의 iphone Packager 이용 Unreal Engine\4.7\Engine\Binaries\DotNET\IOS\iPhonePackager.exe ios 개발준비 iphonepackager 나 Mac 에서 Keychain Access 로만든 CSR 를통해 Mobileprovision 과 Certificate 그리고 Key 파일준비 개발설정에필요한파일들임포트 프로젝트세팅 -> ios 여기까지하면 블루프린트 기반의게임은바로 ios 디바이스에설치가능 ( 물론 PC 에서도 Mac 이없이가능 ) 5
ios 개발준비 그런데만약네이티브코드를수정했다면? PC 만이용한개발은불가능. Mac 이한대는꼭필요 단, Mac 한대를이용해여러명의프로그래머가 PC 에서작업가능 UnrealRemoteTool( 디폴트 ) 또는 SSH/Rsync (4.7 에서옵션 ) 을이용한원격빌드를통해서 VS 에서 ios 빌드가능! SSH/Rsync 는 4.7 에서는기본으로꺼져있고, Engine 폴더가있는곳과같은곳에프로젝트폴더가있지않으면빌드가안됨 4.8 에서는이문제가해결될예정 현재있는이슈들이해결이잘되면 UnrealRemoteTool 을이시스템이대체할예정 현재로서는 UnrealRemoteTool 추천 ios 개발준비 UnrealRemoteTool 설정방법 Mac 설정 터미널에서루트폴더가서 sudo mkdir /UE4 sudo chmod 777 /UE4 를실행해서 UE4 폴더를만들어둠 Engine/Build/IOS/ 에있는 UnrealRemoteTool 파일을 Mac 에가져옴 터미널에서 chmod a+x UnrealRemoteTool 실행해서실행가능하게함 터미널이나./UnrealRemoteTool 이나 Finder 에서더블클릭으로실행 6
ios 개발준비 PC 설정 프로젝트설정에 ios 에 Remote Server Name 에 Mac 이름또는 Mac IP 주소설정 ios 개발준비 설정이완료되면 VS 에서 Solution Platforms 에서 ios 선택해서빌드가능! 참고로 ios 의경우소스코드빌드를위해서는 GitHub 버전의풀소스코드가필수! Mac 에서개발을할때알아두면좋을사항들 GitHub 버전을받았을경우 Xcode 프로젝트를만드는것은 GenerateProjectFiles.command 런쳐버전의네이티브코드프로젝트라면 uproject 선택후에서비스에 Generate Xcode Project 이용 프로젝트의엔진버전을다른엔진으로변경하고싶다면 Switch Unreal Engine Version 이용 7
ios 개발 - 디버깅 Xcode 를통한완벽한네이티브코드디버깅가능! 단, Xcode 에서빌드를했다고컨텐츠가쿠킹되어디바이스에준비되어있는것음아님 그렇기때문에디버깅전에우선에디터에 실행 이나프로젝트런처등을통해서디바이스컨텐츠설치를하는것이필요 그러나우리에게는 on the fly(?) 가있기때문에꼭그런것은아님!! ㅎㅎ 이건뒤에 on the fly 항목설명에서 ios 개발 - 디버깅 디바이스에컨텐츠가전부복사된상태에서 Xcode 에서 scheme 중에 게임프로젝트 IOS 를선택하고, 연결된디바이스선택 클릭으로벌레잡기시작! 8
ios 개발 Windows PC 에서 ios 로그가져오기 참고로크래쉬시에디바이스에로그가전부출력이안되는이슈가있고, 4.8 에서수정됨 ifunbox 나기타 ios 디바이스파일접근가능한프로그램을통해서앱에들어가면 Documents 폴더아래에게임프로젝트에 Saved 폴더아래 Log 폴더에서로그가있고그걸가져올수있음 그게아니면 iphonepackager 를사용해서가능 Advanced Tools 에 Other Development Tools 선택 ios 개발 Backup Documents 선택하고설치한.ipa 파일선택 그러면해당.ipa 에내용들을게임프로젝트폴더 \IOS_Backups\iOS 디바이스이름폴더아래에내용들이백업이됨 게임프로젝트 \Saved\Logs 가면로그확인가능! Mac 에서로그확인 일단에디터에 실행 으로실행하면출력로그에로그가출력됨 ifunbox 나기타툴로도 Windows 와같은방식으로로그파일가져올수있음 실시간로그은 ios Console 이라는프로그램을다운받아서이용하는것을추천 9
모바일개발환경설정 이렇게안드로이드 /ios 개발설정이완료되면 실행 을통해서맥 /PC 에서디바이스로설치가능! 실행 버튼살펴보기 10
실행 버튼살펴보기 실행 버튼을클릭하면타겟플랫폼과설정된값을가지고 Unreal Engine 4 AutomationTool(UAT) 을실행하게됨 PC: RunUAT.bat, Mac: RunUAT.command 의배치파일을실행하고, 결국은 Binaries\DotNET\AutomationTool.exe 을실행 그래서 AutomationTool 이쿠킹 / 빌드 / 설치 / 실행의모든과정을설정된값으로알아서진행 실행 실행시에 출력로그표시 를선택해서출력로그를표시하게하는것을추천 실패시에문제점바로파악을위해 실행 버튼살펴보기 실행 실패시에출력로그를놓쳤다면창 -> 개발자툴 -> 출력로그선택을통해서확인가능 11
실행 버튼살펴보기 실행 버튼을통해쿠킹된 uasset 들이디바이스로폴더구조대로복사됨 예 ) SoulDungeon 이라는프로젝트라면안드로이드디바이스에 SoulDungeon 이라는폴더가생기고그아래에 Engine, SoulDungeon 등쿠킹된파일들이복사되고, 그걸읽어서실행됨 실행 버튼으로실행시에열려있는현재레벨과프로젝트세팅에맵 & 모드에설정된 Game Default Map 과 Server Default Map 만쿠킹되어서디바이스복사됨 즉, 혹시나게임내에서그이외의맵을로딩하는경우로딩이안되고, 찾지못해서맵로딩이실패할경우자동으로 Game Default Map 을열게됨 실행 버튼살펴보기 그럼쿠킹되어복사된현재맵, Game Default Map, Server Default Map 중에기본적으로에디터에열어둔현재맵이디바이스에서실행되는이유는바로 UE4CommandLine.txt 때문 즉, 어셋들이복사된디바이스에게임프로젝트폴더에가보면 UE4CommandLine.txt 파일이있고, 열어보면../../../SoulDungeon/SoulDungeon.uproject /Game/Maps/Example_Map 이런방식으로실행되는기본맵이설정되어있음 즉, 이맵이름만이미쿠킹되어복사된다른맵으로바꿔서저장하면따로다시설치없이도기본실행되는맵을변경가능 12
실행 버튼살펴보기 기본적으로에디터는 Development Editor 빌드이기에디바이스에실행되는게임바이너리도 Development 사용 GitHub 버전등을받아서 Debug Editor 로빌드한경우는 Debug 바이너리가사용됨 그래서 실행 버튼은쿠킹 / 빌드 / 설치 / 실행등의모든일을한번에알아서알아서하는유용한기능 여기서중요하고, 사실시간이많이걸리는것인바로쿠킹! 쿠킹 (Cooking) 실행 시에자동으로수행되는쿠킹과쿠킹된어셋이란? 쿠킹 기본적은 uasset 들은실제배포게임에서는필요없는원본리소스와기타다른정보를포함하고있음 이런 uasset 을실제실행시에만필요한데이터만가지고있도록요리 (?) 하는작업 타겟플랫폼에따라서쿠킹된 uasset 들은게임프로젝트 \Saved\Cooked\ 타겟플랫폼폴더에생성됨 참고로 실행 으로안드로이드디바이스선택시에해당디바이스가지원하는가장좋은텍스쳐포맷이선택되어서타겟플랫폼이됨 예 ) 퀄컴 AP 의경우 ATC 텍스쳐포맷이선택되어타겟플랫폼음 Android_ATC 13
쿠킹 (Cooking) 쿠킹에서중요한요소는바로 Derived Data Cache(DDC) 기본적으로 DDC 는게임프로젝트 \DerivedDataCache 폴더에생성 쿠킹에서중요한이유가바로모바일디바이스타겟으로쿠킹시에시간을많이쓰는텍스쳐포맷변환이나기타원본리소스가아닌타겟플랫폼을위해변환된데이터는이 DDC 에저장됨 즉, 이 DDC 를팀원들사이에공유해서쓰면쿠킹시간이나기타작업시간을줄일수있음 쿠킹 (Cooking) DDC 공유하기 모든팀원들이접근가능한공유폴더를만들고, 그위치를 DDC 저장공간으로사용하면됨 DefaultEngine.ini 에 [DerivedDataBackendGraph] Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=tru e, UnusedFileAge=19, FoldersToClean=-1, Path=\\mystudio.net\DDC, EnvPathOverrid e=ue-shareddatacachepath) 또는환경변수설정 UE-SharedDataCachePath=\\mystudio.net\DDC 자세한내용은 https://docs.unrealengine.com/latest/kor/engine/basics/deriveddatacache/ind ex.html 14
프로젝트런쳐 프로젝트런쳐 실행 으로하는방법은현재레벨과몇가지기본레벨만쿠킹및복사되기에테스트에부적합한경우가있음 원하는레벨들을전부쿠킹해서디바이스에설치하거나좀더추가적인세부설정을원할경우편리하게쓸수있는것이프로젝트런쳐 15
프로젝트런쳐 실행 -> 프로젝트런쳐혹은창 -> 프로젝트런쳐로실행가능 프로젝트런쳐 16
프로젝트런쳐 상단에는기본적으로지원하는플랫폼들에대한바로실행가능한기본옵션들이표시됨 오른쪽상단에 고급 선택시에몇가지설정은변경가능 하지만이기본설정으로실행시에는모든맵들을쿠킹하게되어서원하는맵만쿠킹하는것은아니기때문에테스트에시간이많이소요 프로젝트런쳐 우리가원하는것을하기위해서는바로하단에 커스텀실행프로파일 을사용하면가능 오른쪽상단에 + 표시를클릭하면새로운커스텀한프로파일추가가능 17
프로젝트런쳐 프로젝트카테고리에서사용할프로젝트선택 빌드여부선택 빌드는미리했고, 컨텐츠위주의테스트라면선택하지않는것이좋음 코드수정및테스트라면선택 코드빌드여부에상관없이 APK 는다시만들어질수있음 프로젝트런쳐 일단쿠킹옵션에서 By the book 을선택 선택시추가선택창이나오고, 쿠킹된플랫폼에서현재디바이스에적합한플랫폼선택 Android 선택은절대비추! 모든안드로이드용텍스쳐쿠킹및복사됨 쿠킹된컬쳐는기본을그대로사용하고추가로컬라이제이션테스트시에는원하는언어들도추가로선택 18
프로젝트런쳐 이부분은바로우리가필요한부분, 쿠킹하기원하는맵들만선택 프로젝트런쳐 추가적인기본설정의경우기본설정으로하면되고, 변경된콘텐츠만쿠킹 만꼭체크하시면됨 19
프로젝트런쳐 패키지는패키징않음 디플로이는 디바이스에복사 옵션을선택하고, 설치해서실행할연결된디바이스를선택 실행은 기본룰사용 프로젝트런쳐 이제오른쪽상단에 뒤로 를선택해서세팅을완료 추가적으로상단에 New Profile 0 으로된이름을선택해서이름을변경해도좋음 이렇게만든프로파일을실행하면선택됨맵만쿠킹되어서디바이스에복사되어서테스트가능 단, 기본실행되는맵은 실행 처럼선택되는것은아니므로프로젝트세팅에 맵 & 모드 에서 Game Default Map 을기본실행되기원하는맵을선택해서실행 20
프로젝트런쳐 아까쿠킹에서그냥넘어간 On the fly 는무엇? 쿠킹된컨텐츠를디바이스에복사하지않고, PC 에서스트리밍해서로딩하는기능! 여러가지변수에따라서 By the book 이더좋을수있지만게임실행시에필요한컨텐츠를미리쿠킹할필요가없기때문에유용한기능 스트리밍으로로딩하는것이기때문에현재사용하는 PC 와디바이스가같은네트워크환경안에있어서함 프로젝트런쳐 디바이스에서실행한앱에서요청한컨텐츠를스트리밍으로로딩하는방식이기에쿠킹에서 On the fly 선택시에따로쿠킹맵선택등은존재하지않음 On the fly 선택시디플로이옵션은파일서버로선택하고, 실행할디바이스선택 21
프로젝트런쳐 이렇게설정하고, 실행하면파일스트리밍서버가자동실행되고, 디바이스에복사된 UE4CommandLine.txt 에 PC 의 IP 가자동으로등록되어서디바이스에서앱이실행되어파일서버를찾음 프로젝트런쳐 그렇다면컨텐츠만수정된경우 실행 이나프로젝트런쳐이용으로 APK 재설치하는시간을아껴서바뀐컨텐츠만스트리밍해서테스트하면좋지않을까? 명령어실행으로파일서버만실행가능! Engine\Binaries\Win64 에 UE4Editor.exe 또는 UE4Editor-cmd.exe 로 예를들면 UE4Editor-cmd.exe D:\Dev\TestProject\TestProject.uproject -run=cook -targetplatform=android_atc - cookonthefly 이렇게 UE4Editor-cmd.exe.uproject 전체경로 -run-cook -targetplatform= 타겟플랫폼 -cookonthefly 조건으로실행 이렇게하면컨텐츠수정시에파일서버실행후디바이스에서바로앱을다시실행하면새로운컨텐츠적용테스트바로가능! 22
프로젝트런쳐 On the fly 파일서버를이용한 ios 디버깅 파일서버실행 open UE4Editor.app --args 프로젝트파일전체경로 -run=cook -targetplatform=ios -cookont hefly Xcode 에서 scheme 중에 게임프로젝트 IOS 를선택하고, 연결된디바이스선택 Alt+ 클릭으로 scheme 관리창을열고, Arguments 항목선택 + 로 Arguments 추가하고 -filehostip= 맥 IP 주소추가 프로젝트런쳐 에디터안에있는프로젝트런쳐는독립실행가능 UnrealFrontend Engine\Binaries\Win64\UnrealFrontend.exe 23
패키징프로젝트 - 배포버전제작 패키지프로젝트 디바이스에설치가능하고, 배포가능한버전을만드는다른방법으로패키징옵션이존재 패키지프로젝트 24
패키지프로젝트 패키지프로젝트는모든맵들을쿠킹해서포함하는것이기본옵션 4.8 에서는쿠킹하는맵들관련선택옵션이프로젝트세팅에추가될예정 원하는맵들만패키징하기를원하시면프로젝트런쳐를통해서가능 패키지를 로컬에패키지 & 저장 을선택하고, 디플로이를 디폴로이않음 으로선택하고실행하면패키징됨 안드로이드의경우프로젝트 \Binaries\Android 폴더안에생성됨 패키지프로젝트 프로젝트세팅에패키징옵션의내용이바로이패키징시에사용되는옵션들 참고로 4.7 에서는패키징을한번한후에는생성된 Pak 이나 OBB 파일이지워지지않아서 실행 등으로설치시에문제가생김그래서수동으로 Pak 파일과 OBB 파일을지원주셔야함예 ) 게임프로젝트 \Saved\StagedBuilds\Android_ATC\ 게임프로젝트 \Content\Paks 게임프로젝트 \ Saved\StagedBuilds 에있는 OBB 파일 25
패키지프로젝트 ios 배표용 ipa 만들기 애플개발자페이지에서 Distribution 용 MobileProvision 과 Certificate 파일을만들어서다운로드 프로젝트세팅 -> ios 에서 Distribution 용 MobileProvision 과 Certificate 파일들임포트 이때중요한것은번들식별자 (Bundle Identifier) 가 distribution 용과잘매치되어있는지 패키지프로젝트 배포용안드로이드 APK 만들기 Release 모드로 Signing 되어야함 Keystore 만들기 http://developer.android.com/tools/publishing/app-signing.html 에 Signing Your App Manually 항목을참고 keytool 을이용해서 keystore 파일작성 만들어진 Keystore 파일을프로젝트 \Build\Android 폴더에복사 26
패키지프로젝트 Release 모드로 Signing 된앱만들기 프로젝트세팅에안드로이드 -> Distribution Signing 부분채우기 패키지프로젝트 Release 모드로 Signing 된 APK/Distribution 용 ipa 만들기 프로젝트세팅에패키징에 For Distribution 체크 참고로기본적으로는 Full Rebuild 가켜져있어서패키징시에무조건바이너리빌드를다시하니체크를해제하는것도좋은방법 이조건으로패키징을하면구글 / 애플제출용실행파일완성! 27
감사합니다! Q/A 28