Cómo comenzar a usar Unity y Google Play Juegos para PC

1. Introducción

Logotipo de Google Play Juegos

Última actualización: 18/10/2022

¿Cómo preparas tu juego para Google Play Juegos para PC?

Google Play Juegos te permite llevar tu juego para dispositivos móviles a PCs con Windows fácilmente. Esto significa que puedes aumentar la participación de los jugadores y el público sin tener que rediseñar tu juego ni tu modelo de negocio. Aún debes realizar algunos cambios para brindar a los nuevos jugadores de PC la mejor experiencia posible.

Qué aprenderás

Este codelab abarca las partes básicas de la lista de tareas de requisitos para poner en marcha tu juego y te ayudará a preparar tu propio juego de Unity para Google Play Juegos para PC. No se abordan las integraciones más detalladas, como el inicio de sesión de Play Juegos y la API de Play Integrity.

  • Cómo compilar para la arquitectura x86 de Unity
  • Cómo realizar pruebas e implementar en el emulador de Google Play Juegos
  • Cómo modificar la interfaz de usuario para que se vea bien en una PC
  • Cómo detectar si estás ejecutando el emulador de Google Play Juegos y adaptar tu juego según corresponda

Requisitos

2. Prepárate

Abre o crea un proyecto nuevo

  1. Crea un proyecto nuevo con el microjuego de plataformas 2D o abre tu propio proyecto.

La unidad

  1. Desde el proyecto, selecciona File -> Build Settings y verifica que puedas compilar para Android.

Una captura de pantalla de Unity

3. Prepara el emulador de Google Play Juegos

Comienza por descargar el emulador.

Después de instalarla, deberías ver un escritorio de Android en una ventana:

Captura de pantalla de la ventana del emulador de Google Play Juegos. Se mostrará la pantalla principal de Android.

Este es un entorno de Android de alto rendimiento con todas las funciones adecuado para el desarrollo de juegos. Debería aparecer en Android Debug Bridge (adb) como un dispositivo en localhost:

❯ adb devices
List of devices attached
localhost:6520  device

Necesitas una versión reciente de adb para detectar el emulador. La versión incluida en Android Studio funciona, pero es posible que adb que se incluye con Unity no. Con el emulador, se incluye una versión compatible. Puedes encontrarla en C:\Program Files\Google\Play Games Developer Emulator\current\emulator. Para obtener la mejor experiencia como desarrollador, te recomendamos instalar Android Studio y usarlo para administrar el SDK de Android.

Si el emulador se desconecta de adb, vuelve a conectarlo desde la línea de comandos de la siguiente manera:

adb connect localhost:6520

4. Configura Unity para compilar e implementar en el emulador directamente (opcional)

Es posible que la versión de adb que se incluye con Unity no sea compatible con el emulador. Para estar seguro, selecciona Archivo -> Build Settings y verifica el diálogo Run Device para ver si aparece.

Run Device en la

Según el proyecto, el proceso de compilación y el nivel de comodidad, puedes configurar Unity para implementarlo directamente en el emulador de Google Play Juegos, o bien compilar un APK y, luego, implementarlo manualmente con adb install. Para implementarla de forma manual, se requieren la menor cantidad de cambios, pero puede ralentizar tu ciclo de iteración.

Realiza una implementación en el emulador directamente con estos dos pasos:

  1. Configura Unity para usar otro SDK de Unity, idealmente el que instaló Android Studio.
  2. Actualiza la versión de las herramientas de compilación para solucionar un error en Unity.

Debido a que la versión del SDK de Android que se incluye con Unity probablemente no detecte el emulador, usa Android Studio para instalar un SDK más reciente.

  1. Abre Android Studio y selecciona Edit ->. Preferencias -> Herramientas externas.
  2. Desmarca Android SDK Tools Installed with Unity y proporciona la ruta de acceso a la instalación de Android Studio (por lo general, AppData/Local/Android/sdk). Deja la opción Android NDK sola.

Captura de pantalla de

Cuando actualices los dispositivos conectados, deberías ver Google HPE device (localhost:6520) en la ventana de compilación:

Captura de pantalla de

Según el estado de este error y tu versión de Unity, es posible que también debas cambiar la versión de las herramientas de compilación. Para ello, verifica que estás generando un mainTemplate.gradle y una launcherTemplate.gradle.

  1. Abre la ventana Project Settings de Player Settings y ubica la sección Publishing Settings.
  2. Desplázate hacia abajo hasta las opciones de Build y marca "Custom Main Gradle Template". y "Plantilla personalizada de Gradle para el selector", que generará ambos archivos Gradle en Assets\Plugins\Android\.

Captura de pantalla de

  1. Reemplaza cualquier instancia de la string **BUILDTOOLS** por 30.0.0. En ambos archivos, la sección de código debería decir lo siguiente:
android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '30.0.0'

5. Implementarla en una Chromebook (opcional)

Puedes comenzar a desarrollar juegos para Google Play Juegos sin acceso al emulador de Google Play Juegos con un dispositivo ChromeOS. Al igual que Google Play Juegos para PC, las Chromebooks tienen teclados y mouse, pantallas grandes y están disponibles en configuraciones x86. Usaremos el complemento de Unity de Android Logcat con la Chromebook.

  1. Abre el Administrador de paquetes y busca Android Logcat en Unity Registry.

Ventana del Administrador de paquetes con

También debes configurar la Chromebook para el desarrollo de Android. Primero, habilita Linux.

  1. Selecciona Configuración -> Desarrollador -> Linux.

Imagen animada que muestra cómo habilitar la compatibilidad con Linux.  Se selecciona Desarrollador en la ventana Configuración. Luego, haz lo siguiente:

Luego, habilita la depuración ADB.

  1. Selecciona Configuración -> Desarrolladores -> Entorno de desarrollo de Linux -> Desarrolla apps para Android -> Habilita la depuración por ADB.

La depuración ADB se habilita desde el menú Desarrollador.

También te recomendamos que obtengas la dirección IP de tu Chromebook. La forma más fácil de hacerlo

  1. Haz clic en el ícono de Información de red para obtener la dirección IP de la Chromebook.

Captura de pantalla de la ventana de red abierta en una Chromebook.

Se hace clic en el botón de información de la red, que muestra la dirección IP.

  1. Selecciona Ventana ->. Análisis -> Android Logcat para abrir la ventana Logcat de Android.

Window>Análisis abierto en Unity con

  1. Abre la lista de dispositivos. Si no hay nada conectado actualmente, es posible que aparezca No Device.

Se muestra la ventana Android Logcat con el menú desplegable de dispositivos seleccionado.

  1. Haz clic en Otras opciones de conexión e ingresa la dirección IP de tu Chromebook.

Se abrió la ventana Other Connections. Se ingresó una dirección IP.

  1. Haz clic en Conectar. Deberías ver una ventana de Éxito:

Un cuadro de diálogo que dice

Tu Chromebook ahora aparece en la lista de dispositivos de ejecución de Unity (es posible que primero debas actualizar la pantalla):

La unidad

Ahora puedes implementar juegos en tu Chromebook y comenzar a realizar pruebas y desarrollos en hardware similar a una PC.

6. Implementa una compilación de prueba

Google Play Juegos requiere que implementes una versión x86 de tu juego, lo que forma parte de cómo alcanza sus comparativas de rendimiento en PCs de escritorio. Todas las variantes LTS de Unity pueden generar compilaciones de Android compatibles con x86 y x86-64 (etiquetadas como "Chrome OS"), y Unity versión 2018 y anteriores pueden generar compilaciones x86. Para desbloquear estas arquitecturas, primero debes cambiar al backend de secuencias de comandos IL2CPP, que es probable que ya hagas en producción para admitir arm64.

  1. Selecciona Archivo ->. Build Settings para abrir la ventana Build Settings y, luego, haz clic en Player Settings.

Captura de pantalla de

  1. Ve a la sección Other Settings y cambia Scripting Backend a IL2CPP.

Captura de pantalla de

También debes habilitar la compatibilidad con x86 o x86-64. Para realizar envíos en la plataforma de Google Play Juegos, solo debes admitir x86, aunque recomendamos x86-64.

Captura de pantalla de la sección Configuration (Configuración) de Player Settings (Configuración del reproductor)

La versión de los paquetes de Unity de la biblioteca de Frame Pacing tampoco es compatible con Google Play Juegos, y hace que el juego falle durante el inicio.

  1. Para inhabilitar el ritmo de fotogramas desde la ventana Player Settings, abre la sección Resolution and Presentation y desmarca Optimized Frame Pacing.

Captura de pantalla

Ya está todo listo para la compilación.

  1. Vuelve a abrir la ventana Build Settings y haz clic en Build And Run. Tu juego aparecerá en la ventana del emulador.

Captura de pantalla del emulador de Google Play Juegos con el

Si no puedes implementar el juego, verifica si "Google HPE device (localhost:6520)" en tu "Run Device" lista. Si falta, asegúrate de que se esté ejecutando HPE_Dev y de que puedas ver la pantalla principal de Android. Si aún no aparece en tu lista de dispositivos, ejecuta adb connect localhost:6520 con el adb.exe exacto que usas. Si usas el complemento Android Logcat Unity, selecciona Tools ->. Abre Terminal para abrir una terminal en el directorio con el mismo adb.exe que está usando Unity.

Captura de pantalla de Abrir terminal" destacado" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" Sizes="{max-width: 840px) 100vw, 856px">

7. Cómo adaptar tu juego para PC

Cuando sea posible, intenta hacer cambios en el juego en función de métricas independientes de la plataforma o de la presencia de ciertas funciones. Por ejemplo, un jugador en Android puede conectar un mouse y un teclado, o un monitor, por lo que cambiar el esquema de control o los elementos del HUD en respuesta a la configuración del dispositivo te permite aprovechar el trabajo de Google Play Juegos para PC en todas tus plataformas compatibles.

Si tiene sentido cambiar la lógica en función de si el jugador está en Google Play Juegos o ChromeOS, esta secuencia de comandos te ayudará a detectarlo mediante la verificación de la función del sistema 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
}

Las PCs tienen una pantalla más grande que la de un teléfono Android típico. Siempre que sea posible, te recomendamos que tu HUD no ocupe más del 20% de la pantalla. Como muchos juegos para dispositivos móviles usan "Escalar con el tamaño de la pantalla", se cambia a "Tamaño físico constante". o "Tamaño de píxel constante" puede ser un buen primer paso para alcanzar este objetivo.

Captura de pantalla de

Es posible que también quieras establecer la configuración de calidad de forma dinámica con el comando QualitySettings.SetQualityLevel durante el tiempo de ejecución si detectas que se está ejecutando en Google Play Juegos. El emulador de Google Play Juegos usa ANGLE para emitir comandos nativos de DirectX o Vulkan desde las emisiones de OpenGL de Unity, por lo que es probable que puedas lograr una fidelidad de gráficos mayor que la disponible en las compilaciones de tus juegos para dispositivos móviles.

8. Control de entradas

El envío de juegos en Google Play Juegos debe basarse en la entrada del mouse y del teclado. Deberás planificar cómo interactuar con el juego con un mouse y un teclado, así que tómate el tiempo necesario para adquirir el unitypackage del SDK de entrada. Si no ves una descarga en esa página, asegúrate de haber accedido con una cuenta del grupo play-mp-libs.

Para realizar pruebas, muchos juegos compilan controles básicos del mouse y del teclado para el desarrollo en el editor. Cuando sea posible, te recomendamos que las habilites cuando ejecutes la app en un dispositivo ChromeOS o en el emulador de Google Play Juegos.

De forma predeterminada, Google Play Juegos y ChromeOS convierten la entrada del mouse en un toque simulado. Si usas Input.GetTouch y Input.touchCount, el juego seguirá funcionando como se esperaba. Si dependes de la entrada multitáctil, como los controles del pulgar doble o la acción de pellizcar para hacer zoom, debes asignar la acción a las pulsaciones de teclas. También debes asignar acciones en el juego a pulsaciones de teclas, como presionar i para abrir el inventario, escapar para cerrar los cuadros de diálogo e Intro para enviar mensajes en el juego.

El microjuego de plataformas en 2D usa las flechas para moverse y la barra espaciadora para saltar. Si usas tu propio juego, asegúrate de tener tus vinculaciones de teclas preferidas para el siguiente paso.

9. Integración del SDK de entrada

Ahora que configuraste el mouse y los controles del teclado, debes agregar compatibilidad con el SDK de entrada . Esto ayuda a los jugadores a descubrir las entradas para PC con una práctica ventana emergente:

  1. Después de importar el SDK a tu proyecto, crea un archivo llamado InputMappingProviderBehaviour.cs y agrega el siguiente contenido:
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. Ahora completa ActionIds con la lista de acciones que usas en el juego. Para el microjuego de plataformas en 2D, las acciones son Izquierda, Derecha y Salto:
private enum ActionIds
{
    Left,
    Right,
    Jump
}
  1. En OnProvideInputMap, crea un InputAction para cada acción. Para esto, necesitas el nombre de la acción, la entrada y, luego, los botones del mouse o los códigos de teclas que se vincularán a ella. Para el juego de muestra:
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. A continuación, agrupa estas acciones de entrada.

Para el microjuego, solo hay un grupo, pero puedes crear todos los que necesites para ayudar a los jugadores a encontrar las acciones que necesitan. Agrega lo siguiente a OnProvideInputMap:

var movementInputGroup = new InputGroup
{
    GroupLabel = "Movement",
    InputActions = new List<InputAction>
    {
        leftAction, rightAction, jumpAction
    }
};
  1. Agrega todos los grupos de entrada que creaste a la asignación de entrada. Modifica la sentencia return en OnProvideInputMap para que lea lo siguiente:
return new InputMap
{
    InputGroups = new List<InputGroup> { movementInputGroup },
    MouseSettings = new MouseSettings
    {
        InvertMouseMovement = false,
        AllowMouseSensitivityAdjustment = false
    }
};
  1. Por último, agrega la secuencia de comandos que creaste al juego:

Captura de pantalla de un nodo llamado

  1. Cuando vuelvas a implementar el juego, presiona Shift+Tab para abrir la superposición en el juego.

Captura de pantalla de

  1. Haz clic en Controles para ver los controles que configuraste.

Captura de pantalla de

10. Quitar vistas web incorporadas

Para brindar una excelente experiencia a los reproductores, debes quitar las vistas web incorporadas. Es común usar vistas web incorporadas para mostrar elementos como la Política de Privacidad o las Condiciones del Servicio. Aunque funcionan en Google Play Juegos, se muestran en un dispositivo móvil incorporado en lugar del navegador de escritorio preferido del reproductor, y puede causar cierta confusión para los reproductores de PC. Por lo tanto, en Unity, si usas alguna extensión para mostrar un navegador incorporado, recurre a Application.OpenURL(url).

11. Permisos y funciones

Hay algunas funciones y permisos de Android que no son compatibles con Google Play Juegos. Como regla general, la compilación para PC nunca debe mostrar un diálogo de permisos. Ahora que tienes la compilación lista, una buena opción es pasar por una instalación nueva típica y anotar todos los diálogos que veas para agregar a tu lista de tareas pendientes. lista para enviar tu juego.

Algunos juegos de Unity solicitan permisos mediante la API de Android.Permission. Debes unirlos en verificaciones de if (GoogleDeviceUtilities.IsGooglePlayGames) y, si corresponde, ir directamente a la lógica de fallas.

12. Optimizaciones para computadoras de escritorio

Google Play Juegos tiene algunas diferencias en comparación con un teléfono Android típico, y es posible que desees configurar tu juego según corresponda.

Cambia a DXT para comprimir texturas. Los formatos de textura comunes de Android, como ETC, se decodifican en la memoria durante el tiempo de ejecución si no se pueden pasar directamente a la GPU de un reproductor. ASTC te brinda la mejor compatibilidad de escritorio, aunque debes usar una herramienta de generación de perfiles de GPU para computadoras de escritorio a fin de verificar el comportamiento esperado para tu juego.

La unidad

Como ahora estás ejecutando en una GPU de escritorio, te recomendamos que aumentes la calidad de los gráficos. Puedes ajustarla directamente en la Configuración del proyecto, en Calidad.

Captura de pantalla de

13. Felicitaciones

Tienes todo listo para comenzar a trabajar en tu juego para Google Play Juegos. Puedes comenzar a probar y a iterar tu juego. Recuerda que, si bien puedes mantener tu misma base de código, deberás adaptar tu juego para que parezca nativo de PC.

¿Qué sigue?

Aún queda trabajo por hacer para lanzar un juego en Google Play Juegos:

Por último, gran parte del trabajo que hiciste hasta este punto para brindar compatibilidad con Google Play Juegos también te ayuda a ofrecer apps en ChromeOS,por lo que deberías considerar admitir esa plataforma junto con tu PC.