Publishing Builds

게임을 만드는 중 어느 때에도, 독립적 또는 웹 플레이어로서 에디터의 바깥에서 빌드하고 실행시켰을 때 어떻게 보일 지 알고 싶을 수도 있습니다. 이 절에서는 Build Settings들을 어떻게 접근하고, 게임의 다른 빌드들을 어떻게 생성하는지 설명할 것입니다.

빌드 설정창을 접근 하는 메뉴 아이템은 File→Build Settings…입니다. 게임을 빌드 할 때 장면들에 포함될 사항들의 수정 가능한 리스트들이 (클릭 시)나타날 것입니다.


빌드 설정들 창

프로젝트 내에서 처음으로 이 창을 보면, 비어(blank) 보일 것입니다. 이 리스트가 비었을 때 게임을 빌드하면, 오직 현재의 열린 장면(scene)이 빌드에서 포함될 것 입니다. 하나의 장면파일로 테스트 플레이어의 빠른 빌드를 원하시면, 간단히 플레이어를 빈 장면 리스트로 빌드하십시오.

장면 파일들을 다중 장면 빌드들의 리스트에 추가하는 것은 쉽습니다. 그들을 추가하는 데는 두 방법이 있습니다. 첫 번째 방법은 Add Current 버튼을 클릭 하는 것입니다. 리스트에서 현재 열린 장면이 나타나는 것을 볼 수 있습니다. 장면 파일들을 추가하는 두 번째 방법은 Project View에서 장면 파일들을 드래그해서 리스트로 놓는 것입니다.

이 시점에서, 각 장면은 다른 인덱스 값을 가집니다. Scene 0이 게임을 빌드 했을 때 로드(load)될 첫 번째 장면입니다. 새로운 장면의 로드를 원하시면, 스크립트 내에서 Application.LoadLevel()을 사용하십시오.

하나의 장면 파일 이상을 추가했고, 그들을 재 정렬 하고 싶으시면, 리스트 (아이템들) 위나 아래에 장면들을 드래그 해서 원하는 순서에 놓으십시오.

리스트에서 장면의 제거를 원하시면, 장면 highlight를 클릭하시고 Command-Delete를 누르십시오. 그러면, 그 장면은 리스트로부터 사라지고 빌드 내에서 추가 되질 않을 것입니다.

빌드를 퍼블리쉬 할 준비가 되었을때 Platform을 선택하고, 유니티 로고가 플랫폼 옆에 있음을 확인하세요. 그렇지 않으면 Switch Platform 버튼을 클릭하시고 유니티가 어떤 플랫폼을 위해 빌드를 할지 알려야 합니다. 마지막으로, Build 버튼을 누르십시오. 표준 Save 대화장을 사용하여, 게임의 이름과 장소를 선택할 수 있을 것입니다 Save 버튼을 유니티는 게임을 즉시 빌드 합니다. (빌드 과정은) 이처럼 간단합니다. 만약 빌드된 게임을 어디에 저장해야 할 지 확실히 모르겠으면, 빌드된 게임을 프로젝트 루트 폴더로 저장하는 것을 고려해보십시오. 빌드된 게임을 애셋(Asset) 폴더에는 저장할 수 없습니다.

어떤 독립 플레이어의 Debug build 체크박스를 가능하게 표시하면 Profiler 기능을 가능하게 합니다. 추가로, 플레이어는 디버그 심볼들과 함께 빌드 되어, 써드 파디(3rd party) 프로파일링이나 디버깅 툴들을 사용할 수 있습니다.

Desktop!

Web Player Streaming

웹 플레이어들을 스트리밍하는 것은 웹 플레이어 게임들이 장면 0을 로드 하자마자 (게임) 플레이를 시작하게 합니다. 만약 10개의 레벨을 가진 게임이 있으면, 레벨 1의 플레이를 시작할 수 있기 전에, 플레이어를 기다리게 하고 레벨 2-10사이의 애셋들의 다운로드를 강제 시키는 것은 그다지 이치에 맞지 않습니다. 스트리밍 웹 플레이어(Streaming Web Player)를 퍼블리쉬하는 것은, 다운로드 되어야 할 애셋들이 그들이 보이는 Scene 파일의 순서로 나열 될 것입니다. 모든 장면 0을 포함하는 애셋들의 다운로드가 마치자 마자, 웹 플레이어는 (게임) 플레잉을 시작 할 것입니다.

간단하게 말하면, 스트리밍 웹 플레이어들(Streaming Web Players)은 플레이어가 게임을 이전 보다 더 빠르게 플레이하게 하도록 합니다.

걱정해야 할 유일한 일은 로드를 원하는 다음 레벨이 (로드 되기 전에) 스트리밍을 마쳤다는 것을 확인 하는 것입니다.

일반적으로, 스트림 되지 않는 플레이어에서는, 레벨을 로드 하기 위해서 다음의 코드를 사용합니다:

Application.LoadLevel("levelName");

스트리밍 웹 플레이어에서는, 레벨이 스트리밍을 끝마쳤는지 먼저 체크합니다. 이는 CanStreamedLevelBeLoaded() 함수를 통해서 이루어집니다. 아래는 어떻게 작용되는지 설명합니다:

var levelToLoad = 1;
 
function LoadNewLevel () {
	if (Application.CanStreamedLevelBeLoaded (levelToLoad)) {
		Application.LoadLevel (levelToLoad);
	}
}

플레이어에 레벨 스트리밍 전개의 프로그레스(progress)를 원한다면 (로딩 바(loading bar), 또는 다른 식의 표현), 이 GetStreamProgressForLevel() 함수를 접근해서 프로그레스(progress)를 읽을 수 있습니다.

Offline webplayer 배치

만약 오프라인 배치 옵션이 웹 플레이어에 가능화 되면, UnityObject.js 파일(플레이어를 호스트 페이지에 인터페이스 하는데 사용)이 빌드 시에 플레이어에 쪽에 위치될 것입니다. 이는 플레이어가 네트워크 연결이 없을 시라도 로컬 스크립트 파일과 작용을 가능하게 합니다. 일반적으로, UnityObject.js이 최신버전의 사용을 위해서 유니티의 웹서버로부터 다운로드 됩니다.

독립 플레이어를 빌드하기

유니티를 사용해서, 윈도우나 맥(Intel, PowerPC, 또는 두 아키텍트 모두에 실행하는Universal) 시스템들을 위한 독립(standalone) 어플리케이션들을 빌드 할 수 있습니다. 이는 빌드 설정 대화창에서 빌드 타겟(target)을 정하고 'Build'를 누르는 간단한 문제입니다.

독립 플레이어를 빌드 할 때에, 결과 파일들은 빌드 타겟에 따라서 다양합니다. 윈도우에서는 실행 파일(.exe)들이 해당 어플리케이션을 위한 리소스들을 모두 포함하는 Data 폴더와 함께 빌드 될 것입니다. 맥에서는 어플리케이션을 실행하기 위해서 필요한 파일과 리소스들을 포함하는 app 묶음(app bundle)이 빌드 될 것입니다.

맥에서 독립 플레이어를 배포하는 것은 app묶음을 제공하는 것입니다. (모든 것이 그 묶음으로 싸여져 있습니다.) 윈도우에서는 다른 사람들이 실행할 수 있게 .exe 파일과, Data 폴더의 제공이 필요합니다. 다음과 같이 생각하시길 바랍니다: 게임을 실행하기 위해서는 유니티가 빌드하는 결과 파일들로서 다른 사람들도 그들의 컴퓨터에 같은 파일들을 가지고 있어야 합니다.

빌드 과정 내부

빌드 과정은 우선 지정한 위치로 빌드 된 게임 어플리케이션의 빈 복사본을 위치 시킬 것입니다. 그 다음은, 빌드 설정들의 장면 리스트를 통하여 작업하며, 한번에 하나씩 에디터로 열기를 수행하고, 최적화 시키며, 하나의 어플리케이션 패키지로 통합시킬 것입니다. 포함된 장면들에 필요한 모든 애셋들을 계산하고, 어플리케이션 패키지 내에서 그 데이터를 분리된 파일로 저장 할 것입니다.

  • 장면에서 'EditorOnly'로 태그된 어떤 GameObject도 퍼블리쉬된 빌드에는 포함되지 않을 것입니다. 이는 마지막 게임에 포함될 필요가 없는 스크립트들을 디버깅하는데 유용합니다.
  • 새로운 레벨을 로드 할 때, 이전 레벨의 모든 오브젝트들은 소멸됩니다. 이를 막기 위해서는 소멸을 원하지 않는 오브젝트(들)에 DontDestroyOnLoad() 함수를 사용합니다. 이는 레벨을 로드 시 또는 게임 상태를 유지하고 진행하는 게임 컨트롤러 스크립트를 위한 뮤직 플레잉(music playing)을 유지하기 위해 종종 사용합니다.
  • 새로운 레벨을 로드 하는 것이 끝난 후에: OnLevelWasLoaded() 메시지가 모든 활성화된 게임 오브젝트들에게 보내어 질 것입니다.
  • 다중 장면이 있는 게임을 생성하기 위한 최선의 방법에 관한 정보는 (예: 메인 메뉴, 하이 스코어(high-score) 스크린, 실제(actual) 게임 레벨들), “Scripting Tutorial.pdf” 파일을 참조하시기 바랍니다.

iOS!

아이오에스 빌드 과정 내부

iPhone/iPad 어플리케이션의 빌드 과정은 다음 두 단계로 이루어 집니다:

  1. XCode 프로젝트가 모든 필요한 라이브러리들, 프리컴파일(precompile)된 .NET 코드, 직렬화된 애셋들과 함께 생성됩니다.
  2. XCode 프로젝트는 실제 디바이스 위에 빌드되고 배치됩니다.

"Build settings"대화창에서 "Build"를 누르면, 첫 번째 단계가 수립됩니다. "Build and Run"을 누르면 두 스텝 모두를 수행합니다. 유저가 프로젝트 저장 대화 창에서 이미 존재하는 폴더를 선택하면, 경고 메시지가 표시됩니다. 현재, 선택할 수 있는 두 개의 XCode 프로젝트 생성 모드들이 있습니다:

  • replace - 타겟 폴더로부터의 모든 파일들이 제거되고 새로운 컨텐트들(contents)이 생성됩니다
  • append - "Data", "Libraries"와 프로젝트 루트 폴더는 청소되고, 새롭게 생성된 컨텐트들로 채워집니다. XCode 프로젝트 파일은 최신의 유니티 프로젝트 변화(들)에 따라 업데이트 됩니다. XCode프로젝트 "Classes" 서브폴더는 사용자 네이티브 코드(custom native code)를 두기에 가장 안전한 장소로 고려될 수도 있지만, 정기적 백업이 권고됩니다. 첨부 모드(append mode)는 같은 유니티 iOS버전을 사용하여 생성된 기존의 XCode 프로젝트들을 위해서 지원됩니다.

“Cmd+B” 이 눌러지면, 자동 빌드와 실행 프로세스가 호출되고, 최근의 사용된 폴더가 빌드 타겟으로 간주됩니다. 이 경우 첨부(append) 모드가 디폴트로 간주됩니다.

Android

Android!

< 안드로이드 어플리케이션의 빌드과정은 다음과 같은 두 단계로 이루어집니다:

  1. 모든 필요한 라이브러리들과 직렬화된 애셋들과 함께 어플리케이션 패키지(.apk 파일)가 생성 됩니다.
  2. 어플리케이션 패키지는 실제 디바이스에 배치(deploy)됩니다.

""Build" 가 "Build settings" 대화 창에서 눌러지면, 첫 번째 단계가 이루어 집니다. "Build and Run" 을 누르면 두 단계 모두가 수행됩니다. “Cmd+B” 이 눌러지면, 자동 빌드와 실행 프로세스가 호출되고, 최근의 사용된 폴더가 빌드 타겟으로 간주됩니다.

안드로이드 프로젝트를 빌드하는 첫 번째 시행에서, 유니티는 안드로이드 어플리케이션을 빌드하고 인스톨하는데 필요한 안드로이드 SDK를 위치 시킬 것을 요청합니다. 이 설정들을 나중에 Preferences에서 변경 시킬 수 있습니다.

안드로이드에서 app를 빌드 할 때, 디바이스가 "USB Debugging"을 가지고, 디바이스 설정에는 "Allow mock locations" 체크박스가 표시되어 있는지 확인 해야 합니다.

Android SDK/platform-tools 폴더 내의 adb devices 명령어를 수행해서 운영체제가 디바이스를 볼 수 있도록 보장 시킬 수 있습니다. 이는 맥과 윈도우 운영체제 모두에서 작동합니다.

유니티는 어플리케이션 아카이브(.apk 파일)를 빌드하고, 연결된 디바이스에 그것을 인스톨 시킵니다. 몇몇의 경우에는, 어플리케이션이iPhone 에서와 같이 자동 시작(autostart)을 수행할 수 없습니다. 그러므로, 스크린을 잠금 해제(unlock) 할 필요가 있습니다. 몇몇의 희귀한 경우는 새로 인스톨된 어플리케이션을 메뉴에서 찾을 수 있는 경우도 있습니다.

Texture Compression

Build Settings 하에서 Texture Compression 옵션을 찾을 수 있습니다. 디폴트로, 유니티는 오버라이드 하는 개개의 질감 포맷 (Texture 2D / Per-Platform Overrides 참조) 을 가지지 않는 질감들의 질감 포맷으로 ETC1/RGBA16 질감 포맷을 사용합니다.

특정 하드웨어 아키텍처를 타겟으로 한 어플리케이션 아카이브(.apk 파일)의 빌드를 원하면, 기본 작동을 오버라이드 하기 위해서 Texture Compression 옵션을 사용할 수 있습니다. 오버라이드 하는 질감 포맷을 사용하는 모든 질감들은 그냥 남겨질 것입니다. Automatic Compressed이 설정된 질감들만이 Texture Compression 옵션에서 선택된 포맷을 사용할 것입니다.

어플리케이션이 선택된 질감 압축을 지원하는 디바이스들 위에서 배치(deploy)되는 것을 확인하기 위해서, 유니티는 선택된 특정 포맷을 매칭하는 태그들을 포함하려고 AndroidManifest 를 편집 할 것입니다. 이는 안드로이드 마켓(Android Market) 필터링 방법이 적절한 그래픽 하드웨어를 가진 디바이스들의 어플리케이션을 돕는 것을 가능하게 합니다.

미리 불러오기(Preloading)

퍼블리쉬 된 빌드들은 장면이 불러와 질때, 장면내의 모든 애셋들을 자동으로 미리 불러오기 합니다. 이 규칙의 예외는 장면 0입니다. 이는 첫 번째 장면은 대게 스플레쉬 스크린(splash screen)으로, 가능한 빠르게 디스플레이(display) 되는 것을 원하기 때문입니다.

모든 컨텐트가 미리 불러오기가 됨을 확인 하기 위해서 Application.LoadLevel(1)을 호출하는 빈 장면을 만들 수 있습니다. 빌드 설정들에서, 이 빈 장면의 인덱스를 0으로 만드십시오. 모든 다음의 레벨들은 미리 불러오기 될 것입니다.

게임들을 빌드 할 준비가 되었습니다

지금까지, 유니티의 인터페이스를 사용하는 법, 애셋을 사용하는 법, 장면들을 생성하는 법, 빌드들을 퍼블리쉬 하는 법을 배웠습니다. 이상적인 게임을 생성하는데 이제 장애물이 없습니다. 더 많은 것을 배워 가는 동안, 여러 가지 도움을 줄만한 자료들을 아래에 소개 하였습니다.

유니티 자체를 사용하는 것에 대해 더 자세히 배우고 싶으시면, 이 매뉴얼을 계속해서 읽으시거나 continue reading the manual, 튜터리얼들 Tutorials을 참조하십시오.

컴포넌트들에 대해서 더 많이 배우고 싶으시고, 게임 동작들의 기본들(nuts & bolts)에 대해 더 배우고 싶으시면 Component Reference 페이지를 참조하십시오.

스크립팅에 대해 더 배우고 싶으시면 Scripting Reference 페이지를 참조하십시오.

아트 애셋들(Art assets)을 생성하는 것을 더 배우고 싶으시면, 매뉴얼의 애셋들 섹션 Assets section을 참조하십시오.

유니티 사용자들과 개발자들의 커뮤니티와 상호 교류 하려면, 유니티 포럼들 Unity Forums을 방문하시길 바랍니다. 질문들을 할 수 있고, 프로젝트를 공유하며, 팀을 구성하고, 원하는 것들을 할 수 있습니다. 우리는 당신이 만드는 놀라운 게임을 보기 원하므로, 포럼들을 한번 이상 꼭 방문하십시오.

역링크