この記事を読むと
はじめに
通称「極め本」完了後に躓いたので記録。
ウィジェット上のボタンを押してセーブデータを読み書きするよう実装したが、そのままではロードするまで中身の情報がわかりづらかった。そこで、セーブされた日時とその時のゲーム内情報、スクリーンショットを表示するようにした。
UEのバージョンは5.5.0
前提知識・技能
セーブデータの読み書き
List Viewの使用
大まかな手順
- 画像と文字を配置したボタンのリストをListViewで作成し、ボタンを押すとセーブできるようにする
- SaveGameクラスを継承するオブジェクトを作成し、ボタン上に表示する情報を変数に追加する
- ゲームデータ保存時にスクリーンショットを撮影し、古いものと差し替える
- ゲームデータ保存時に手順2で作成したオブジェクトについてもセーブする
- ListViewを開くときに手順2で作成したオブジェクトをロードし、情報を読み出し表示する
詳細
今回はListViewに子ウィジェットを追加し、子ウィジェットのボタンを押した際にセーブするイベントを実装した。
子ウィジェットに表示する情報は3種で、ボタン左部にスクリーンショット、ボタン上部にセーブ時の現実の日時、その下にゲーム内の日時を表示する。
セーブデータを保存するクラスとは別にSaveGameクラスを継承するクラスSaveDataPreview
を作成し、保存時のスクリーンショット、日時、ゲーム内での日時を格納する変数を作成した。
コンソールコマンドShot
にオプション変数でファイル名を指定してスクリーンショットを保存したところ、ファイル名には拡張子の前に5桁の通し番号が追加されており、上書き保存はできなかった。
ブループリントでファイル操作はできないため、ファイルを削除するC++の関数Delete File
を作成し、スクリーンショット保存前に古いファイルを削除するようにした。
詳しくは別記事を参照。
以下のようなイベントをセーブデータ保存時に実行するようにした。
以下グラフ各箇所の解説。
見切れているSlot to File Name
及びAddノードの引数は両方ともセーブデータのスロット(1~3)である。
今回は3スロットのセーブデータを保持するためスロット名「1」「2」「3」を使用済みなので、スロット名にはそれぞれに10を加算した「11」「12」「13」を使用した。
Get Date And Time in Game
ノードはウィジェット上に表示したいゲーム内情報を取得するためのもの。
Now
関数で現在の日時(日本標準時)を取得できる。
Slot to File Name
関数はセーブデータのスロット別にスクリーンショット実行用のコマンドとファイル名を出力する。
Delete Fie
関数はC++で作成したもので、差し替えたいファイルを削除する。
Execute Console Command
関数はスクリーンショット用のコンソールコマンドshot
を実行する。オプション引数としてファイル名を指定している。
リストへのアイテムの追加と同時にロードして情報を表示するよう以下のようにノードを組んだ。
それぞれListViewを配置したウィジェット、その子ウィジェットにイベントを作成した。
Import File as Texture 2D
関数は引数にファイル名を指定すると画像を読み込んでTexture2Dクラスで出力してくれる。それをSet Brush from Texture
関数で表示している。
結果
セーブデータの中身がわかりやすくなる!!!