LoginSignup
10
10

【Godot】セーブデータの保存方法

Last updated at Posted at 2021-02-09

概要

このページでは、Godot Engineでゲームデータをセーブ、ロードする方法について説明をします

この記事はGodot3.x版のものとなります。
Godot4.xでの実装方法は以下のページにまとめました。

ファイルの読み込みと書き込み

ファイル書き込みは以下の記述で行います

ファイルを書き込む
# Fileオブジェクト生成
var f = File.new()

# ファイルを書き込みモードで開く
f.open("user://savedata.txt", File.WRITE)

# "test save" という文字を書き込む
f.store_string("test save")

# ファイルを閉じる
f.close()

このファイルを読み込む場合は以下のように記述します

ファイルを読み込む
# Fileオブジェクト生成
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()

保存場所

Godot では「ユーザーパス (user://)」でファイル書き込みを行った場合以下の場所に保存されます

  • Windows: %APPDATA%\Godot\ [プロジェクト名]
  • macOS: ~/Library/Application Support/Godot/[プロジェクト名]

セーブデータが正しく書き込まれたかどうか確認する場合には、このパスにあるファイルをテキストエディタで開いて確認します。

この情報に関する公式ドキュメントは以下のページです

JSON形式で保存する

JSONへの変換処理を使用すると、辞書型のデータがそのままテキストとして保存できて便利です。
例えば書き込み処理は以下のように記述します。

JSON書き込み
# セーブデータ
var data = {
  "name": "hero", # プレイヤー名
  "hp": 10 # HP
}

# JSONテキストに変換
var s = JSON.print(data, "\t")


var f = File.new()
f.open("user://savedata.txt", File.WRITE)
f.store_string(s)
f.close()

保存された savedata.txt を開くと以下のようなテキストファイルが作成されています。

savedata.txt
{
	"name": "hero",
	"hp": 10
}

読み込み処理は以下のようになります

JSON読み込み
var f = File.new()
if f.file_exists("user://savedata.txt"):
	# セーブデータが存在するので読み込める
	f.open("user://savedata.txt", File.READ)
	var s = f.get_as_text()
	# JSONテキストを変換
	var err = JSON.parse(s)
	if err.error == OK:
		# 正常に変換できた
		print("name: %s"%err.result["name"])
		print("hp: %d"%err.result["hp"])
	else:
		# 失敗したら新規にセーブデータを作成する
		pass
else:
	# 存在しない場合は新規にセーブデータを作成する
	pass

ゲーム開始時にこの処理を呼び出し、セーブデータを読み込むようにします。
もしファイルが存在しない場合はセーブデータを新規作成し、JSONからの変換が失敗する場合も新規作成するようにします

参考

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10