0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Godot 4.6] ConfigFile

0
Posted at

Godot Engineで使用するノードに関しての備忘録です。

この記事はAIを活用して作成しました。

Godot 4.6のConfigFileを初心者向けに理解する

Godotでゲームを作っていると、

  • プレイヤーの名前
  • レベル
  • 所持金
  • HP
  • BGM音量
  • 効果音音量
  • キー設定
  • ハイスコア
  • セーブデータ

などを保存したくなることがあります。

そんなときに便利なのが、Godotの ConfigFile です。

この記事では、Godot 4.6のConfigFileについて、初心者向けにできるだけ分かりやすく説明します。


ConfigFileとは?

一言でいうと、

「ゲームのデータをファイルに保存して、あとで読み込むための仕組み」

です。

GodotのConfigFileは、INI形式に似た構造でデータを保存できます。

例えば、次のようなデータです。

[Player]
name="劉備"
level=10
gold=500

[Settings]
bgm_volume=80
se_volume=70

この中で、

[Player]
[Settings]

がセクションです。

そして、

name
level
gold
bgm_volume
se_volume

がキーです。

それぞれのキーに値が保存されています。


1. データを保存する

まずは一番基本的な使い方です。

var config = ConfigFile.new()

config.set_value("Player", "name", "劉備")
config.set_value("Player", "level", 10)
config.set_value("Player", "gold", 500)

config.save("user://save.cfg")

これで、

user://save.cfg

というファイルにデータが保存されます。

特に重要なのが、この部分です。

config.set_value("Player", "level", 10)

これは、

セクション = Player
キー       = level
値         = 10

という意味です。


2. 保存したデータを読み込む

次に、保存したデータを読み込んでみます。

var config = ConfigFile.new()

var err = config.load("user://save.cfg")

if err != OK:
    return

var player_name = config.get_value("Player", "name")
var level = config.get_value("Player", "level")
var gold = config.get_value("Player", "gold")

これで、

player_name

には、

劉備

が入ります。

また、

level

には、

10

が入り、

gold

には、

500

が入ります。

load()が正常に完了するとOKが返されます。

そのため、

if err != OK:

で読み込みに失敗した場合の処理を作ることができます。


3. 「セクション」と「キー」を理解する

ConfigFileを理解するうえで重要なのが、

  • セクション
  • キー
  • 値

の3つです。

例えば、

config.set_value("Player", "name", "劉備")

と書いた場合、

Player
  ↓
name → 劉備

という構造になります。

複数のデータを保存すると、

config.set_value("Player", "name", "劉備")
config.set_value("Player", "level", 10)
config.set_value("Player", "hp", 150)

config.set_value("Settings", "bgm", 80)
config.set_value("Settings", "se", 70)

次のようなデータになります。

[Player]
name="劉備"
level=10
hp=150

[Settings]
bgm=80
se=70

つまり、

セクション
    ↓
キー
    ↓
値

という構造だと考えると分かりやすいです。


4. デフォルト値を設定する

get_value()では、デフォルト値を設定することができます。

例えば、

var level = config.get_value("Player", "level", 1)

とします。

この場合、

Player → level

が存在すれば、その保存されている値を取得します。

もし存在しなければ、

1

を返します。

つまり、

var bgm_volume = config.get_value("Settings", "bgm_volume", 100)

とすると、

BGM音量が保存されていれば、その値を使う。
保存されていなければ100を使う。

という処理になります。

これはゲームの設定などを扱うときに非常に便利です。


5. 「保存したつもり」にならないように注意

ここは初心者が間違えやすいポイントです。

例えば、

var config = ConfigFile.new()

config.set_value("Player", "gold", 1000)

と書いただけでは、ファイルには保存されません。

set_value()は、ConfigFileのメモリ上のデータを変更しているだけです。

実際にファイルへ書き込むには、

config.save("user://save.cfg")

が必要です。

つまり、

set_value()
    ↓
メモリ上のデータを変更
    ↓
save()
    ↓
実際のファイルに保存

という流れです。


6. user://とは?

Godotでは、

"user://save.cfg"

という書き方をよく使います。

user://は、ゲームをプレイしているユーザーのためのデータ保存場所です。

例えば、

config.save("user://save.cfg")

としておけば、WindowsやAndroidなど、それぞれの実行環境に適したユーザーデータ領域に保存できます。

そのため、ゲームのセーブデータなどには、

user://

を使うのが基本です。

例えば、

user://save.cfg

のようにします。


7. セーブデータを作ってみる

ここまでの内容を使って、RPGのセーブデータを作ってみます。

例えば、三国志をテーマにしたRPGなら、

func save_game():
    var config = ConfigFile.new()

    config.set_value("Player", "name", "劉備")
    config.set_value("Player", "level", 10)
    config.set_value("Player", "hp", 150)
    config.set_value("Player", "gold", 500)

    config.set_value("World", "map", "china")
    config.set_value("World", "x", 320)
    config.set_value("World", "y", 180)

    config.save("user://save.cfg")

この処理を実行すると、保存されるデータはイメージとして次のようになります。

[Player]
name="劉備"
level=10
hp=150
gold=500

[World]
map="china"
x=320
y=180

このように、

Player

と

World

を別々のセクションにすることで、データを整理して保存できます。


8. セーブデータを読み込む

次は、保存したデータを読み込んでみます。

func load_game():
    var config = ConfigFile.new()

    var err = config.load("user://save.cfg")

    if err != OK:
        print("セーブデータがありません")
        return

    var player_name = config.get_value("Player", "name", "劉備")
    var level = config.get_value("Player", "level", 1)
    var hp = config.get_value("Player", "hp", 100)
    var gold = config.get_value("Player", "gold", 0)

    print(player_name)
    print(level)
    print(hp)
    print(gold)

例えば保存されているデータが、

name = 劉備
level = 10
hp = 150
gold = 500

なら、読み込んだ変数にはそれぞれ、

player_name → 劉備
level       → 10
hp          → 150
gold        → 500

が入ります。


9. よく使う命令

ConfigFileにはいくつかのメソッドがありますが、最初は次のものを覚えておけば十分です。

命令 意味
ConfigFile.new() ConfigFileを作る
set_value() データを設定する
get_value() データを取得する
save() ファイルに保存する
load() ファイルから読み込む

さらに、

config.has_section("Player")

を使うと、指定したセクションが存在するか確認できます。

また、

config.has_section_key("Player", "level")

を使うと、指定したセクションに特定のキーが存在するか確認できます。


10. ConfigFileはセーブデータに使える?

はい、使えます。

例えば、

user://save1.cfg
user://save2.cfg
user://save3.cfg

のようにすれば、

セーブ1
セーブ2
セーブ3

といった複数のセーブデータを作ることもできます。

例えば、

config.save("user://save1.cfg")

ならセーブ1、

config.save("user://save2.cfg")

ならセーブ2、

config.save("user://save3.cfg")

という形にできます。


11. ConfigFileは何に向いている?

ConfigFileは、特に次のようなデータを保存するのに便利です。

  • ゲーム設定
  • BGM音量
  • 効果音音量
  • キー設定
  • ハイスコア
  • 簡単なセーブデータ
  • プレイヤー情報
  • ゲームの進行状況

例えば、

[Settings]
bgm_volume=80
se_volume=70

[Player]
level=10
gold=500

[World]
map="china"
x=320
y=180

のように整理して保存できます。


12. 大量で複雑なデータの場合は?

ConfigFileは便利ですが、ゲームのデータが非常に大量になった場合や、複雑な構造のデータを保存したい場合には、JSONや独自のセーブシステムなどを検討することもできます。

例えば、

ConfigFile
    ↓
設定や比較的シンプルなセーブデータ

JSON
    ↓
構造化された大量のデータ

独自セーブシステム
    ↓
より複雑なゲームデータ

というように使い分けることができます。


13. 暗号化して保存することもできる

ConfigFileには、暗号化して保存するためのメソッドもあります。

代表的なものとして、

save_encrypted()

や、

save_encrypted_pass()

があります。

公式ドキュメントでは、save_encrypted()はAES-256による暗号化を使用すると説明されています。

セーブデータの内容を通常のConfigFileとしてそのまま保存したくない場合などに利用できます。

ただし、暗号化したからといって、ゲームのセーブデータを完全に改ざんできなくするという意味ではありません。


14. ConfigFileの基本をまとめる

ConfigFileの基本的な流れは非常にシンプルです。

保存

var config = ConfigFile.new()

config.set_value("Player", "gold", 500)

config.save("user://save.cfg")

流れとしては、

ConfigFileを作る
      ↓
set_value()でデータを入れる
      ↓
save()で保存する

です。


読み込み

var config = ConfigFile.new()

config.load("user://save.cfg")

var gold = config.get_value("Player", "gold", 0)

流れとしては、

ConfigFileを作る
      ↓
load()でファイルを読み込む
      ↓
get_value()でデータを取得する

です。


15. 最低限これだけ覚えればOK

ConfigFileを初めて使うなら、まずはこの形を覚えておけば大丈夫です。

保存

var config = ConfigFile.new()

config.set_value("Player", "gold", 500)
config.save("user://save.cfg")

読み込み

var config = ConfigFile.new()

config.load("user://save.cfg")

var gold = config.get_value("Player", "gold", 0)

つまり、

set_value() → save()で保存

そして、

load() → get_value()で読み込み

と覚えておけばOKです。


まとめ

GodotのConfigFileは、

ゲーム内の設定やデータをファイルに保存・読み込みするための便利なクラス

です。

基本的な構造は、

[セクション]
キー = 値

です。

例えば、

[Player]
name="劉備"
level=10
gold=500

というデータを作ることができます。

GDScriptでは、

config.set_value("Player", "gold", 500)

でデータを設定し、

config.save("user://save.cfg")

で保存します。

そして、

config.load("user://save.cfg")

で読み込み、

var gold = config.get_value("Player", "gold", 0)

でデータを取得します。

まずは、

set_value()
save()

load()
get_value()

この4つを覚えておけば、ConfigFileの基本は理解できます。


参考

Godot Engine 4.6公式ドキュメント
ConfigFile

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?