ここではUE マーケットプレイスにて販売している「Drone Model & Game Template」のコンフィギュレーターの変更内容をLevel間で共有および保存する方法を説明します。
コンフィギュレーターの変更内容をLevel間で共有
GameInstanceについて
コンフィギュレーターの変更内容をLevel間で共有するためには、GameInstanceを使用します。GameInstanceの作成方法と組み込み方について説明します。
GameInstanceブループリント作成
GameInstanceのブループリントは、GameInstanceクラスを親に指定します。作成したGameInstanceブループリントの名前は、”DroneGameInstance” としました。

プロジェクト設定で作成したGameInstanceブループリントを指定
“Project Settings” -> “Maps & Modes” -> “Game Instance Class” を 作成したGameInstanceブループリントに変更する。

GameInstanceに保存するための変数と関数を追加
DroneGameInstanceに、「TypeNo」と「ColorNo] の変数と「saveData」関数を追加します。

GameInstanceの取得
「CM_MaterialComponent」のBeginPlayイベントに、GameInstanceを取得するロジックを追加します。取得したGameInstanceをDroneGameInstanceにCastし、変数に格納します。

コンフィギュレータの変更をGameInstanceに保存
「CM_MaterialComponent」の「ChangeMaterial」で、「DroneInstanceGame」の「SaveData」関数を呼び出し、変更を保存します。

Level間の遷移を確認
コンフィギュレーターに、”Go to race map” ボタンを追加し、レースマップに遷移するよう変更し、変更内容が引き継がれているか確認します。



変更内容を保存
SaveGameについて
GameInstanceは、Gameが終わると変更内容が破棄されてしまいます。そのため、Gameが終わったあともコンフィギュレータの変更内容を保持する場合、物理的に保存する必要があります。SaveGame機能を使用します。
SaveGameブループリント作成
SaveGameのブループリントは、SaveGameクラスを親に指定します。作成したSaveGameブループリントの名前は、”DronSaveGame” としました。

SaveGameに保存するための変数と関数を追加
DroneSaveGameに、「TypeNo」と「ColorNo] の変数を追加します。

Loadロジック追加
「DroneGameInstance」に「Init」イベントを追加し、SaveしたデータをLoadするためのロジックを追加します。Saveデータがない場合は、CreateSaveGameObject で新規作成します。存在した場合は、DroneSaveGameへキャストを行い、「TypeNo」と「ColorNo」をSaveGameから取得し、DronGameInstanceの初期値として設定します。作成もしくは取得したDroneSaveGameは変数に保存します。

Saveロジック追加
「DroneGameInstance」の「SaveData」イベントに、Saveロジックを追加します。「AsDroneSaveGame」に、「TypeNo」と「ColorNo」の値をセット後、Save Game to Slot を使用しSaveを行います。SlotName変数は任意の文字列をセットしてください。

SaveGameの確認
コンフィギュレータで色を変更後にゲームを終了し、再起動させた際に変更した値が引き継がれているか確認します。


