Active Saverを使いこなす【Dialogue System for Unity】

title ゲーム開発

この記事でのバージョン
Unity:2021.3.0f1
Dialogue System for Unity:2.2.28

Dialogue System for Unity

Dialogue System for Unity

Dialogue System for Unity

Active Saverとは

Active Saverとは、Saver Componentsの内の一つ。

GameObjectのアクティブ/非アクティブの状態を保存し、ロード時にその状態にするというもの。

保存/ロードはDialogueManager経由で行うことが多い。

実装方法

①DialogueManagerに「Save System」「Dialogue System Saver」「Json Data Serializer」「Auto Save Load」「Saved GameDataStorer」コンポーネントを取り付ける。

DialogueManagerのコンポーネントに追加

この中で「Dialogue System Saver」はDialogueSystemのデータを保存するのに必要で、厳密には「Active Saver」に関係がない。ただ、DialogueSystemのデータは保存する機会があると思うので取り付けている。

「AutoSaveLoad」はスマホアプリに便利なコンポーネントで、アプリが終了したタイミングや、裏に行った際などに自動保存され、スタート時に自動ロードされる。
保存されるものはSaver Componentsが取り付けられているものになる。

②アクティブな適当なオブジェクトに「Active Saver」コンポーネントを取り付ける。

ActiveSarverオブジェクトに取り付けた

ここで注意なのは状態を保存したいオブジェクトにではなく、他のオブジェクトにコンポーネントを取り付けること。

Keyに適当なワード、「Save Across Scene Changes」「Restore State On Start」にチェック。

そして、状態を保存したいオブジェクトを「Game Object To Watch」にアタッチする。(ここではAxeというオブジェクトの状態を保存している。)

③保存したいタイミングで保存する。

・スクリプトから保存する場合

using PixelCrushers;

...
// 保存するタイミングで呼び出す
SaveSystem.SaveSlot(_saveSlotNumber);

_saveSlotNumberは「DialogueManager」の「AutoSaveLoad」と同じNumberにする。

・スクリプト無し
SaveSystemMethods」コンポーネントを追加し、イベント等からSaveSlotメソッドを呼び出す。

例:クリック時に保存

これで一通りの実装は完了。

おわりに

今回実装したのは「Active Saver」でしたが、他のSarverコンポーネントも同様に出来ると思います。

自分はシーンの切り替え時に保存して、シーン開始時にロードするように設計していたのですが、保存は成功してても、ロード出来ていないなどがあって結構手こずりました。

というのも、「Active Saver」の設定項目に「Restore State On Start」がありますが、これはデフォだとオフになっています。

説明文にも「チェックを入れなくても普通は動作する」みたいなことが書かれているのですが、これにチェックしないとシーンを何回か行き来する場合にうまくロードされないんですよね。

便利なアセットですが、日本語情報が少なくて結構困りました。(というかほぼ無い)

サポートはForum等で連絡が取れるので、分からないことがあればここで調べるか、質問してみるといいかもです。

Pixel Crushers Forum - Index page

もちろんマニュアルはあるので、そちらで調べるのが先ですが。

Dialogue System for Unity: Dialogue System for Unity


おわり。

コメント