試験運用版の YouTube ゲームルームの Godot ラッパー

このラッパーを使用すると、提供された .gd を使用して Godot で YouTube Playables SDK にアクセスできます。ラッパーには、開発を高速化するための .js SDK コネクタと .gd ファイルがあります。また、これらのスクリプトをプロジェクトで使用する方法を示すサンプル プロジェクトも用意されています。

Godot ZIP パッケージは、Playables のサンプル リポジトリからダウンロードできます。

用途

  1. これらのスクリプトを配置するプロジェクト フォルダに GoogleYTGameWrapper-godot.zip を展開します。この ZIP には次の 2 つのファイルが含まれています。
    • YTGameWrapper.gd: YT Playables Javascript SDK へのブリッジとして使用され、ゲーム内から SDK を呼び出すパスを可能にします。
    • YTGameSDK.js: YT Playables SDK への接続に使用されます。この例では、このファイルをプロジェクトのルートに配置します。この設定は変更できますが、ヘッド インクルードの場所を更新する必要があります。
    • ゲームルーム サンプル リポジトリから、プロジェクトの完全なサンプル バージョンをダウンロードすることもできます。このバージョンでは、GoogleYTGameWrapper-godot-with-sample.zip という名前の ZIP を使用します。
  2. 解凍した YTGameWrapper.gd スクリプト用に新しい Autoload Global を追加しました。これは、Project -> Project Settings... -> Globals で設定できます。Path 入力ボックスで YTGameWrapper.gd ファイルを選択し、Node Name 入力ボックスに YTGameWrapper を追加します。最後に、+ Add を選択します。
    • これにより、コードでスクリプトをグローバルに使用できるようになり、必要に応じて YTGameWrapper を呼び出すことができます。
  3. Godot プロジェクトのプラットフォームが Web 用にエクスポートするように設定されていることを確認します。この設定は [エクスポート] タブにあります。[Project]、[Export...] の順に選択します。
  4. [エクスポート] パネルで、Add... を選択して Web を選択して、新しいプリセットを追加します。作成したら、このコードを Head Include の設定ボックスに追加します。
<script src="https://www.youtube.com/game_api/v1">// Load YT Game API code</script>
<script src="YTGameSDK.js"></script>
  1. Export パネルで Export Project... を選択し、ビルド場所を選択して、ウェブ プロジェクトをエクスポートします。
  2. プロジェクトがビルドされたら、ビルドフォルダに移動して YTGameSDK.js ファイルをこのフォルダにコピーし、ビルドを送信するときに必ず含めます。
  3. プロジェクトの技術要件に準拠していることを確認し、必ず Playables のテストスイートを使用してください。

このセクションでは、.gd ラッパーの使用方法の例を示します。これは、使用可能な API の完全なリストではありません。使用可能な API の一覧については、YouTube Playables SDK をご覧ください。また、プロジェクトが「使用方法」セクションで説明されているように設定されていることを前提としています。

sendScore

次の例は、.gd での sendScore(int points) の実装を示しています。

var current_game_score: int = 0

...

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

onPause

以下は、ゲームが YT Playables から送信される Pause イベントをリッスンして、必要に応じてエンジンを一時停止する方法の例です。

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

saveData を使用して YT Playables SDK に送信する方法の例を次に示します。

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

loadData を使用して YT Playables SDK に送信する方法の例を次に示します。

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

requestInterstitialAd の使用例を次に示します。これは、インタースティシャル広告を表示するタイミング(利用可能な場合)を示します。最適な結果を得るには、レベルの終了時など、ゲームプレイの休憩中にこの呼び出しを行います。

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

    # logic for game over

Godot プロジェクトでアセットを分割する方法(遅延読み込み)

Godot の使用時にデベロッパーが指摘している主な問題の 1 つは、個々のファイルサイズ要件と合計バンドルサイズ要件を満たすことです。

アセットの遅延読み込みは、アセット、レベル、データを必要に応じて読み込むことができるため、プロジェクトを最適化するための優れた方法です。ゲーム全体が最初から読み込まれるのではなく、ユーザーがアプリを操作する際に読み込まれるため、Google の認定チームは、適切に処理されている場合は、全体的なファイルサイズの制限を免除する場合があります。

適切な読み込みをサポートするため、Godot ではエクスポート パック、パッチ、MOD が用意されています(英語のリンク)。必要に応じて読み込まれる .pck ファイルを生成することをおすすめします。

YT Playables API リファレンスの全文をご覧ください。