Godot3でセーブデータの保存と読み込み
https://gyazo.com/309bf7a8bcacff1d5efba003e7bc8dc8
user:// データに保存して読み込む
ファイルパスを指定して文字列を書き込む最小限の処理
code:save.py
var f = File.new()
f.open("user://savedata.txt", File.WRITE)
f.store_string("test %s" % Time.get_time_string_from_system())
f.close()
ファイルパスを指定してuser://データを読み込んで print する最小限の処理
code:load.py
var f = File.new()
if f.file_exists("user://savedata.txt"):
f.open("user://savedata.txt", File.READ)
print(f.get_as_text())
f.close()
上の処理を、バイナリ形式で保存する場合
code:save.py
func _on_Save_pressed() -> void:
var f = File.new()
f.open("user://savedata.txt", File.WRITE)
var text = "test %s" % Time.get_time_string_from_system()
var b = var2bytes(text)
f.store_buffer(b)
f.close()
code:load.py
func _on_Load_pressed() -> void:
var f = File.new()
if f.file_exists("user://savedata.txt"):
f.open("user://savedata.txt", File.READ)
var b = f.get_buffer(f.get_len())
print(bytes2var(b))
f.close()
JSONフォーマットで保存し、読み込む
保存する前に、オブジェクトを JSON.print で変換する
code:to_json.py
var data = {
"level": 33,
"exp": 999,
"class": "mage",
}
var json = JSON.print(data, "\t")
var f = File.new()
f.open("user://savedata.txt", File.WRITE)
f.store_string(json)
f.close()
読み込み時に JSON.parse する
code:json_parse.py
var f = File.new()
if f.file_exists("user://savedata.txt"):
f.open("user://savedata.txt", File.READ)
print(f.get_as_text())
var json = f.get_as_text()
var err = JSON.parse(json)
if err.error == OK:
# 正常にJSON parseできた
print("level: %d" % err.result"level") print("exp: %d" % err.result"exp") print("class: %s" % err.result"class") else:
print("failed json parse.")
f.close()
実行結果は以下のようになった
JSONをそのままprint
{
"level": 33,
"exp": 999,
"class": "mage"
}
JSON parse 後に各key を指定してprint
level: 33
exp: 999
class: mage
JSON形式 + バイナリで保存する
jsonオブジェクトを var2bytesで変換して、f.store_buffer(b)でセーブする
code:save_json_bytes.py
func _on_Save2_pressed() -> void:
var data = {
"level": 33,
"exp": 999,
"class": "mage",
}
var json = JSON.print(data, "\t")
var f = File.new()
f.open("user://savedata_json.txt", File.WRITE)
var b = var2bytes(json)
f.store_buffer(b)
# f.store_string(json)
f.close()
バイナリデータを読み込んで、bytes2varでjson形式に戻せばok
code:load_json_bytes.py
func _on_Load2_pressed() -> void:
var f = File.new()
if f.file_exists("user://savedata_json.txt"):
f.open("user://savedata_json.txt", File.READ)
var b = f.get_buffer(f.get_len())
print(bytes2var(b))
# print(f.get_as_text())
var json = bytes2var(b)
#var json = f.get_as_text() var err = JSON.parse(json)
if err.error == OK:
# 正常にJSON parseできた
print("level: %d" % err.result"level") print("exp: %d" % err.result"exp") print("class: %s" % err.result"class") else:
print("failed json parse.")
f.close()
参考記事
公式のドキュメントでは、セーブ対象のオブジェクトかどうかは、Groups機能を使ってマーキングしている