最終確認日
Godotのstore_varとget_varについて
Godot の FileAccess.store_var()
および get_var()
は、変数の順序付き保存と読み出しを行うためのAPIであり、変数名(キー)を伴わない。
保存と読み込み
store_var(value)
は、値そのものをバイナリでファイル末尾に追加保存する。
get_var()
は、保存された順序に従って値を1つずつ読み出す。
読み出しは逐次的で、最初の get_var()
で最初に保存された値が返され、2回目で2番目の値……というように連続する。
「同じ変数名」で保存しても上書きされない
var foo = 1
file.store_var(foo) # 1が保存される
foo = 2
file.store_var(foo) # 2が別エントリとして保存される(上書きではない)
- 上記の場合、ファイルには
[1, 2]
という2つの値が保存される。 get_var()
で1回目に1、2回目に2が返る。
上書きしたい場合
FileAccess.open(path, FileAccess.WRITE)
を使ってファイルを上書きモードで開き、必要なデータだけを保存し直す。
var file = FileAccess.open("user://highscore.save", FileAccess.WRITE)
file.store_var(highscore) # 既存の内容をすべて破棄して1つだけ保存
file.close()
名前付きで複数データを保存したい場合
Dictionary
を使って明示的にキーと値を保持し、保存する。
var data = { "high_score": 1000, "level": 5 }
file.store_var(data)
# 読み込み
var data = file.get_var()
print(data["high_score"])
- こうすることで、順序に依存せず柔軟にデータを取り出せる。
メモ
次のようなスクリプトの場合、毎回 FileAccess.WRITE
により全てをまっさらな状態にしてhighscoreの値が1行のみが記録されている状態になっているはず。
var save_file_path = "user://highscore.save"
func save_score():
var file = FileAccess.open(save_file_path, FileAccess.WRITE)
file.store_var(highscore)
print("Saveing highscore to disk ...")
file.close()
func load_score():
if FileAccess.file_exists(save_file_path):
var file = FileAccess.open(save_file_path, FileAccess.READ)
highscore = file.get_var()
print("Loaded highscore from file: ", str(highscore))
file.close()
else:
highscore = 0
print("Save file doesn't exist.")

公開日
更新日