SDK使用说明
前置阅读:抖音小游戏Godot接入指引
一、插件安装
- •下载 zip 包并解压后,将
ttsdk 和 ttsdk.editor 放到项目的addons目录,从 Project Settings 中勾选激活插件即可。Godot 插件安装方法请参考 官方文档
版本号 | 更新日期 | 更新说明 | 下载链接 |
1.0.4 | 2026/7/15 |
| |
1.0.3 | 2026/1/28 |
| |
1.0.2 | 2026/1/15 |
| |
1.0.1 | 2025/12/22 |
| |
1.0.0 | 2025/11/27 | | 版本废弃不再使用 |
二、TTSDK 使用基础
1.接口说明
ttsdk 插件激活后会注入一个名为 tt 的全局对象(Autoload),SDK 接口都通过该对象提供。func is_run_in_tt() -> bool
- •返回
- ▪当前是否运行在抖音小游戏环境中
func mount_ttpkg_file(path: String) -> void
- •说明
- ▪访问包内文件之前须先调用
mount_ttpkg_file 将包内 文件挂在到虚拟文件系统中- •参数
- ▪
path - •调用示例
tt.mount_ttpkg_file("in/package/file.pck") ProjectSettings.load_resource_pack("in/package/file.pck")
func create_video_stream(url: String) -> VideoStream
- •说明
- ▪创建一个基于
tt.createOffscreenVideo 的 VideoStream,配合 VideoStreamPlayer 使用- ▪注意这种方式创建的
VideoStream 不支持通过VideoStreamPlayer 调节音量、播放速度- •参数
- ▪
url 视频文件地址- •调用示例
@onready var player: VideoStreamPlayer = $VideoStreamPlayer # volume_db、speed_scale、loop/mute 属性无效 func play_tt_video_with_builtin_player(url: String) -> void: var stream := tt.create_video_stream(url) player.stream = stream player.paused = false player.play() func pause_video() -> void: player.paused = true func resume_video() -> void: player.paused = false func stop_video() -> void: player.stop()
class TTVideoStreamPlayer
- •说明
- ▪基于
tt.createOffscreenVideo 进行视频播放,支持音量调节- ▪可直接作为独立的
Control 节点使用- ▪注意在编辑器环境使用的是 mock 代码仅保证不报错,不实际播放视频
- •调用示例
const VIDEO_URL := "https://example.com/video.mp4" @onready var player: TTVideoStreamPlayer = $TTVideoStreamPlayer func play_tt_video(url: String) -> void: player.canplay.connect(_on_video_canplay) player.played.connect(_on_video_played) player.paused.connect(_on_video_paused) player.stopped.connect(_on_video_stopped) player.ended.connect(_on_video_ended) player.error.connect(_on_video_error) player.autoplay = true player.loop = false player.muted = false player.volume = 1.0 player.size_mode = TTVideoStreamPlayer.SizeMode.WIDTH_EXPAND player.load(VIDEO_URL) func pause_video() -> void: player.set_paused(true) func resume_video() -> void: player.set_paused(false) func stop_video() -> void: player.stop() func seek_to_10s() -> void: player.seek(10.0)
调用开放能力
目前已支持的接口清单请查看
tt.gd,其余接口也会陆续上线。- •代码示例:获取用户信息
extends Node class_name CallTTSdkSample func _on_button_pressed(): var res = await tt.login() if res.is_success: res = await tt.get_user_info() if res.is_success: var user_info := res.get_result_success(); print(user_info)
2.1 类型转换
- •通过 Godot SDK 调用 API 时,需要注意参数类型转换。具体规则如下:
- ◦大部分情况下,SDK 已经替开发者完成了类型转换,有少数情况需要开发者自行关注
JS 类型 | Godot 类型 | 是否直接使用 | 备注说明 |
number | Variant | 直接使用 |
|
string | String | 直接使用 | |
boolean | bool | 直接使用 | |
Object | JavaScriptObject | |
Dictionary 类型即可
TTUtils.dictionary_from_js 方法转成 Dictionary |
Array | JavaScriptObject | |
Array 类型即可
TTUtils.array_from_js 方法转成 Array |
Function | JavaScriptObject | |
Callable 即可 |
ArrayBuffer | JavaScriptObject | |
|
- •举例说明
- ◦
tt.createBannerAd - ▪对应的 JavaScript API 方法签名为:
function createBannerAd (param: { adIntervals?: number; style?: { width: number; left: number; top: number }; adUnitId: string; }): BannerAd;
- ▪Godot 接口调用格式为:
# Godot API 调用 var param : Dictionary = { "adIntervals": 1, "adUnitId": "ad-unit-id", "style": { "width": 120 } } # param 在 SDK 内部被转换为 JavaScriotObject tt.create_banner_ad(param)
2.2 接口格式
- •遵循 Godot 代码风格,Godot API 均以 snake-case 格式命名;
- ◦例如 JS 的
tt.createBannerAd 接口在 Godot 中通过 tt.create_banner_ad 方法进行调用。- •Godot TTSDK 目前有 3 种接口调用格式,分别是 同步、异步、以及 signal;
- ◦格式一:同步接口调用,所有同步返回的 JavaScript API 可以直接调用
var system_info := tt.get_system_info_sync() print(system_info) var banner_ad := tt.create_banner_ad({ "" }) get_tree().root.add_child(banner_ad) banner_ad.on_load.connect(...) banner_ad.show() banner_ad.destroy() banner_ad.queue_free()
- ◦格式二:异步接口调用,Godot SDK 对异步返回的 JavaScript API 进行了二次封装(
TTAsyncTask),开发者可以采用下面任意的格式进行调用,底层实现是相同的。- ▪以方法形式调用:使用 Dictionary 作为入参,不支持监听回调。请注意 Dictionary 内字段命名应与 JavaScript 接口文档定义保持一致(camel-case)
await tt.report_event({ "event": "event-name", "extra": { "field 1": "abc" } })
- ▪以对象形式调用:提供显式的字段定义,支持监听回调,也支持协程格式
var task := await tt.login_async() # 方法名多了 _async 后缀 # 提供显式参数字段名,snake-case task.force = true # 协程格式调用 await task.invoke() if task.is_success: var res := task.get_result_success(); else: print (task.get_result_fail())
var task: TTAsyncTask = await tt.login_manual() # 非协程格式 task.invoke() if task.is_done: if task.is_success: _on_login_success(task.get_result_success()) else: _on_login_fail(task.get_result_fail()) else: task.on_success.connect(_on_login_success, CONNECT_ONE_SHOT) task.on_fail.connect(_on_login_fail, CONNECT_ONE_SHOT)
- ◦格式三:事件监听类接口,Godot SDK 对
onXXX/offXXX 格式的 JavaScript API 提供了 signal 封装。tt.on_show.connect(_on_show) # 对应 JavaScript tt.onShow 接口 tt.on_show.disconnect(_on_show) # 对应 JavaScript tt.offShow 接口 func _on_show(res: TT.OnShowRes) { print(res) }
2.3 内存管理
- •调用 JavaScript API 时涉及到 Godot 与 JS 之间的内存交换,内存管理的关键是意识到 Godot 的内存对象管理是基于引用计数(
RefCounted)而 JavaScript 则是基于垃圾回收的,Godot 引擎会在 JavaScriptObject 引用结束时释放 JS 对象。- •通常情况下,开发者无需关注接口调用内存管理的细节。
- ◦特别的,
TTBannerAd 这类带生命周期的对象是基于 Node 实现的,开发者可以像普通节点一样管理其生命周期,这类对象需要开发者手段管理生命周期(在合适的实际调用 destroy)。
