1. 소개
최종 업데이트: 2022년 10월 18일
PC용 Google Play 게임즈에 맞춰 게임을 어떻게 준비하나요?
Google Play 게임즈를 통해 모바일 게임을 Windows PC에 쉽게 출시할 수 있습니다. 즉, 게임을 재설계하거나 비즈니스 모델을 재설계하지 않고도 플레이어 참여도와 잠재고객을 늘릴 수 있습니다. 새로운 PC 플레이어에게 최상의 환경을 제공하기 위해 몇 가지 사항을 변경해야 합니다.
학습할 내용
이 Codelab에서는 게임을 시작하는 데 필요한 요구사항 체크리스트의 기본적인 부분을 살펴보고 PC용 Google Play 게임즈에서 자체 Unity 게임을 준비하는 데 도움이 됩니다. Play 게임즈 로그온, Play Integrity API와 같은 보다 심층적인 통합은 다루지 않습니다.
- Unity에서 x86 아키텍처용으로 빌드하는 방법
- Google Play 게임즈 에뮬레이터 테스트 및 배포 방법
- PC에서 잘 표시되도록 사용자 인터페이스를 수정하는 방법
- Google Play 게임즈 에뮬레이터에서 실행 중인지 감지하고 적절하게 게임을 조정하는 방법
필요한 항목
- Unity 2020 LTS 설치 (이 Codelab은 2020.3.30f1로 빌드됨)
- Google Play 게임즈 에뮬레이터
2. 설정
새 프로젝트 열기 또는 만들기
- 2D Platformer 마이크로게임을 사용하여 새 프로젝트를 만들거나 자체 프로젝트를 엽니다.
- 프로젝트에서 File -> Build Settings(빌드 설정)를 클릭하고 Android용으로 빌드하도록 설정되어 있는지 확인합니다.
3. Google Play 게임즈 에뮬레이터 준비
먼저 에뮬레이터를 다운로드합니다.
설치하면 창에 Android 데스크톱이 표시됩니다.
이는 게임 개발에 적합한 모든 기능을 갖춘 고성능 Android 환경입니다. localhost의 기기로 Android 디버그 브리지 (adb)에 표시됩니다.
❯ adb devices List of devices attached localhost:6520 device
에뮬레이터를 감지하려면 최신 버전의 adb가 필요합니다. Android 스튜디오와 함께 번들로 제공되는 버전은 작동하지만, Unity와 함께 제공되는 adb는 작동하지 않을 수 있습니다. 호환되는 버전은 에뮬레이터와 함께 번들로 제공되며 C:\Program Files\Google\Play Games Developer Emulator\current\emulator
에서 확인할 수 있습니다. 최상의 개발자 환경을 위해 Android 스튜디오를 설치하고 이를 사용하여 Android SDK를 관리하는 것이 좋습니다.
에뮬레이터가 adb에서 연결 해제되면 다음과 같이 명령줄에서 다시 연결합니다.
adb connect localhost:6520
4. 빌드하고 에뮬레이터에 직접 배포하도록 Unity 구성 (선택사항)
Unity와 함께 제공된 adb 버전이 에뮬레이터와 호환되지 않을 수 있습니다. 반드시 파일 -> Build Settings를 선택하고 Run Device 대화상자가 표시되어 있는지 확인합니다.
프로젝트, 빌드 프로세스, 사용감 수준에 따라 Google Play 게임즈 에뮬레이터에 직접 배포하도록 Unity를 구성하거나 APK를 빌드하고 adb install
를 사용하여 수동으로 배포하도록 선택할 수 있습니다. 수동으로 배포하려면 최소한의 변경이 필요하지만 반복 주기가 느려질 수 있습니다.
다음 두 단계에 따라 에뮬레이터에 직접 배포합니다.
- 다른 Unity SDK(Android 스튜디오에서 설치하는 것이 좋음)를 사용하도록 Unity를 구성합니다.
- 빌드 도구 버전을 업데이트하여 Unity의 버그를 해결합니다.
Unity와 함께 제공되는 Android SDK 버전은 에뮬레이터를 감지하지 못할 가능성이 크므로 Android 스튜디오를 사용하여 최신 SDK를 설치합니다.
- Android 스튜디오를 열고 Edit -> 환경설정 -> 외부 도구.
Android SDK Tools Installed with Unity
를 선택 해제하고 Android 스튜디오 설치 경로 (일반적으로AppData/Local/Android/sdk
)를 제공합니다.Android NDK
옵션은 그대로 둡니다.
연결된 기기를 새로고침하면 빌드 창에 Google HPE device (localhost:6520)
가 표시됩니다.
이 버그의 상태와 Unity 버전에 따라 빌드 도구 버전을 변경해야 할 수도 있습니다. 이렇게 하려면 mainTemplate.gradle
및 launcherTemplate.gradle
가 생성되는지 확인합니다.
- Project Settings(프로젝트 설정) 창을 열고 Player Settings(플레이어 설정)를 찾고
Publishing Settings
섹션을 찾습니다. - Build 옵션까지 아래로 스크롤한 후 'Custom Main Gradle Template'을 선택합니다. 및 'Custom Launcher Gradle Template'은
Assets\Plugins\Android\
아래에 두 Gradle 파일을 모두 생성합니다.
**BUILDTOOLS**
문자열의 인스턴스를30.0.0
로 바꿉니다. 이제 두 파일에서 코드 섹션이 다음과 같이 표시됩니다.
android { compileSdkVersion **APIVERSION** buildToolsVersion '30.0.0'
5. Chromebook에 배포 (선택사항)
ChromeOS 기기를 사용하면 Google Play 게임즈 에뮬레이터에 액세스하지 않고도 Google Play 게임즈용 게임 개발을 시작할 수 있습니다. PC용 Google Play 게임즈와 마찬가지로 Chromebook은 키보드와 마우스, 대형 화면, x86 구성으로 사용할 수 있습니다. Chromebook에서는 Android Logcat Unity 플러그인을 사용합니다.
- Package Manager를 열고
Unity Registry
에서Android Logcat
를 검색합니다.
또한 Android 개발을 위해 Chromebook을 구성해야 합니다. Linux를 사용 설정하여 시작하세요.
- 설정을 선택합니다 -> 개발자 -> 리눅스입니다.
그런 다음 ADB 디버깅을 사용 설정합니다.
- 설정 -> 개발자 -> Linux 개발 환경 -> Android 앱 개발 -> ADB 디버깅을 사용 설정합니다.
또한 Chromebook의 IP 주소를 얻는 것이 좋습니다. 가장 쉬운 방법은
- 네트워크 정보 아이콘을 클릭하여 Chromebook의 IP 주소를 확인합니다.
- 창 -> 분석 -> Android Logcat을 클릭하여 Android Logcat 창을 엽니다.
- 기기 목록을 엽니다. 현재 연결된 것이 없는 경우
No Device
라고 표시될 수 있습니다.
- 기타 연결 옵션을 클릭하고 Chromebook의 IP 주소를 입력합니다.
- 연결을 클릭합니다. Success 창이 표시됩니다.
이제 Chromebook이 Unity의 Run Device 목록에 표시됩니다 (먼저 화면을 새로고침해야 할 수 있음).
이제 Chromebook에 게임을 배포하고 PC와 유사한 하드웨어에서 테스트와 개발을 시작할 수 있습니다.
6. 테스트 빌드 배포
Google Play 게임즈를 사용하려면 게임의 x86 버전을 배포해야 합니다. 이는 데스크톱 PC에서 성능 벤치마크를 달성하는 방법의 일부입니다. Unity의 모든 LTS 변형은 x86 및 x86-64 호환 Android 빌드('Chrome OS' 라벨)를 생성할 수 있으며 Unity 버전 2018 및 이전 버전은 x86 빌드를 생성할 수 있습니다. 이러한 아키텍처를 활용하려면 먼저 IL2CPP 스크립팅 백엔드로 전환해야 합니다. 이는 arm64 지원을 위해 이미 프로덕션에서 사용 중일 가능성이 높습니다.
- File(파일) -> Build Settings를 클릭하여 Build Settings 창을 연 다음 Player Settings를 클릭합니다.
- 기타 설정 섹션으로 이동하여
Scripting Backend
을IL2CPP
로 전환합니다.
x86 또는 x86-64 지원도 사용 설정해야 합니다. Google Play 게임즈 플랫폼에서 출시하려면 x86만 지원하면 되지만 x86-64를 사용하는 것이 좋습니다.
Unity 번들의 Frame Pacing(프레임 속도) 라이브러리 버전도 Google Play 게임즈와 호환되지 않으므로 실행 시 게임이 비정상 종료됩니다.
- Player Settings(플레이어 설정) 창에서 Frame Pacing을 사용 중지하려면 Resolution and Presentation(해상도 및 프레젠테이션) 섹션을 열고 Optimized Frame Pacing(최적화된 프레임 속도)을 선택 해제합니다.
이제 빌드할 준비가 되었습니다.
- Build Settings(빌드 설정) 창을 다시 열고 Build And Run(빌드 및 실행)을 클릭합니다. 게임이 에뮬레이터 창에 표시됩니다.
게임을 배포할 수 없는 경우 'Google HPE device (localhost:6520)'가 표시되는지 확인합니다. "Run Device"에 목록. 누락된 경우 HPE_Dev가 실행 중이며 Android 홈 화면이 표시되는지 확인합니다. 그래도 기기 목록에 표시되지 않으면 사용 중인 정확한 adb.exe
로 adb connect localhost:6520
를 실행합니다. Android Logcat Unity 플러그인을 사용하는 경우 Tools -> Terminal(터미널)을 열어 Unity에서 사용하는 것과 동일한 adb.exe
를 사용하여 디렉터리의 터미널을 엽니다.
터미널 열기" 강조 표시" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" 910/91/91019101aa2_72.png 72w, 72w, img/9101.9195.95. . img/910. 36w, img/9101ce3c955, 36w, img/9101ce3c955, 36w, img/9101ce3c955, , , img/9101ce3c955, 48w, img/9101ce3c955fb1aaa2_72.png 72w, 72w, 72w, img/910.919.95. . img/910.9. 9195. . img/910.9.95. . 72w, 72w, img/910.919.95. . . 72w, 72w, img/910.919.95. . . 72w, 72w, 크기='max-width: 840px) 100vw, 856px">
7. PC에 맞게 게임 조정
가능하면 플랫폼에 구애받지 않는 측정항목이나 특정 기능의 존재 여부에 따라 게임을 변경하세요. 예를 들어 Android 플레이어는 마우스와 키보드를 연결하거나 모니터에 연결할 수 있으므로 기기 설정에 따라 컨트롤 스킴이나 HUD 요소를 변경하면 지원되는 모든 플랫폼에서 PC용 Google Play 게임즈의 작동을 활용할 수 있습니다.
플레이어가 Google Play 게임즈에 있는지 아니면 ChromeOS에 있는지에 따라 로직을 변경하는 것이 타당하다면 이 스크립트를 사용하면 HPE_EXPERIENCE
시스템 기능을 확인하여 로직을 감지할 수 있습니다.
using UnityEngine;
public class GoogleDeviceUtilities
{
#if UNITY_ANDROID && !UNITY_EDITOR
private static AndroidJavaObject PackageManager
{
get
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
return currentActivity.Call<AndroidJavaObject>("getPackageManager");
}
}
public static bool IsChromeOS => PackageManager.Call<bool>("hasSystemFeature", "org.chromium.arc");
public static bool IsGooglePlayGames =>
PackageManager.Call<bool>("hasSystemFeature", "com.google.android.play.feature.HPE_EXPERIENCE");
public static bool HasKeyboard
{
get
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
var resources = currentActivity.Call<AndroidJavaObject>("getResources");
var configuration = resources.Call<AndroidJavaObject>("getConfiguration");
var keyboard = configuration.Get<int>("keyboard");
return keyboard == 2; // Configuration.KEYBOARD_QWERTY
}
}
#else
public static bool IsChromeOS => false;
public static bool IsGooglePlayGames => false;
public static bool HasKeyboard => true;
#endif
}
PC는 일반적인 Android 휴대전화보다 디스플레이가 더 큽니다. 가능한 경우 HUD가 화면의 20% 이상을 차지하지 않는 것이 좋습니다. 많은 모바일 게임에서 '화면 크기에 따라 조정'을 사용하므로 이를 '일정한 물리적 크기'로 변경합니다. 또는 '고정 픽셀 크기' 이 목표를 달성하기 위한 좋은 첫걸음이 될 수 있습니다
Google Play 게임즈에서 실행 중인 것이 감지되면 런타임에 QualitySettings.SetQualityLevel
명령어를 사용하여 품질 설정을 동적으로 설정하는 것이 좋습니다. Google Play 게임즈 에뮬레이터는 ANGLE을 사용하여 OpenGL Unity에서 내보낸 네이티브 DirectX 또는 Vulkan 명령어를 실행하므로 모바일 게임 빌드에서 사용할 수 있는 것보다 높은 그래픽 충실도를 달성할 수 있습니다.
8. 입력 처리
Google Play 게임즈에서 제공되는 게임은 마우스 및 키보드 입력을 중심으로 구축되어야 합니다. 마우스와 키보드로 게임과 상호작용하는 방법을 계획해야 하므로 지금 시간을 들여 입력 SDK unitypackage를 획득하세요. 이 페이지에 다운로드가 표시되지 않으면 play-mp-libs 그룹의 계정으로 로그인했는지 확인합니다.
많은 게임은 테스트 목적으로 편집기에서 개발용 기본 마우스 및 키보드 컨트롤을 빌드합니다. 가능한 경우 ChromeOS 기기 또는 Google Play 게임즈 에뮬레이터에서 실행할 때 이 기능을 사용 설정하는 것이 좋습니다.
기본적으로 Google Play 게임즈 및 ChromeOS는 마우스 입력을 시뮬레이션된 터치로 변환합니다. Input.GetTouch
및 Input.touchCount
를 사용하면 게임이 정상적으로 계속 작동합니다. 듀얼 엄지 컨트롤이나 손가락을 모으거나 펼쳐 확대/축소하는 것과 같은 멀티 터치 입력을 사용하는 경우 키 누름에 작업을 매핑해야 합니다. 또한 키 누름에 인게임 작업을 매핑해야 합니다. 예를 들어 i를 눌러 인벤토리를 열고, Esc를 눌러 대화상자를 닫고, Enter를 눌러 인게임 메시지를 보내세요.
2D 플랫폼 게임 마이크로게임은 화살표로 움직이고 우주로 점프합니다. 자체 게임을 사용하는 경우 다음 단계를 위해 선호하는 키 결합이 있는지 확인하세요.
9. 입력 SDK 통합
이제 마우스와 키보드 컨트롤을 설정했으므로 입력 SDK 지원을 추가해야 합니다. 이렇게 하면 플레이어가 편리한 팝오버를 통해 PC 입력을 찾는 데 도움이 됩니다.
- SDK를 프로젝트에 가져온 후
InputMappingProviderBehaviour.cs
라는 파일을 만들고 다음 콘텐츠를 추가합니다.
using System.Collections.Generic; using Google.Play.InputMapping; using UnityEngine; using Input = Google.Play.InputMapping.Input; public class InputMappingProviderBehaviour : MonoBehaviour { private void Start() { Input.GetInputMappingClient().RegisterInputMappingProvider(new MyInputMappingProvider()); } private class MyInputMappingProvider : InputMappingProvider { public InputMap OnProvideInputMap() { return new InputMap { InputGroups = new List<InputGroup> { }, MouseSettings = new MouseSettings { InvertMouseMovement = false, AllowMouseSensitivityAdjustment = false } }; } } private enum ActionIds { } }
- 이제 게임에서 사용 중인 작업 목록으로
ActionIds
를 채웁니다. 2D 플랫폼 게임 마이크로게임의 경우 작업은 왼쪽, 오른쪽, 점프입니다.
private enum ActionIds { Left, Right, Jump }
OnProvideInputMap
에서 각 작업의InputAction
를 만듭니다. 이를 위해 작업 이름, 입력, 바인딩될 마우스 버튼 또는 키 코드가 필요합니다. 샘플 게임의 경우:
var leftAction = new InputAction { ActionLabel = "Walk Left", UniqueId = (int)ActionIds.Left, InputControls = new InputControls { AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_DPAD_LEFT } } }; var rightAction = new InputAction { ActionLabel = "Walk Right", UniqueId = (int)ActionIds.Right, InputControls = new InputControls { AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_DPAD_RIGHT } } }; var jumpAction = new InputAction { ActionLabel = "Jump", UniqueId = (int)ActionIds.Jump, InputControls = new InputControls { AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_SPACE } } };
- 다음으로 이러한 입력 작업을 그룹으로 분류합니다.
마이크로게임의 경우 그룹이 하나뿐이지만 플레이어가 필요한 액션을 찾을 수 있도록 필요한 만큼 그룹을 만들 수 있습니다. 다음을 OnProvideInputMap
에 추가합니다.
var movementInputGroup = new InputGroup { GroupLabel = "Movement", InputActions = new List<InputAction> { leftAction, rightAction, jumpAction } };
- 만든 모든 입력 그룹을 입력 맵에 추가합니다. 다음과 같이
OnProvideInputMap
의 return 문을 수정합니다.
return new InputMap { InputGroups = new List<InputGroup> { movementInputGroup }, MouseSettings = new MouseSettings { InvertMouseMovement = false, AllowMouseSensitivityAdjustment = false } };
- 마지막으로 만든 스크립트를 게임에 추가합니다.
- 게임을 다시 배포할 때
Shift+Tab
키를 눌러 인게임 오버레이를 엽니다.
- 구성한 컨트롤을 보려면 컨트롤을 클릭합니다.
10. 삽입된 웹 보기 삭제
플레이어에게 우수한 환경을 제공하려면 삽입된 웹 뷰를 삭제해야 합니다. 개인정보처리방침이나 서비스 약관과 같은 항목을 표시하기 위해 삽입된 웹 보기를 사용하는 것이 일반적입니다. Google Play 게임즈에서 작동하지만 삽입된 '모바일' 브라우저를 사용하는 것이 좋으며, PC 플레이어에게는 혼란을 일으킬 수 있습니다. 따라서 Unity에서 확장 프로그램을 사용하여 삽입된 브라우저를 표시하는 경우 Application.OpenURL(url)
로 대체합니다.
11. 권한 및 기능
Google Play 게임즈에서 지원되지 않는 여러 Android 기능 및 권한이 있습니다. 일반적인 규칙은 PC 빌드에서 권한 대화상자를 표시해서는 안 됩니다. 빌드를 준비했으므로 이제 일반적인 새 설치를 진행하고 표시되는 대화상자를 기록하여 '할 일'에 추가하는 것이 좋습니다. 목록을 참조하세요.
일부 Unity 게임은 Android.Permission API를 사용하여 권한을 요청합니다. 이를 if (GoogleDeviceUtilities.IsGooglePlayGames)
검사로 래핑하고 해당하는 경우 실패 로직으로 직접 이동해야 합니다.
12. 데스크톱 최적화
Google Play 게임즈는 일반적인 Android 휴대전화와는 몇 가지 차이점이 있으므로 이에 따라 게임을 구성하는 것이 좋습니다.
텍스처 압축을 위해 DXT로 전환하세요. ETC와 같은 일반적인 Android 텍스처 형식은 플레이어의 GPU로 직접 전달할 수 없는 경우 런타임 시 메모리에서 디코딩됩니다. ASTC는 최상의 데스크톱 호환성을 제공하지만 게임의 예상 동작을 확인하려면 데스크톱 GPU 프로파일링 도구를 사용해야 합니다.
현재 데스크톱 GPU에서 실행 중이므로 그래픽 품질을 높이는 것이 좋습니다. 품질 아래 프로젝트 설정에서 직접 조정할 수 있습니다.
13. 축하합니다
Google Play 게임즈 게임 작업을 시작하기 위한 준비가 모두 완료되었습니다. 게임 테스트와 반복을 시작할 수 있습니다. 동일한 코드베이스를 유지하더라도 게임을 네이티브 PC 게임과 같은 느낌을 주는 것이 좋습니다.
다음 단계
Google Play 게임즈에 게임을 출시하려면 더 많은 작업을 해야 합니다.
- 최신 정보는 빠른 시작을 참고하세요.
- Play 게임즈 서비스 로그인 v2로 업그레이드하여 실행 시 자동으로 플레이어가 로그인되도록 하고 연속성 요구사항을 충족하세요.
- Play Integrity API를 구현하여 PC 환경이 모바일 환경만큼 안전한지 확인합니다.
마지막으로 Google Play 게임즈 지원을 위해 지금까지 한 많은 작업은 ChromeOS에서 출시하는 데 도움이 되므로 PC와 함께 해당 플랫폼을 지원하는 것을 고려해야 합니다.