【Unity】TopDown Engine付属のInventory Engineのセーブがデフォルトだとどこで行われているか

title ゲーム開発

この記事でのバージョン
TopDown Engine:バージョン 2.3.1

はじめに

TopDown Engineというアセットをご存じでしょうか。

TopDown Engine

TopDown Engine

トップダウン系のゲームが気軽に作れるツールになります。

このアセットにはこちらのInventory Engineというものも付属しています。

Inventory Engine

Inventory Engine


インベントリ周りのシステムが入ったアセットです。

このInventory Engineはアイテムを拾ったり、使用したり、装備したりと様々なことが出来るのですが、

インベントリにあるアイテムはいつセーブされているのか?というのが分かりづらかったので、今回書き残しておこうと思います。

セーブ

早速本題ですが、デフォルトのTopDown Engineに付属されているスクリプトだと

セーブはシーン切り替えを行う直前のタイミングで実行されています。

「ステージ移動とかのロード前に行うのは分かりやすいのでは?」

とお思いの方も居るでしょう。

確かにそれも間違いではないのですが、TopDown Engineには別のシーンに行くロードもありますが、

同じシーンをリロードする機能も搭載されています。

このリロードの際にもセーブが実行されます。

なので、プレイヤーが死亡した場合にリロードを実行すると、死亡時点での所持品になります。

この仕様は、例えばダークソウルのようなゲーム仕様だと合致します。特に問題はありません。

ですがメタルギアソリッドのようなゲーム仕様の場合、問題が生じます。

ゲームオーバーになった際、通常はそのステージの最初まで戻り、所持品も最初の時まで戻っていると思います。(自分の記憶が正しければ)

これが死亡時点での所持品にセーブされるとなると、何度かゲームオーバーを繰り返しているうちに詰みます。(弾が無くなったり)

なので、ゲーム仕様によってこのセーブ仕様は変えないといけません。

セーブのリクエスト

「じゃあ、仕様を変えるときはどうすればいいんだよ!」

これはスクリプトを変更するしかないです。

といっても、現状のセーブのリクエストの箇所をコメントアウトして、セーブしたいときにリクエストを出せばいいです。

Save and load | Inventory Engine Documentation
This page explains how the Inventory Engine saves and loads inventory data so it persists across sessions.


1行だけでセーブ出来る&どこでも呼び出せるため、非常に便利です。

デフォはLevelManagerスクリプトのTriggerEndLevelEvents()関数内でリクエストしているのでここをコメントアウトしとけばいいです。

流石にソースコードは書けないので、自分で確認してみてください。

最後に

現在作成中のゲームは、メタルギアソリッド側の仕様で考えていました。

ゲーム中にリロードしたらインベントリが更新されてて、アイテムが無限増殖できる状態になっていました。

これはいかんな…ということで調査していたのですが、日本語の解説なんて無いし自力でスクリプトを見ていました。

TopDownEngineは人気アセットですので、誰かの役に立てたなら幸いです。


おわり!

コメント