借助此封装容器,您可以使用提供的 .gd
在 Godot 中访问 YouTube Playables SDK。封装容器包含一个 .js SDK 连接器和一个 .gd
文件,可帮助您加快开发速度。我们还提供了一个示例项目,展示了如何在项目中使用这些脚本。
您可以从我们的游戏大本营示例代码库下载 Godot ZIP 软件包。
用法
- 在您希望这些脚本所在的项目文件夹中解压缩
GoogleYTGameWrapper-godot.zip
。此 ZIP 文件包含两个文件:YTGameWrapper.gd
:用作 YT Playables Javascript SDK 的桥梁,可提供从游戏中调用 SDK 的路径。YTGameSDK.js
:用于连接到 YT Playables SDK。在本例中,我们将此文件放在项目的根目录中。您可以更改此设置,但需要更新您的首要包含位置。- 您还可以从我们的游戏大本营示例代码库下载完整的项目示例版本。对于此版本,请使用名为
GoogleYTGameWrapper-godot-with-sample.zip
的 ZIP 文件。
- 为解压缩的
YTGameWrapper.gd
脚本添加了新的 Autoload Global。 您可以在Project
->Project Settings...
->Globals
下进行设置。 在Path
输入框中选择YTGameWrapper.gd
文件,并在Node Name
输入框中添加YTGameWrapper
。最后,选择+ Add
。- 这样,脚本就会在代码中全局可用,您可以根据需要调用
YTGameWrapper
。
- 这样,脚本就会在代码中全局可用,您可以根据需要调用
- 验证您的 Godot 项目平台是否已设置为针对
Web
导出。此设置位于“导出”标签页中,依次选择Project
和Export...
。 - 在“导出”面板中,依次选择
Add...
和Web
以添加新的预设。创建后,将以下代码添加到Head Include
设置框中。
<script src="https://www.youtube.com/game_api/v1">// Load YT Game API code</script>
<script src="YTGameSDK.js"></script>
- 在
Export
面板中,依次选择Export Project...
和 build 位置,以导出 Web 项目。 - 项目构建完成后,请前往 build 文件夹并将
YTGameSDK.js
文件复制到此文件夹中,并确保在提交 build 时将其包含在内。 - 请验证您是否遵循了项目的技术要求,并务必使用 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 参考文档。