Eksperymentalny moduł Godot dla Pokoju gier w YouTube

Dzięki temu opakowaniu możesz uzyskać dostęp do pakietu SDK YouTube Playables w Godot za pomocą udostępnionego .gd. Opakowanie zawiera łącznik pakietu SDK w formacie .js i plik .gd, aby przyspieszyć proces tworzenia. Dostępny jest też przykładowy projekt, który pokazuje, jak używać tych skryptów w projekcie.

Pakiety zip z Godot można pobrać z repozytorium z przykładami Playables.

Wykorzystanie

  1. Wyodrębnij GoogleYTGameWrapper-godot.zip w folderze projektu, w którym mają się znajdować te skrypty. Ten plik ZIP zawiera 2 pliki:
    • YTGameWrapper.gd: służy jako łącznik do pakietu SDK JavaScript Playables w YouTube, umożliwiając wywołanie pakietu SDK w grze.
    • YTGameSDK.js: służy do nawiązywania połączenia z pakietem SDK YT Playables. W tym przykładzie umieścimy ten plik w katalogu głównym projektu. Możesz to zmienić, ale wymaga to zaktualizowania lokalizacji uwzględnienia nagłówka.
    • Pełną wersję przykładowego projektu można pobrać z repozytorium przykładowych projektów w Pokoju gier. W przypadku tej wersji użyj pliku zip o nazwie GoogleYTGameWrapper-godot-with-sample.zip.
  2. Dodaj nowy skrypt globalny Autoload dla YTGameWrapper.gd, który został rozpakowany. Możesz to zrobić w sekcji Project -> Project Settings... -> Globals. W polu danych Path wybierz plik YTGameWrapper.gd, a w polu danych Node Name dodaj plik YTGameWrapper. Na koniec kliknij + Add.
    • Dzięki temu skrypt będzie dostępny globalnie w Twoim kodzie, co pozwoli Ci wywoływać funkcję YTGameWrapper w razie potrzeby.
  3. Sprawdź, czy platforma Godot w Twoim projekcie jest skonfigurowana do eksportu do Web. To ustawienie znajdziesz na karcie Eksport. Najpierw kliknij Project, a potem Export....
  4. W panelu Eksportowanie dodaj nowe ustawienie, klikając kolejno Add... i Web. Po utworzeniu kodu dodaj go do pola ustawień Head Include.
<script src="https://www.youtube.com/game_api/v1">// Load YT Game API code</script>
<script src="YTGameSDK.js"></script>
  1. Wyeksportuj projekt internetowy w panelu Export, klikając Export Project... i wybierając lokalizację kompilacji.
  2. Po skompilowaniu projektu przejdź do folderu kompilacji i skopiuj do niego plik YTGameSDK.js. Pamiętaj, aby dołączyć go do przesyłanej kompilacji.
  3. Sprawdź, czy spełniasz wymagania techniczne dotyczące projektu, i użyj pakietu testów dotyczących interaktywnych treści.

Przykłady

W tej sekcji znajdziesz kilka przykładów użycia obudowy .gd. Nie jest to jednak pełna lista dostępnych interfejsów API. Pełną listę dostępnych interfejsów API znajdziesz w pakiecie SDK YouTube Playables. Zakładamy też, że Twój projekt jest skonfigurowany zgodnie z opisem w sekcji Korzystanie.

sendScore

Ten przykład pokazuje implementację sendScore(int points).gd:

var current_game_score: int = 0

...

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

onPause

Oto przykład tego, jak gra może nasłuchiwać zdarzeń Pause pochodzących z YT Playables, aby w razie potrzeby wstrzymać silnik:

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

Oto przykład użycia saveData, wysyłanego do pakietu SDK Playables w YouTube:

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

Oto przykład użycia loadData, wysyłanego do pakietu SDK Playables w YouTube:

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

Ten przykład pokazuje, jak używać tagu requestInterstitialAd, który wskazuje, że jest to dobry moment na wyświetlenie reklamy pełnoekranowej (jeśli jest dostępna). Aby uzyskać najlepsze wyniki, zadzwoń w przerwie w grze, np. na końcu poziomu.

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

    # logic for game over

Jak podzielić zasoby w projekcie Godot (opóźnione wczytywanie)

Jednym z głównych problemów, na które zwracają uwagę deweloperzy korzystający z Godot, jest konieczność zachowania wymagań dotyczących rozmiaru pliku i ogólnych wymagań dotyczących rozmiaru pakietu.

Opóźnione wczytywanie zasobów to świetna metoda optymalizacji projektu, ponieważ możesz wczytywać zasoby, poziomy i dane w miarę potrzeby. Nasz zespół certyfikacyjny może zrezygnować z ogólnych ograniczeń rozmiaru pliku, jeśli zostanie to zrobione prawidłowo, ponieważ pełna gra nie będzie wczytywana z góry, ale dopiero wtedy, gdy użytkownik będzie się poruszać po Twoim produkcie.

Aby ułatwić prawidłowe wczytywanie, Godot oferuje pakiety eksportowania, łaty i modyfikacji (link do angielskiej wersji strony). Zalecamy wygenerowanie plików .pck, które są wczytywane w miarę potrzeby.

Zapoznaj się z pełną dokumentacją interfejsu YT Playables API.