Wrapper experimental do Godot para a Sala de jogos do YouTube

Com esse wrapper, é possível acessar o SDK do YouTube Playables no Godot com o .gd fornecido. O wrapper tem um conector do SDK .js e um arquivo .gd para acelerar o desenvolvimento. Também há um projeto de exemplo disponível que mostra como usar esses scripts no seu projeto.

Os pacotes zip do Godot podem ser baixados no repositório de amostra do Playables.

Uso

  1. Extraia GoogleYTGameWrapper-godot.zip na pasta do projeto, onde você quer que esses scripts fiquem. Este arquivo ZIP contém dois arquivos:
    • YTGameWrapper.gd: usado como uma ponte para o SDK do JavaScript do YT Playables, permitindo um caminho para chamar o SDK no jogo.
    • YTGameSDK.js: usado para se conectar ao SDK do YT Playables. Neste exemplo, vamos colocar esse arquivo na raiz do projeto. É possível mudar isso, mas é necessário atualizar o local do cabeçalho de inclusão.
    • Também há uma versão de exemplo completa do projeto disponível para download no repositório de exemplo da Playables. Para esta versão, use o arquivo zip chamado GoogleYTGameWrapper-godot-with-sample.zip.
  2. Adicionamos um novo script Autoload Global para YTGameWrapper.gd que foi descompactado. Isso pode ser definido em Project -> Project Settings... -> Globals. Selecione o arquivo YTGameWrapper.gd na caixa de entrada Path e adicione YTGameWrapper na caixa de entrada Node Name. Por fim, selecione + Add.
    • Isso vai disponibilizar o script globalmente no código, permitindo que você chame YTGameWrapper conforme necessário.
  3. Verifique se a plataforma do projeto Godot está configurada para exportar para Web. Essa configuração está na guia "Exportar". Selecione Project e depois Export....
  4. No painel "Exportar", adicione uma nova predefinição selecionando Add... e, em seguida, Web. Depois de criado, adicione esse código à caixa de configuração Head Include.
<script src="https://www.youtube.com/game_api/v1">// Load YT Game API code</script>
<script src="YTGameSDK.js"></script>
  1. Exporte seu projeto da Web no painel Export selecionando Export Project... e o local de build.
  2. Depois que o projeto for criado, navegue até a pasta de build e copie o arquivo YTGameSDK.js para essa pasta. Não se esqueça de incluí-lo ao enviar o build.
  3. Verifique se você está seguindo os requisitos técnicos do projeto e use o pacote de testes do Playables.

Exemplos

Esta seção tem alguns exemplos de como usar o wrapper .gd, não é a lista completa de APIs disponíveis. Para conferir a lista completa de APIs disponíveis, consulte o SDK Playables do YouTube. Isso também pressupõe que seu projeto esteja configurado conforme descrito na seção "Uso".

sendScore

Este exemplo mostra uma implementação de sendScore(int points) em .gd:

var current_game_score: int = 0

...

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

onPause

Este é um exemplo de como um jogo pode detectar eventos Pause provenientes de jogos do YouTube para pausar o mecanismo quando necessário:

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 é um exemplo de como usar saveData e enviá-lo ao SDK do 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 é um exemplo de como usar loadData e enviá-lo ao SDK do 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 é um exemplo de como usar requestInterstitialAd, indicando que é um bom momento para mostrar um anúncio intersticial, se disponível. Para melhores resultados, faça essa chamada durante uma pausa na jogabilidade, por exemplo, no final de um nível.

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

    # logic for game over

Como dividir recursos no seu projeto Godot (carregamento lento)

Um dos principais problemas que os desenvolvedores destacaram ao usar o Godot é ficar abaixo dos requisitos individuais de tamanho de arquivo e do total de tamanho do pacote.

O carregamento lento de recursos é uma ótima otimização que você pode fazer para seu projeto, já que é possível carregar recursos, níveis e dados conforme necessário. Nossa equipe de certificação pode dispensar as restrições de tamanho de arquivo geral se isso for feito corretamente, já que o jogo completo não será carregado de antemão, mas quando um usuário navegar pelo produto.

Para ajudar no carregamento adequado, o Godot oferece pacotes de exportação, patches e mods (link em inglês). Sugerimos gerar arquivos .pck que sejam carregados conforme necessário.

Consulte a referência completa da API YT Playables.