🙆

Godot Engine(GDScript)でアツマールのスコアボードを実装する

2022/06/27に公開約1,500字

Godot Engine 3.4.4

やることはシンプルです。
ランキングに登録させたいタイミングでアツマールのAPIを呼び出してあげればOKです。
(1分間に呼び出し可能な回数に制限があることに注意)[1]

ここではGDScriptでJavaScriptシングルトンを扱います。

var window = JavaScript.get_interface("window")
if window != null and window.RPGAtsumaru:
	window.RPGAtsumaru.scoreboards.setRecord(1, score)
	yield(get_tree().create_timer(0.5), "timeout")
	window.RPGAtsumaru.scoreboards.display(1)

まずwindowオブジェクトを取得した後、アツマール上かどうかの判定を行った上で登録を行うようにしています。

window.RPGAtsumaru.scoreboards.setRecord(1, score)

スコアボードに登録するためのAPIを呼び出します。
第一引数にスコアボードID、第二引数にスコアを渡します。詳細は[2]

yield(get_tree().create_timer(0.5), "timeout")

0.5秒の待機処理を挟んでいます。
続けて呼び出すとスコアボードが正しく表示されないことがあったので。。。

window.RPGAtsumaru.scoreboards.display(1)

指定したidのスコアボードを表示します。

これでスコアボードが実装できたので非公開でアップし動作を確認・・・
と、いきたいところですがどうやら[3]によると非公開や限定公開だとスコアボードに反映されないようなので注意してください。

あと、Atsumaru Debuggerを使えばローカルファイルに切り替えて動作を確認できるのでよかったら試してみるといいかもしれません。

Godot 4 対応コード

2022/09/24 時点で正式リリースはまだなのでアツマール上での動作は確認していませんが
以下のように書き換えて対応可能かと思われます。

3.x
var window = JavaScript.get_interface("window")
...
	yield(get_tree().create_timer(0.5), "timeout")
...
4.x
var window = JavaScriptBridge.get_interface("window")
...
	var timer = get_tree().create_timer(0.5)
	await timer.timeout
...
脚注
  1. https://atsumaru.github.io/api-references/common/rate-limit ↩︎
  2. https://atsumaru.github.io/api-references/apis/scoreboard ↩︎
  3. https://qa.nicovideo.jp/faq/show/8617 ↩︎

Discussion

ログインするとコメントできます