(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発しているゲームです!


セーブポイント(セーブの仕掛け)を使って擬似的に任意の数字や真偽値(フラグ)を保存し永続化する方法【UEFN】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unreal Editor for Fortnite(UEFN) 27.11


はじめに

この記事はUnreal Engine (UE) Advent Calendar 2023(シリーズ 1)の1日目の記事です。



ちなみにAdvent Calendarとはなんぞやという方は以下を参照の事。



これはUEに関する知見をシェアするものですが、UEFN(Unreal Editor for Fortnite)もOKという事で、

UEFNで擬似的に任意の数字や真偽値(フラグ)を保存し永続化する方法

つまりセーブ機能を実装する方法の紹介です!


ちなみにUEFNでは個人で4つのゲーム(マップ)をリリースしており、

今回のセーブ機能が実装されてるのは最新作のGOLD MONSTER WORLDのみです。

https://www.fortnite.com/@kan_kikuchi


セーブポイント(セーブの仕掛け)とは

まずセーブポイント(セーブの仕掛け)とはなんぞやという所からですが、

公式ドキュメントには以下のように説明されています。

セーブポイント は、撃破数のトラッキングの永続性、複数のゲームセッションにわたるインベントリや素材のトラッキングといったものを追加する方法をクリエイターに提供します。


つまり、元々フォートナイトに関する数値を保存出来るだけであって、

これ自体に任意の数字や文字列等を保存する機能はありません。


ではどうやるのかというと、「マカライト鉱石の数 = LV」のように

素材の数と任意の数字を関連付けて擬似的に保存します。


そして数字が保存出来るという事は「0 = false, 1 = true」という形式

ビットフラグのように1つの値で複数の真偽値を保存する事も可能です。


なお、素材の種類はかなり豊富にあるので、これで結構な種類の数字を保存出来ます。


ちなみに現状UEFNには他にデータを保存する機能はありませんし、

ファイルの書き出しや読み込み、外部との通信も出来ないので、

基本的にはこれ以外でデータを永続化する方法はないと思われます。

(UEFNで見たことはないが復活の呪文方式も出来なくはなさそう)


セーブポイントの準備

ではここから本題ですが、まずはセーブポイントの準備をしていきます。

セーブポイントはFortinite/Devicesにあるのでこれをレベルに配置し、


素材やゴールドを保存できるようにチェックをいれます。

また、「プレイヤーにデータの削除を許可する」はチェックを外した方が無難です。

(現状、データの削除時の検知が正常に出来なかったりして使いにくいため)


また、セーブポイントは現状プログラム(Verse)から操作できないので、

手動保存や削除はトリガーを使って行うと良いかと思います。

(オートセーブもあるがタイミングがよく分からないので手動でやると安心)


なお、アイテムのドロップを許可すると素材数を変えられてしまうため出来ないようにします。


これでセーブポイントの準備は完了です。

あとは素材数を任意の数字に合わせて増減させればいいだけですが、

残念ながら素材数をプログラムから直接操作する事は出来ません。

という事で次項からはデバイスを使って素材数を操作する方法です。


素材数の取得

素材をいくつ持っているかを確認するには条件付きボタンを使います。


キーアイテムに好きな素材を設定すれば、


プログラムからGetItemCount(agent, キーアイテムの番号)という形式で素材数を取得できます。


なお、キーアイテムは3つまでしか設定できないので、

それ以上必要な場合はさらに条件付きボタンを設置する感じです。

また、建築素材等、ゲームで使いたい素材は避けるようにしましょう。


素材数の増加(付与)

次に素材数を増やすにはアイテムグランダーを使います


アイテムリストに増やしたい素材の種類と数を設定すれば、


プログラムからGrantItem(agent)という形式で素材数を増やせます。


ただし、例えば数量1のアイテムグランダーを用意して

100回GrantItemを実行して100個付与しようとすると

1~100までカウントアップをするため結構時間がかかります。

しかもそのカウントアップしてる間に条件付きボタンで数を取得しようとすると、

カウントアップ途中の数字になってしまうため、素材数に齟齬が発生しています。


なので数量1、10、100のように複数のアイテムグランダーを用意し、

415にしたいと時は数量100を4回、10を1回、1を5回という具合に

なるべくアイテムグランダーを実行する数を減らした方が良いです。


ちなみにアイテムグランダーの数量をプログラムから変更する事は出来ません。


素材数の減少(削除)

最後に素材数を減らすにはアイテムリムーバーを使います。


アイテムグランダーと同様にアイテムリストに増やしたい素材の種類と数を設定すれば、


プログラムからRemove(agent)という形式で素材数を減らせます。

そしてこちらも数量別に複数のアイテムリムーバーを用意した方が良いです。


おわりに

まとめると以下のように結構な量のデバイスが必要になります。

  • セーブポイント
  • 手動セーブや削除をするためのトリガー
  • 条件付きボタン(素材数3つごとに1つ)
  • アイテムグランダー(素材の種類×数量別)
  • アイテムリムーバー(素材の種類×数量別)



また、これらを管理や操作するVerseプログラムも必要なので、意外と大変だったりします。