Unity 및 PC용 Google Play 게임즈 시작하기

1. 소개

Google Play 게임즈 로고

최종 업데이트: 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 게임즈 에뮬레이터에서 실행 중인지 감지하고 그에 따라 게임을 조정하는 방법

필요한 항목

2. 설정

새 프로젝트 열기 또는 만들기

  1. 2D Platformer Microgame을 사용하여 새 프로젝트를 만들거나 자체 프로젝트를 엽니다.

The Unity

  1. 프로젝트에서 File(파일) -> Build Settings(빌드 설정)를 선택하고 Android용으로 빌드하도록 설정되어 있는지 확인합니다.

Unity

3. Google Play 게임즈 에뮬레이터 준비

먼저 에뮬레이터를 다운로드합니다.

설치 후 창에 Android 데스크톱이 표시됩니다.

Google Play 게임즈 에뮬레이터 창의 스크린샷 Android 홈 화면이 표시됩니다.

게임 개발에 적합한 모든 기능을 갖춘 고성능 Android 환경입니다. Android 디버그 브리지 (adb)에 localhost의 기기로 표시됩니다.

❯ 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 버전이 에뮬레이터와 호환되지 않을 수 있습니다. File -> Build Settings를 선택하고 Run Device 대화상자를 확인하여 목록에 있는지 확인합니다.

다음에서 기기 실행

프로젝트, 빌드 프로세스, 숙련도에 따라 Unity를 구성하여 Google Play 게임즈 에뮬레이터에 직접 배포하거나 APK를 빌드하고 adb install를 사용하여 수동으로 배포할 수 있습니다. 수동으로 배포하면 변경사항이 가장 적지만 반복 주기가 느려질 수 있습니다.

다음 두 단계로 에뮬레이터에 직접 배포합니다.

  1. Android 스튜디오에서 설치한 Unity SDK를 비롯한 다른 Unity SDK를 사용하도록 Unity를 구성합니다.
  2. Unity의 버그를 해결하기 위해 빌드 도구 버전을 업데이트합니다.

Unity와 함께 제공되는 Android SDK 버전은 에뮬레이터를 감지하지 못할 수 있으므로 Android 스튜디오를 사용하여 최신 SDK를 설치합니다.

  1. Android 스튜디오를 열고 Edit -> Preferences -> External Tools를 선택합니다.
  2. Android SDK Tools Installed with Unity를 선택 해제하고 Android 스튜디오 설치 경로 (일반적으로 AppData/Local/Android/sdk)를 제공합니다. Android NDK 옵션은 그대로 둡니다.

스크린샷

연결된 기기를 새로고침하면 빌드 창에 Google HPE device (localhost:6520)가 표시됩니다.

스크린샷

이 버그의 상태와 Unity 버전에 따라 빌드 도구 버전도 변경해야 할 수 있습니다. 이렇게 하려면 mainTemplate.gradlelauncherTemplate.gradle을 생성하고 있는지 확인하세요.

  1. 프로젝트 설정 창을 플레이어 설정으로 열고 Publishing Settings 섹션을 찾습니다.
  2. 빌드 옵션까지 아래로 스크롤하고 '맞춤 기본 Gradle 템플릿'과 '맞춤 런처 Gradle 템플릿'을 선택합니다. 그러면 Assets\Plugins\Android\ 아래에 Gradle 파일이 모두 생성됩니다.

스크린샷

  1. **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 플러그인을 사용합니다.

  1. 패키지 관리자를 열고 Unity Registry에서 Android Logcat를 검색합니다.

다음과 같은 패키지 관리자 창

또한 Android 개발을 위해 Chromebook을 구성해야 합니다. 먼저 Linux를 사용 설정합니다.

  1. 설정 -> 개발자 -> Linux를 선택합니다.

Linux 지원을 사용 설정하는 방법을 보여주는 애니메이션 이미지  설정 창에서 개발자가 선택되어 있습니다. 그런 다음

그런 다음 ADB 디버깅을 사용 설정합니다.

  1. 설정 -> 개발자 -> Linux 개발 환경 -> Android 앱 개발 -> ADB 디버깅 사용 설정을 선택합니다.

개발자 메뉴에서 ADB 디버깅이 사용 설정되어 있습니다.

Chromebook의 IP 주소도 확인해야 합니다. 가장 쉬운 방법은

  1. 네트워크 정보 아이콘을 클릭하여 Chromebook의 IP 주소를 확인합니다.

Chromebook에서 네트워크 창이 열려 있는 스크린샷

네트워크 정보 버튼을 클릭하면 IP 주소가 표시됩니다.

  1. Window -> Analysis -> Android Logcat을 선택하여 Android Logcat 창을 엽니다.

Unity에서 창>분석을 열고

  1. 기기 목록을 엽니다. 현재 연결된 기기가 없으면 No Device로 표시될 수 있습니다.

Android Logcat 창이 표시되고 기기 드롭다운이 선택되어 있습니다.

  1. 기타 연결 옵션을 클릭하고 Chromebook의 IP 주소를 입력합니다.

'기타 연결' 창이 열립니다. IP 주소가 입력됩니다.

  1. 연결을 클릭합니다. 성공 창이 표시됩니다.

다음과 같은 대화상자가 표시됩니다.

이제 Chromebook이 Unity의 Run Device 목록에 표시됩니다. 먼저 화면을 새로고침해야 할 수도 있습니다.

The Unity

이제 Chromebook에 게임을 배포하고 PC와 유사한 하드웨어에서 테스트 및 개발을 시작할 수 있습니다.

6. 테스트 빌드 배포

Google Play 게임즈에서는 게임의 x86 버전을 배포해야 합니다. 이는 데스크톱 PC에서 성능 기준에 도달하는 방법의 일부입니다. 모든 LTS 변형의 Unity는 x86 및 x86-64 호환 Android 빌드('ChromeOS' 라벨이 지정됨)를 생성할 수 있으며 Unity 버전 2018 이하에서는 x86 빌드를 생성할 수 있습니다. 이러한 아키텍처를 잠금 해제하려면 먼저 IL2CPP 스크립팅 백엔드로 전환해야 합니다. 이는 arm64 지원을 위해 프로덕션에서 이미 실행하고 있을 가능성이 높습니다.

  1. File(파일) -> Build Settings(빌드 설정)를 선택하여 빌드 설정 창을 연 다음 Player Settings(플레이어 설정)를 클릭합니다.

스크린샷

  1. 기타 설정 섹션으로 이동하여 Scripting BackendIL2CPP로 전환합니다.

스크린샷

x86 또는 x86-64 지원도 사용 설정해야 합니다. Google Play 게임즈 플랫폼에서 제공하려면 x86만 지원하면 되지만 x86-64를 지원하는 것이 좋습니다.

플레이어 설정의 구성 섹션 스크린샷

Unity에서 번들로 제공하는 프레임 속도 라이브러리 버전도 Google Play 게임즈와 호환되지 않으며, 이로 인해 게임이 실행 시 다운됩니다.

  1. Player Settings(플레이어 설정) 창에서 Frame Pacing(프레임 속도)을 사용 중지하려면 Resolution and Presentation(해상도 및 프레젠테이션) 섹션을 열고 Optimized Frame Pacing(최적화된 프레임 속도)을 선택 해제합니다.

스크린샷

이제 빌드할 준비가 되었습니다.

  1. 빌드 설정 창을 다시 열고 빌드 및 실행을 클릭합니다. 게임이 에뮬레이터 창에 표시됩니다.

Google Play 게임즈 에뮬레이터의 스크린샷

게임을 배포할 수 없는 경우 '기기 실행' 목록에 'Google HPE 기기 (localhost:6520)'가 표시되는지 확인하세요. 누락된 경우 HPE_Dev가 실행 중이고 Android 홈 화면이 표시되는지 확인합니다. 그래도 기기 목록에 표시되지 않으면 사용 중인 정확한 adb.exeadb connect localhost:6520를 실행하세요. Android Logcat Unity 플러그인을 사용하는 경우 Tools -> Open Terminal을 선택하여 Unity에서 사용하는 것과 동일한 adb.exe이 있는 디렉터리로 터미널을 엽니다.

스크린샷 터미널 열기'가 강조 표시된 모습" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" srcset="img/9101ce3c95fb1aa2_36.png 36w, img/9101ce3c95fb1aa2_48.png 48w, img/9101ce3c95fb1aa2_72.png 72w, img/9101ce3c95fb1aa2_96.png 96w, img/9101ce3c95fb1aa2_480.png 480w, img/9101ce3c95fb1aa2_720.png 720w, img/9101ce3c95fb1aa2_856.png 856w, img/9101ce3c95fb1aa2_960.png 960w, img/9101ce3c95fb1aa2_1440.png 1440w, img/9101ce3c95fb1aa2_1920.png 1920w, img/9101ce3c95fb1aa2_2880.png 2880w" sizes="(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.GetTouchInput.touchCount을 사용하는 경우 게임은 예상대로 계속 작동합니다. 듀얼 엄지 컨트롤이나 손가락 모으기 확대/축소와 같은 멀티 터치 입력을 사용하는 경우 동작을 키 누름에 매핑해야 합니다. 또한 게임 내 작업을 키 누르기에 매핑해야 합니다(예: i를 눌러 인벤토리를 열고, escape를 눌러 대화상자를 닫고, enter를 눌러 게임 내 메시지를 전송).

2D 플랫폼 게임 마이크로게임에서는 화살표를 사용하여 이동하고 스페이스를 사용하여 점프합니다. 자체 게임을 사용하는 경우 다음 단계에 사용할 기본 키 바인딩이 있는지 확인하세요.

9. 입력 SDK 통합

마우스 및 키보드 컨트롤을 설정했으므로 이제 입력 SDK 지원을 추가해야 합니다. 이렇게 하면 플레이어가 편리한 팝오버를 통해 PC 입력을 발견할 수 있습니다.

  1. 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
    {
    }
}
  1. 이제 게임에서 사용하는 작업 목록으로 ActionIds을 채웁니다. 2D Platformer Microgame의 경우 작업은 Left, Right, Jump입니다.
private enum ActionIds
{
    Left,
    Right,
    Jump
}
  1. 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
        }
    }
};
  1. 그런 다음 이러한 입력 작업을 그룹에 넣습니다.

마이크로게임에는 그룹이 하나만 있지만, 플레이어가 필요한 작업을 찾을 수 있도록 필요한 만큼 그룹을 만들 수 있습니다. OnProvideInputMap에 다음을 추가합니다.

var movementInputGroup = new InputGroup
{
    GroupLabel = "Movement",
    InputActions = new List<InputAction>
    {
        leftAction, rightAction, jumpAction
    }
};
  1. 만든 모든 입력 그룹을 입력 맵에 추가합니다. OnProvideInputMap의 반환 문을 다음과 같이 수정합니다.
return new InputMap
{
    InputGroups = new List<InputGroup> { movementInputGroup },
    MouseSettings = new MouseSettings
    {
        InvertMouseMovement = false,
        AllowMouseSensitivityAdjustment = false
    }
};
  1. 마지막으로 만든 스크립트를 게임에 추가합니다.

&#39;Node&#39;라는 이름의 노드 스크린샷

  1. 게임을 다시 배포할 때 Shift+Tab를 눌러 게임 내 오버레이를 엽니다.

스크린샷

  1. 컨트롤을 클릭하여 구성한 컨트롤을 확인합니다.

스크린샷

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 프로파일링 도구를 사용해야 합니다.

The Unity

이제 데스크톱 GPU에서 실행되므로 그래픽 품질을 높이는 것도 좋습니다. 품질프로젝트 설정에서 직접 조정할 수 있습니다.

스크린샷

13. 축하합니다

Google Play 게임즈용 게임을 개발하기 위한 모든 준비가 완료되었습니다. 게임 테스트 및 반복을 시작할 수 있습니다. 동일한 코드 베이스를 유지할 수 있지만 네이티브 PC 게임처럼 느껴지도록 게임을 조정해야 합니다.

다음 단계

Google Play 게임즈에서 게임을 출시하려면 다음 작업을 추가로 수행해야 합니다.

마지막으로, 지금까지 Google Play 게임즈를 지원하기 위해 수행한 작업의 대부분은 ChromeOS에서 출시하는 데도 도움이 되므로 PC와 함께 해당 플랫폼을 지원하는 것이 좋습니다.