こんにちは、simatten(しまってん)と申します。
この度、Creator Kitの新機能としてセーブ機能(プレイヤーの状態を保存する機能)がリリースされました!
これによって、一旦ワールドから出ても保存に対応させたワールドであれば再入室時に続きから遊べるようになります!!
この機能を使えば日を跨いで長く遊べるRPGのようなワールドも実装できることでしょう……わくわく!!
それに伴い、テンプレートワールド『プログレッション』がセーブ機能に対応しました!
是非プロジェクトフォルダをダウンロードして触ってみてくださいね!
そしてさらに……

公式改変ワールドである「テンプレートワールド『プログレッション』 にぎやかエディション」もセーブ機能に対応しました!
ゲーム内容もパワーアップ! 効率の限界を超える新たな要素も……?
セーブ機能の搭載されたclusterのゲームをいち早く体感してみたい方は、是非遊んでみてくださいね!
それでは、保存機能の解説の方に移っていきます!
Initialize Player Trigger コンポーネントについて
プレイヤーの状態の保存と読み込みは、Initialize Player Trigger
コンポーネントによって実装できます。

このコンポーネントは「セーブしておきたいKeyを定義しておけば、勝手にそのパラメータの保存と読み込みをしてくれる」ような作りになっています。 めっちゃカンタン!
Initialize Player Trigger
コンポーネントはプレイヤーの入室時に実行されます。
実行時にこのコンポーネント内で定義したKeyのパラメータがPlayerに保存されていない場合は、ここで定義したパラメータがPlayerに適用されます。
定義したKeyのパラメータがPlayerに保存されていた場合は、保存されていたパラメータがPlayerに適用されます。
各セーブ内容の実装
各セーブ内容の実装の解説に移っていきます。
今回セーブの実装に用いたオブジェクトは、Assets > ClusterCreatorKitTemplate > Progression > Prefabs > PlayerSystems
内の「Player」Prefab内にほぼ集約しているのでご参照ください。


レベルと経験値のセーブ

レベルや経験値のセーブは、Levelオブジェクトの中に実装しています。
初期値が0でも、セーブしたいKeyはしっかり定義してあげましょう!
鉱石かばんの情報のセーブ

鉱石かばんの情報のセーブは、Bagオブジェクトの中に実装しています。
鉱石かばんの容量は係数やプレイヤーのレベルなど複数の値から算出するようにしているので、Initialize Player Trigger
によって初期値が設定された後にOn Join Player Trigger
を用いて容量算出用のLogicを呼び出すためのSignalを通知しています。
On Join Player Trigger
は全てのInitialize Player Trigger
が実行されたあとに実行されるようになっているので、上記の実行順は保証されます。
ちなみにInitialize Player Trigger
のParameter TypeにSignalを指定した場合、初入室時にはSignalが通知されますが、再入室時にはSignalが通知されません。
On Join Player Trigger
の処理をInitialize Player Trigger
に移植する際は、初入室時のみ動作するSignalを意図する時は Initialize Player Triggerに、入室ごとに動作するSignalを意図する時は On Join Player Triggerにそれぞれ移植するようにお気をつけください!
取得アビリティのセーブ
プレイヤーが取得しているアビリティの種類とアビリティのレベルの保存は、AbilitySlotsオブジェクトの子のSlot(番号)オブジェクトの中に実装しています。
(下の画像は取得している1つ目のアビリティの情報なので、Keyの末尾を.1
にしています。2つ目、3つ目…は、.2
、.3
…としています。)

3つ目以降はAssets > ClusterCreatorKitTemplate > Progression > Prefabs > Playersystems > Abilities > Slots
にあります。

読み込んだアイコンをUIに反映させるためのSignalも、AbilitySlotsオブジェクトの中からOn Join Player Ability
を利用して通知しています。

アビリティの効果を受けるパラメータの保存は、下のように実装しています。
MoveSpeedオブジェクトやJumpHeightオブジェクトなど、それぞれ対応した名前のオブジェクトの中に記述しています。



追加要素のセーブの実装
ここからは今回のパワーアップで追加された要素を紹介すると共に、それらのセーブの実装についても解説していきます。
アビリティスロットのかけら

追加要素としてアビリティスロットのかけらを実装しています。
それぞれ別の場所のアビリティスロットのかけらを五つ集めると、なんとアビリティスロットが増加します!
アビリティスロットのかけら収集状況のセーブ
AbilitySlotsオブジェクトの子のAbilitySlotPartsオブジェクトの中に、アビリティスロットのかけらの情報のセーブを実装しています。
アビリティスロットのかけらを集めた数の他に、アビリティスロットのかけらの収集の進捗を示すゲージの表示状態もセーブしています。

どのアビリティスロットのかけらを集めたことがあるかの情報も保存しているのですが、これはInitialize Player Trigger
をアビリティスロットのかけら毎に付与することで実装しています。ここだけPlayerオブジェクト内ではないです。

実装の内容は下のようになっています。
(下の画像はIDが.1のアビリティスロットのかけらの情報なので、Keyの末尾を.1
にしています。2つ目、3つ目…は、.2
、.3
…としています。)

アビリティスロットの数のセーブ
AbilitySlotsオブジェクトの中に、アビリティスロットのかけらによって増えたアビリティスロットの情報のセーブを実装しています。

転生

転生はプレイヤーの状態をリセットしてはじめからやり直す代わりに、パワーアップした状態で始められるシステムです。
転生情報のセーブ
Reincarnationオブジェクトの中に、前回転生時のレベル、前回転生時のレベルに応じたキャパシティや鉱石取得時の増加量、転生経験済みかどうかの情報のセーブを実装しています。

セーブ内容のリセット
プレビュー(Clusterにアップロードせず、Unityのエディタ内で動かしている状態)でのセーブ内容のリセットは、画面上部のメニューの中のCluster > Preview > Settingsを選択すると出てくるウィンドウで行えます。


アップロードされたワールドのリセットは、ワールド管理画面より行えます。
テンプレートワールド『プログレッション』のセーブ対応についての解説は以上です!
簡単にできるので是非お試しください~!
セーブ機能対応済みプロジェクトフォルダはこちらからダウンロードできます!