[UE4][C++]Save関連の機能メモ
関連リンク
関連リンク
記事末尾のリンクから、BPとC++両方のサンプルにアクセス可能。
BPでのより具体的な実装例。
実際に生成される.savファイルについての記述もある
Save System, Read & Write Any Data to Compressed Binary Files - UE4 wiki
USaveGameクラスを使わない場合のC++実装例。
バイナリ配列を圧縮して保存する実装の記述もある。
[UE4] 独自のアセットを実装する方法(6) 独自のシリアライズを実装する - 株式会社ヒストリア
記事の焦点は独自アセットの保存だが、考え方はセーブデータに転用できる。
Serializeがらみで、FArchiveの扱いの実装例がある。
FMemoryWriter, FMemoryReaderについて
// FMemoryWriter と FMemoryReader は、それぞれ// TArray<uint8> を渡すctorを持つ。以下のような使い方ができる。class BinaryRecorder { TArray<uint8> RawData;FMemoryWriter, FMemoryReaderについて
// LoadとSaveで共用。 // 共用なので、バイナリ読み書きの順番を意識せずに済むのがうれしい。 void LoadSave(FArchive& Ar, int32& Num) const { // ArがFMemoryWriterなら書き込み、FMemoryReaderなら読み込みになる Ar << Num; // 他に記録したいものがあればArに積んでいく。 }
void Save(int32 Num) { FMemoryWriter writer(this->RawData); this->LoadSave(writer, Num); // Numが書き込まれる }
int32 Load() const { int32 Ret = 0; FMemoryReader reader(this->RawData); this->LoadSave(reader, Ret); // retに読み込まれる return Ret; }};
例えば、USaveGameを派生して上記のような拡張をすれば、バイナリで記録できるので、.savファイルを多少は難読化できるだろう。
とりあえず圧縮バイナリで保存しておけば、サイズも小さくなるしカジュアルなチートも抑止できるしで一石二鳥になりそうだ。
以上