Experimenteller YouTube Playables-Godot-Wrapper

Mit diesem Wrapper kannst du in Godot über die bereitgestellte .gd auf das YouTube Playables SDK zugreifen. Der Wrapper enthält einen .js-SDK-Connector und eine .gd-Datei, um die Entwicklung zu beschleunigen. Es gibt auch ein Beispielprojekt, das zeigt, wie Sie diese Scripts in Ihrem Projekt verwenden können.

Godot-ZIP-Pakete können aus unserem Beispiel-Repository für Playables heruntergeladen werden.

Nutzung

  1. Entpacken Sie GoogleYTGameWrapper-godot.zip in Ihrem Projektordner, in dem sich diese Scripts befinden sollen. Diese ZIP-Datei enthält zwei Dateien:
    • YTGameWrapper.gd: Wird als Brücke zum YT Playables JavaScript SDK verwendet, um das SDK im Spiel aufzurufen.
    • YTGameSDK.js: Wird verwendet, um eine Verbindung zum YT Playables SDK herzustellen. In diesem Beispiel legen wir diese Datei im Stammverzeichnis des Projekts ab. Sie können das ändern, aber dazu muss der Speicherort des Head-Includes aktualisiert werden.
    • In unserem Beispiel-Repository für Playables können Sie auch eine vollständige Projektversion herunterladen. Verwenden Sie für diese Version die ZIP-Datei mit dem Namen GoogleYTGameWrapper-godot-with-sample.zip.
  2. Fügen Sie ein neues Autoload-Global für das entpackte YTGameWrapper.gd-Script hinzu. Das kann unter Project -> Project Settings... -> Globals festgelegt werden. Wählen Sie im Eingabefeld Path die Datei YTGameWrapper.gd aus und geben Sie im Eingabefeld Node Name YTGameWrapper ein. Wählen Sie abschließend + Add aus.
    • Dadurch wird das Script in Ihrem Code global verfügbar gemacht und Sie können YTGameWrapper bei Bedarf aufrufen.
  3. Prüfen Sie, ob die Plattform Ihres Godot-Projekts für den Export für Web eingerichtet ist. Diese Einstellung finden Sie auf dem Tab „Exportieren“. Wählen Sie Project und dann Export... aus.
  4. Fügen Sie im Bereich „Exportieren“ eine neue Voreinstellung hinzu. Wählen Sie dazu Add... und dann Web aus. Fügen Sie diesen Code in das Feld für die Head Include-Einstellungen ein.
<script src="https://www.youtube.com/game_api/v1">// Load YT Game API code</script>
<script src="YTGameSDK.js"></script>
  1. Exportieren Sie Ihr Webprojekt im Bereich Export, indem Sie Export Project... und dann den Build-Speicherort auswählen.
  2. Nachdem Ihr Projekt erstellt wurde, rufen Sie den Build-Ordner auf und kopieren Sie die Datei YTGameSDK.js in diesen Ordner. Achten Sie darauf, sie beim Einreichen des Builds anzugeben.
  3. Achte darauf, dass du die technischen Anforderungen für dein Projekt erfüllst, und verwende die Playables-Testsuite.

Beispiele

Dieser Abschnitt enthält einige Beispiele für die Verwendung des .gd-Wrappers. Es handelt sich nicht um eine vollständige Liste der verfügbaren APIs. Eine vollständige Liste der verfügbaren APIs findest du im YouTube Playables SDK. Außerdem wird davon ausgegangen, dass Ihr Projekt wie im Abschnitt „Nutzung“ beschrieben eingerichtet ist.

sendScore

In diesem Beispiel wird eine Implementierung von sendScore(int points) in .gd gezeigt:

var current_game_score: int = 0

...

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

onPause

Hier siehst du ein Beispiel dafür, wie ein Spiel Pause-Ereignisse von YT-Playables verarbeiten kann, um bei Bedarf die Engine zu pausieren:

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

Hier siehst du ein Beispiel für die Verwendung von saveData, das an das YT Playables SDK gesendet wird:

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

Hier siehst du ein Beispiel für die Verwendung von loadData, das an das YT Playables SDK gesendet wird:

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

Hier sehen Sie ein Beispiel für die Verwendung von requestInterstitialAd. Es wird angezeigt, dass es ein guter Zeitpunkt ist, eine Interstitial-Anzeige einzublenden, sofern verfügbar. Die besten Ergebnisse erzielst du, wenn du diesen Aufruf während einer Spielpause machst, z. B. am Ende eines Levels.

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

    # logic for game over

Assets in Ihrem Godot-Projekt aufteilen (Lazy Loading)

Eines der Hauptprobleme, das Entwickler bei der Verwendung von Godot hervorgehoben haben, ist die Einhaltung der Anforderungen an die Dateigröße und die Gesamtgröße des Bundles.

Das Lazy-Loading von Assets ist eine gute Optimierungsmöglichkeit für Ihr Projekt, da Sie Assets, Ebenen und Daten bei Bedarf laden können. Unser Zertifizierungsteam kann die Einschränkungen bei der Gesamtdateigröße aufheben, wenn dies richtig gemacht wird, da Ihr vollständiges Spiel nicht vorab geladen wird, sondern erst, wenn ein Nutzer Ihr Produkt verwendet.

Zum ordnungsgemäßen Laden bietet Godot die Möglichkeit, Pakete, Patches und Mods zu exportieren (Link auf Englisch). Wir empfehlen, .pck-Dateien zu generieren, die nach Bedarf geladen werden.

YT Playables API-Referenz