实验性 YouTube 游戏大本营 Godot 封装容器

借助此封装容器,您可以使用提供的 .gd 在 Godot 中访问 YouTube Playables SDK。封装容器包含一个 .js SDK 连接器和一个 .gd 文件,可帮助您加快开发速度。我们还提供了一个示例项目,展示了如何在项目中使用这些脚本。

您可以从我们的游戏大本营示例代码库下载 Godot ZIP 软件包。

用法

  1. 在您希望这些脚本所在的项目文件夹中解压缩 GoogleYTGameWrapper-godot.zip。此 ZIP 文件包含两个文件:
    • 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 导出。此设置位于“导出”标签页中,依次选择 ProjectExport...
  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... 和 build 位置,以导出 Web 项目。
  2. 项目构建完成后,请前往 build 文件夹并将 YTGameSDK.js 文件复制到此文件夹中,并确保在提交 build 时将其包含在内。
  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 时强调的一个主要问题是,要确保各个文件大小要求和总软件包大小要求不超标。

延迟加载资源是一项非常有用的优化,因为您可以根据需要加载资源、关卡和数据。如果您能正确执行此操作,我们的认证团队可能会豁免总文件大小限制,因为您的完整游戏不会预加载,而是在用户浏览您的产品时加载。

为帮助正确加载,Godot 提供了“导出资源包、补丁和模组”功能(英语链接)。我们建议生成可根据需要加载的 .pck 文件。

请参阅完整的 YT Playables API 参考文档