Wrapper experimental de Godot para la Sala de juegos de YouTube

Con este wrapper, puedes acceder al SDK de YouTube Playables en Godot con el .gd proporcionado. El wrapper tiene un conector de SDK .js y un archivo .gd para ayudarte a acelerar el desarrollo. También hay un proyecto de muestra disponible que muestra cómo puedes usar estas secuencias de comandos en tu proyecto.

Los paquetes ZIP de Godot se pueden descargar desde nuestro repositorio de muestras de Playables.

Uso

  1. Extrae GoogleYTGameWrapper-godot.zip en la carpeta de tu proyecto, donde deseas que residan estas secuencias de comandos. Este archivo ZIP contiene dos archivos:
    • YTGameWrapper.gd: Se usa como puente al SDK de JavaScript de YT Playables, lo que permite una ruta de acceso para llamar al SDK desde el juego.
    • YTGameSDK.js: Se usa para conectarse al SDK de YT Playables. En este ejemplo, colocaremos este archivo en la raíz de tu proyecto. Puedes cambiar esto, pero debes actualizar la ubicación de Head Include.
    • También hay una versión de muestra completa del proyecto disponible para descargar desde nuestro repositorio de muestra de Playables. Para esta versión, usa el archivo ZIP llamado GoogleYTGameWrapper-godot-with-sample.zip.
  2. Se agregó un nuevo elemento Autoload Global para la secuencia de comandos YTGameWrapper.gd que se descomprimió. Esto se puede configurar en Project -> Project Settings... -> Globals. Selecciona el archivo YTGameWrapper.gd en el cuadro de entrada Path y agrega YTGameWrapper en el cuadro de entrada Node Name. Por último, selecciona + Add.
    • Esto hará que la secuencia de comandos esté disponible de forma global en tu código, lo que te permitirá llamar a YTGameWrapper según sea necesario.
  3. Verifica que la plataforma de tu proyecto de Godot esté configurada para exportar a Web. Este parámetro de configuración se encuentra en la pestaña Exportar. Selecciona Project y, luego, Export....
  4. En el panel Exportar, agrega un nuevo parámetro de configuración predeterminado seleccionando Add... y, luego, Web. Una vez creado, agrega este código al cuadro de configuración Head Include.
<script src="https://www.youtube.com/game_api/v1">// Load YT Game API code</script>
<script src="YTGameSDK.js"></script>
  1. Para exportar tu proyecto web en el panel Export, selecciona Export Project... y elige la ubicación de compilación.
  2. Una vez que se compile tu proyecto, navega a la carpeta de compilación y copia el archivo YTGameSDK.js en esta carpeta. Asegúrate de incluirlo cuando envíes la compilación.
  3. Verifica que cumples con los requisitos técnicos de tu proyecto y asegúrate de usar el paquete de pruebas de Playables.

Ejemplos

En esta sección, se incluyen algunos ejemplos de cómo usar el wrapper de .gd, pero no es la lista completa de las APIs disponibles. Para obtener la lista completa de las APIs disponibles, consulta el SDK de YouTube Playables. Esto también supone que tu proyecto está configurado como se describe en la sección Uso.

sendScore

En este ejemplo, se muestra una implementación de sendScore(int points) en .gd:

var current_game_score: int = 0

...

func add_score(scoreAdded: int):
    current_game_score += scoreAdded
    YTGameWrapper.send_score(current_game_score)

onPause

Este es un ejemplo de cómo un juego puede escuchar eventos Pause provenientes de YT Playables para pausar su motor cuando sea necesario:

func _ready() -> void:
    # hook up on game paused
    YTGameWrapper.game_paused.connect(self._on_game_paused)
    # hook up on game resumed and game save data received events
    YTGameWrapper.game_resumed.connect(self._on_game_resumed)

func _on_game_paused():
    # Pause your game logic, audio, etc.
    get_tree().paused = true
    
func _on_game_resumed():
    # Resume your game logic, audio, etc.
    get_tree().paused = false

saveData

Este es un ejemplo de cómo usar saveData y enviarlo al SDK de YT Playables:

var current_game_score: int = 0
var time_elapsed: float = 0.0

...

func save_game_data():
    YTGameWrapper.save_data('{"BestScore": "' + str(current_game_score) + '","BestTime": "' +str(time_elapsed)+ '"}')

loadData

Este es un ejemplo de cómo usar loadData y enviarlo al SDK de YT Playables:

func _ready() -> void:
    # hook up game load data received event
    YTGameWrapper.load_data_received.connect(self._on_load_data)
    # Request to load data when the game starts
    YTGameWrapper.load_data()

func _on_load_data(save_data_string: String):
    if not save_data_string.is_empty():
        # Add logic to parse the save_data_string and restore game state
        print("Loaded data: ", save_data_string)

requestInterstitialAd

Este es un ejemplo de cómo usar requestInterstitialAd, que indica que es un buen momento para mostrar un anuncio intersticial, si está disponible. Para obtener los mejores resultados, realiza esta llamada durante una pausa del juego, por ejemplo, al final de un nivel.

func set_game_over(didWin: bool):
    YTGameWrapper.request_interstitial_ad()

    # logic for game over

Cómo dividir recursos en tu proyecto de Godot (carga diferida)

Uno de los principales problemas que los desarrolladores destacaron cuando usaban Godot es mantenerse dentro de los requisitos individuales de tamaño de archivo y los requisitos totales de tamaño del paquete.

La carga diferida de recursos es una gran optimización que puedes hacer para tu proyecto, ya que puedes cargar recursos, niveles y datos a medida que se necesitan. Nuestro equipo de certificación puede renunciar a las restricciones generales de tamaño de archivo si se hace de forma correcta, ya que el juego completo no se cargará de antemano, sino a medida que un usuario navegue por tu producto.

Para facilitar la carga correcta, Godot ofrece Exporting packs, patches, and mods (vínculo en inglés). Te sugerimos que generes archivos .pck que se carguen según sea necesario.

Consulta la referencia completa de la API de YT Playables.