Godot: セーブデータの保存と読み込みで気をつけること
https://www.youtube.com/watch?v=j7p7cGj20jU
動画主は、この動画の前に、簡単な Save/Load の方法の動画を挙げている
Godot makes saves so easy!
The Easy Way to Save Games in Godot
上の方法だと簡単なのだが、いくつか問題点がある
リソースファイルのバージョン管理が複雑になる
リソースファイルから任意のコード実行ができてしまう
これが怖い
動画でそれが紹介されている
最初のビデオでは、保存されたゲーム データに JSON を使用しないことをお勧めします。
しかし、最終的には、データを保存およびロードするためのほとんどすべての組み込みメカニズムが安全ではないことが判明しました。
そのため、(Godot 3 を含む) 任意のコードの実行を防止したい場合は、JSON、XML、または独自の形式を使用してゲームを保存およびロードする必要があります。 動画主が Githubで公開しているSave/Loadのサンプルプロジェクト
プレイヤーがセーブファイルを編集できないようにするため、var2bytes を使ってバイナリとして保存する
暗号化
保存と読み込みに時間がかかるようになるが、暗号化するとより安全
File.open_encrypted()File.open()
ただし、暗号化キーをスクリプトの中に含めてしまうので、キーがバレたら突破される
Godot ビルド時に暗号化するとキーが見つかりにくくなる
しかし、基本的には配布したプログラムの暗号化はいつか破ることは可能である(どんなAAAタイトルでも解析されてしまっている)
JSONでSave/Load実装した例
バイナリ形式で Save/Loadする例も追加した
このレシピでは、JSONをデータ保存に使わないことを推奨している
独自クラスでシリアライズ・デシリアライズをする