ふたもりのブログ(仮)

個人的な感想とかメモ書きのまとめ。ネタバレもあるのでご注意を。

Godotメモ「リソース形式でデータを保存(セーブ・ロード)する」

自分用メモ。
v4.0.2.stable


ようやく検証できたので。

保存するためのリソースクラス

extends Resource
class_name TestSaveData

@export var num1 := 10
@export var num2 := 3


セーブロード処理のクラス

class_name SaveManager

static func write_savedata(res)->void:
    var result = ResourceSaver.save(res, "user://test.tres",ResourceSaver.FLAG_COMPRESS)
    assert(result == OK)

static func load_savedata()->Resource:
    return ResourceLoader.load("user://test.tres")


動作確認のノード

extends Node2D

# Called when the node enters the scene tree for the first time.
func _ready():
    var res = TestSaveData.new()
    print_debug(res.num1)
    
    res.num1 = 20
    print_debug(res.num1)
    
    SaveManager.write_savedata(res)
    
    var res2 = SaveManager.load_savedata()
    print_debug(res2.num1)

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
    pass
  • 初期値10のnum1が20で保存されてるよっていう検証
  • 保存される場所はユーザーデータ配下
    (%APPDATA%\Godot\app_userdata\プロジェクト名\)
  • そもそも雰囲気でGodot触ってるので正しく理解してない気がするけどとりあえず動いたのでヨシの精神
  • というか独自のclass作る方法とか静的functionとか初めて知った。Nodeの存在感が強いので…。
  • リソースだとそのまま保存されるのでファイル開けば中見えてしまう。
    バイナリ化とか難読化できると嬉しいけど、手軽過ぎてもうこれで良くねってなる。
    どっかでまた調べる。


参考

docs.godotengine.org

www.youtube.com

kidscancode.org

2dgames.jp