Unity 게임 Windows 10 개발 가이드
[목차]
1. Unity 게임 Windows 10 용 개발환경 구성
2. Windows 10, Windows 8.1 차이 및 통합 스토어
3. Windows 10 빌드 방법
4. Windows 10 빌드시 지원하지 않는 API
5. 타 플랫폼 및 Windows 10의 크로스 플랫폼 지원 방법
6. Windows 플랫폼으로 변경해야 하는 기능
7. Windows 10 플랫폼용 Feature 적용
8. Windows 스토어 관련
9. Windows 10 게임 최적화
10. 지원 프로그램
11. 참고 URL
1. Unity 게임 Windows 10 용 개발환경 구성
1) Windows 10 설치
- Home 버전은 Hyper-V 미 지원으로 Windows 10 Mobile Emulator는 사용 불가. 또한, CPU가 SLAT를 지원하지 않으면 Pro 버전이상이라도 해당 Emulator 사용 불가. 단, PC Emulator는 상관 없이 모두 사용 가능.
- Windows 8.1에서도 Visual Studio 2015와 Windows 10 SDK를 설치할 경우 Windows 10 패키지 빌드는 가능하나 디버깅은 Windows 10 디바이스를 연결해서 사용해야해서 매우 불편할 수 있음.
- Windows 10의 경우는 설치 후에 설정 – 업데이트를 통해서 최신 업데이트(1511) 권장.
- Windows 10 이 없다면 Enterprise 90일 체험판으로 테스트에 활용해볼 수 있음.
https://www.microsoft.com/en-us/evalcenter/evaluate-windows-10-enterprise
2) Visual Studio 2015 설치
- 무료 버전인 Express for Windows 10으로도 개발 가능. (참고로 Express 버전에서는 Visual Studio Tools for Unity(구 UnityVS) 사용 불가, VS Community 이상은 모두 가능, VS Code는 UWP 앱 빌드 불가,)
- VS 설치 시에 사용자 설치로 Windows 10 SDK를 반드시 선택해야 함.
- 설치본이 VS2015 Update 1 통합이 아닐 경우 Update 1설치 권장. (설치 시 Universal Windows Apps (v1.2) 선택. Windows 10의 경우 향후 업데이트로 API 버전이 계속 높아질 것)
- Windows 10 Mobile Emulator 도 필요하다면 선택해서 설치. (단, 다운로드에 시간이 좀 오래 걸림)
- 개발한 앱을 Windows 10 디바이스에 테스트 등으로 설치하기 위해서는 제어판의 ‘업데이트 및 복구’의 개발자용 - 개발자 모드 설정 필요.
- Windows 8.1 및 Windows Phone 8.1 도 빌드하기 위해서는 VS 설치 시에 Windows 8.1 SDK도 선택해 줘야 함. (Windows Phone 8.1 Emulator 도 필요 시에 선택)
- (라이센스가 가능하다면 Pro와 거의 유사한 기능의) VS2015 커뮤니티를 활용할 수 있음. 아래 다운로드 URL
https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx
3) Unity 5.3+ 설치
- Unity 5.2부터 Windows 10 용 빌드 가능 (버그 Fix를 위해서 최신 버전의 Unity 및 Patch 설치 권장. 아래 Patch URL)
https://unity3d.com/kr/unity/qa/patch-releases
- Unity 4.x 버전에서는 Windows 10 용 빌드를 할 수 없고, 대신 Unity 4.3 이상에서만 Windows 8.1 및 Windows Phone 8.1 용 프로젝트를 빌드할 수 있다. 이 빌드로 만든 패키지는 Windows Store에 올리면 Windows 8.1뿐만 아니라 Windows 10 디바이스에서도 구동 되나, Windows 10에서 추가된 기능을 사용할 수 없음. (예를 들면 반응형 UI로 PC와 Phone을 동시에 지원하는 것.)
4) 개발자 계정
- 윈도우 스토어에 게임을 올리기 위해서는 개발자 계정이 필요함. (개인 $19, 기업 $99 한번 만 내면 됨)
https://msdn.microsoft.com/library/windows/apps/bg124287.aspx
- 개발사의 경우는 테스트 시에 필요할 수 있으며, 앱을 올리는 퍼블리셔의 경우 반드시 필요함.
- 회사 계정의 경우 Symantec을 통해서 승인되는데 며칠 걸릴 수 있고, 매년 확인이 필요함.
2. Windows 10, Windows 8.1 차이 및 통합 스토어
- (Windows 8.1의 경우 Phone과 PC용 Store가 나눠져 있고, 플랫폼 역시 달라서 각각 빌드를 만들어서 각각 패키지를 만들어 해당 스토어에 업로드를 해야 했는데) Windows 10용은 UWP로 한번에 같은 프로젝트로 통합 패키지를 제출해서 Phone과 PC용으로 사용될 수 있음. (Windows 10에 있는 Universal Windows Platform 으로 개발하면 Windows 10 OS가 구동 되는 디바이스 들에서 모두 구동될 수 있다. 예를 들면 Windows 10 Mobile, Windows 10 Desktop, Xbox One(예정), HoloLens(예정) 등)
- PC는 x86, x64로 빌드 가능하고, Phone은 ARM으로 빌드해서 통합 패키지로 스토어에 제출 가능.
- Windows 8.1앱은 Windows 10에서 하위 호환성으로 동작은 하지만 보통 전체 화면으로 구동되는 것을 고려하고 만들어졌기 때문에, Windows 10의 창 모드에서는 최소 가로 사이즈 등이 확보되지 않으면 게임 UI가 깨져 보일 수 있음.
3. Windows 10 빌드 방법
- Unity의 Build Setting에서 Windows Store의 Windows 10을 선택해서 빌드하면 Visual Studio 2015 프로젝트가 생성됨.
- Build 시에 Debugging Unity C# Project 체크를 해주면 빌드 된 Visual Studio 솔루션에서 Unity C# Script가 포함된 프로젝트를 추가되어 Windows 10 용 앱을 Visual Studio에서 구동 시에 Unity C# Script를 수정할 수 있음. Intellisense 및 Debugging 기능이 사용 가능하기 때문에, Windows 10 용 앱 개발 시에 C# Script 수정을 위해서 Unity Editor 쪽으로 넘어가지 않아도 됨.
- 실제 실행 시에는 PC에서 테스트를 위해서는 ARM이 아닌 x86(혹은 x64)으로 빌드 설정을 변경해 주어야 함. 그리고 Debug, Release, Master가 있는데 최종적으로 스토어에 올리는 것은 Master로 빌드 해야함. (Release에서는 Profiler 활성화 가능하기 때문에 Master에 비해서 덜 최적화 됨).
- Windows 스토어에서 올라온 패키지를 .NET Native로 컴파일 하기 때문에, 스토어에 올릴 패키지는 .NET Native가 기본적으로 활성화 되지 않음. 실제 사용자가 스토어에서 다운로드 받는 것은 스토어에서 .NET Native로 컴파일 된 패키지이므로, 이를 테스트 하기 위해서는 Master로 설정을 하고 Test 혹은 Side-loading용 패키지를 생성하면 이는 Local에서 .NET Native가 적용해서 컴파일 된다. (스토어 업로드용 패키지를 스토어 계정과 연결해서 생성하면 스토어 업로드 패키지와 .Net Native가 적용된 Test 폴더에 설치 패키지가 생김)
- PC용 패키지를 설치하는 방법은 파워쉘 파일 마우스 우측 클릭 후에 Powershell로 실행 선택하면, 인증서 설치 후에 확인 과정을 거쳐서 설치됨.(Unlock이 되어 있어야 함)
4. Windows 10 빌드시 지원하지 않는 API
1) Mono와 .NET Core 간의 API 차이
- Unity는 .NET의 Open Source 프로젝트인 Mono를 사용하며 여기에는 구 버전 .NET에서 사용했기 때문에 현재는 deprecate 된 API들이 다수 포함되어 있음. 그리고 Windows 10의 Store에서 서비스하는 Universal Windows App에서는 Universal Windows Platform(UWP) API와 .NET의 부분 집합인 .NET Core를 사용할 수 있음. Windows 10에서 구동되는 Unity 게임은 Mono가 아닌 .NET Core를 사용. .NET Core는 .NET의 부분 집합이라서 Mono에 있는 API 중에 없는 것이 있고, 해당 API를 Unity 게임에서 사용했다면 빌드 및 실행 오류 발생 가능. 없는 것은 UWP API에 있는 것으로 대체할 수 있기도 함. (System.Reflection은 UWP API에 적합한 API로 대체하고, System.Threading 은 Task, coroutines 등으로 대체 등…)
UWP 앱용 .NET 라이브러리는 아래 URL을 참고
https://msdn.microsoft.com/ko-kr/library/windows/apps/xaml/mt185501.aspx
Windows 8.x 스토어 앱용 .NET 라이브러리는 아래 URL을 참고
https://msdn.microsoft.com/ko-kr/library/windows/apps/xaml/mt185486.aspx
2) Extension method 및 WINRTLegacy를 통해 차이점 줄임
- Unity Extension method 및 WINRTLegacy Namespace로 Mono에는 있는데 .NET Core에 빠진 일부 API를 내부적으로 UWP API를 활용하도록 Unity 쪽에서 구현해 둔 것이 있다. 이로 인해서 Mono와 .NET Core 간의 차이로 발생하는 문제는 더욱 줄어들게 되며, Unity 버전이 높아질 수록 이런 빠진 API 들이 Unity 쪽에서 더 많이 구현되어 있다. (Unity 5.x에서 4.x 보다 추가된 API가 많음) 아래는 추가 구현된 API들 리스트.
https://docs.unity3d.com/Manual/windowsstore-missingtypes.html
3) Windows 10용 Unity 플러그인 활용
- 마이크로소프트에서 제공하는 Unity용 플러그인인데 아직 완성도가 높지 않을 수 있음.
https://github.com/Microsoft/unityplugins
4) Windows 10에서 추가된 API들로 인해서 Windows 8.1용 빌드 시에 비해서 수정 없이 쉽게 빌드할 수 있는 부분도 있음. 예를 들면 System.Net의 Socket 클래스 등 (Windows 8.1과 Windows 10 패키지를 모두 만든다면 고려할 부분)
https://blogs.windows.com/buildingapps/2015/07/02/networking-api-improvements-in-windows-10/
5) 사용하고 있는 Plugin의 소스코드에서 Windows 10에 빠진 API를 사용하고 있는지 파악을 위해서 https://scan.xamarin.com 에 Plugin의 dll을 업로드하면 확인 가능.
- Plugin이 소스코드 형태로 제공된다면 해당 부분을 대체할 수 있는 .NET Core나 UWP API등으로 수정. 만약 바이너리로만 제공된다면 해당 Plugin 제작사에게 문의하거나 Microsoft 쪽에 문의해서 해당 Plugin 제작사와 협의 여부 확인 필요. (업데이트 일정이 없다면 대체 플러그인을 찾아야 할 수 있음)
5. 타 플랫폼 및 Windows 10의 크로스 플랫폼 지원 방법
- Pre-processors directives 활용: #if! UNITY_EDITOR && Windows_UWP // 플랫폼 특화 코드 #endif
https://docs.unity3d.com/Manual/windowsstore-scripts.html
https://docs.unity3d.com/Manual/windowsstore-faq.html
- Plugins: 1) 실제 API가 포함된 Windows 10용 DLL과 2) stub 기능을 가진 Unity Editor용 DLL 을 각각 만들어서 Windows 10으로 Build하면 Windows 10용 DLL만 사용되도록 할 수 있음.
https://docs.unity3d.com/Manual/windowsstore-plugins.html
6. Windows 플랫폼으로 변경해야 하는 기능 - IAP, PUSH: 각각 마이크로소프트 스토어 용 IAP과 WNS라는 마이크로소프트의 Push 서비스를 사용해야함. Prime31, Pushwoosh 등의 상용 Unity 플러그 인을 확인 후 사용할 수도 있거나, 마이크로소프트에서 오픈소스로 제공하는 Unity 플러그인을 사용할 수 있음.
- 혹은 Visual Studio에서 Windows App 쪽에 직접 구현하고 Unity Game과 Delegate 이용해서 통신하도록 하는 것도 가능(Unity와 Windows 간의 통신 많이 활용됨) 아래 XAMLUnityConnection 관련 샘플 참고.
https://docs.unity3d.com/Manual/windowsstore-examples.html
https://docs.unity3d.com/Manual/windowsstore-appcallbacks.html
- Facebook 연동: Windows 10에서는 마이크로소프트에서 제공하는 Unity용 플러그인 사용할 수 있음.(현재 Build 스크립트에는 미포함) Windows SDK for Facebook 혹은 Facebook SDK for .NET 을 통해 Windows App 쪽에서 구현해서 통신 하는 것도 가능.
https://blogs.windows.com/buildingapps/2015/07/14/windows-sdk-for-facebook/
https://facebooksdk.net/ - 위의 것이 나오기 전에 사용하던 프로젝트
- Windows 10의 경우는 Textbox에서 한글 입력 이슈가 없음(현재 Windows 8.1, Windows Phone 8.1의 경우는 Unity에서 Build한 Windows Store App에서 한글입력(e.g., Nickname 입력 등)이 되지 않음. 해결을 위해서는 입력 시에 Windows 8.1 플랫폼 쪽에서 TextBox 등으로 입력을 받고, 입력이 끝나면 이를 다시 Unity 쪽으로 넘겨주는 Work-around가 필요.
7. Windows 10 플랫폼 용 Feature 적용 - 라이브 타일: Microsoft에서 제공하는 Unity 플러그인이나 상용 플러그인 등을 통해서 혹은 UWP 플랫폼 해당 기능을 구현하고 Unity와 커뮤니케이션 하는 것을 통해서 게임에서 (WNS 서버를 통해서) Live Tile의 내용을 변경하도록 할 수 있다.
- 입력 방식: 키보드 및 마우스 고려, 게임 패드 활용 고려 (터치 스크린이나 특정 디바이스의 보유 유무 등을 체크할 수 있음)
8. Windows 스토어 관련
- 현재 IARC 인증으로 한국을 제외한 국가는 Self-rating이 가능
- Windows 10 패키지와 더불어 구 버전(8.1, 8.0 등)의 Windows Store App 패키지를 복수로 같이 올릴 수 있고, 이때 사용자 OS 환경에 가장 적합한 패키지를 다운 받게 됨.
- Windows 10부터는 .NET Native로 클라우드에서 컴파일되어 C++ 수준의 성능 및 보안을 갖게 됨. .NET Native로 빌드한 것과 아닌 것의 차이를 스토어 업로드 전에 확인하는 것이 필요. (스토어 업로드 용 패키지를 생성하면 .Net Native 적용 안된 패키지와 .Net Native 적용된 테스트 패키지가 나옴)
- 스토어에 올릴 때 Hidden 설정으로 비공개 테스트를 할 수 있음. (Hidden일 경우도 스토어 인증은 받아야 함. IAP은 테스트 중에는 가격을 0으로 해서 하는 것을 권장. Hidden App은 특정 URL로 혹은 Promotion
Code로 접근 가능)
- 앱이 실행하기 위해 필요한 디바이스의 메모리 크기로 제한할 수 있음. (Windows 10 Mobile 에서 512MB 메모리를 가진 디바이스에서 App 구동이 메모리 때문에 원활치 않으면 512MB 메모리 디바이스를 사용할 수 없게 함. WM10 512MB 디바이스에서 하나의 App이 사용할 수 있는 메모리 량은 190M 정도.) 아래 URL 참고
https://msdn.microsoft.com/en-us/library/windows/apps/mt617335.aspx
- 특정 DirectX 버전 이상에서만 구동 되도록 할 수도 있음
- 스토어 심의는 일반 적인 경우는 24~48시간 내에 완료 됨. (이보다 오래 걸릴 경우는 온라인 지원에 문의를 할 수 있음)
9. Windows 10 게임 최적화
- Visual Studio 의 Graphic Debugger 및 Profiler를 활용해서 CPU, Memory, GPU 등의 성능 측정을 세부적으로 할 수 있어서 생산성 향상.
https://msdn.microsoft.com/en-us/library/hh315751.aspx
https://msdn.microsoft.com/en-us/library/dn435909.aspx
- Performance 고려해야 함.
10. 지원프로그램
DevCenter Benefit: 기술 지원 등의 혜택
https://dev.windows.com/en-us/benefits
Unity Contest, Cocos2d Contest
https://unity3d.com/contest/windows
ID@Xbox:
https://www.xbox.com/ko-KR/developers/id
11. 참고 URL
Porting Unity Games Windows Store: W8,1, WP8.1 대상이지만 W10에서도 적용되는 팁들이 많이 다뤄 짐
https://mva.microsoft.com/en-us/training-courses/porting-unity-games-to-windows-store-and-windows-phone-8351
Porting Guide: 예전 자료지만 W8.0 관련한 Tip 부분의 Direct Communication 등은 W10에서도 참고 가능
https://az527613.vo.msecnd.net/wpchallengefiles/PortingTipsWindowsStoreUnity01.pdf
Porting Tips: 확장 메서드를 이용하는 것 등 확인
https://blogs.msdn.com/b/wsdevsol/archive/2015/01/22/porting-tips-shaving-the-differences-in-the-net-framework-for-windows-runtime-apps.aspx
*추가내용
- Focus 없을 때도 계속 게임이 Play 되게 하려면 5.3 최신 패치 적용 시에 Player Setting에서 Run In Background 체크 필요. (WACK가 안된다고 설명에 나오기는 하는데…)
- 웹 브라우저: 새로운 XAML 페이지를 만들어서 WebView 컨트롤 올리고 이것을 Unity 쪽에서 띄울 수 있음.
- Windows 10 Mobile에 패키지 배포 방법: WP8.1의 경우는 Device Unlock 후에 Deployment Tool 활용, W10M의 경우는 설정에서 Dev Unlock 후에 VS 연결해서 배포하거나 아래 네트워크로 배포.
https://blogs.windows.com/buildingapps/2015/07/09/just-released-windows-10-application-deployment-tool/
- 플랫폼 연동 방법: AppCallback을 이용해서 App 스레드나 UI 스레드에 있는 delegate를 invoke 하는 방식 활용
https://docs.unity3d.com/Manual/windowsstore-appcallbacks.html
- 광고 붙이는 방법: Microsoft Universal Ad Client SDK를 활용
https://dev.windows.com/en-us/monetize/ads
//UWP Sample (Store IAP등 …)
https://github.com/Microsoft/Windows-universal-samples
//Facebook
https://blogs.windows.com/buildingapps/2015/07/14/windows-sdk-for-facebook/
https://github.com/Microsoft/winsdkfb
https://microsoft.github.io/winsdkfb
https://developers.facebook.com/apps/947450155343822/dashboard/
// Cocos2d-x 포팅 가이드
https://github.com/cocos2d/cocos2d-x
https://blogs.windows.com/buildingapps/2015/06/15/running-cocos2d-x-on-windows-10/
https://channel9.msdn.com/Series/Build-a-Game-with-Cocos2d-x-for-Windows-Devices
https://msopentech.com/blog/2014/04/24/porting-cocos2d-x-games-to-windows-store-and-windows-phone/