2つのシーン間でコンフィグの設定を共有したい

18 views
Skip to first unread message

ゆき

unread,
May 26, 2024, 1:47:56 AMMay 26
to 宴ユーザーグループ
Unity バージョン:2022.3.27f1
宴 バージョン:4

度々失礼します。

実装したいゲームの機能上、1つのゲームの中に宴のプロジェクトを2つ作成して本編と続編(2つ別のシーンでボタンでシーンが切り替わる)が遊べるようにしたのですが、その際コンフィグの設定がそれぞれで独立してしまうことに気が付きました。

1つのシーン内に収めることも考えましたが、ギャラリーなど完全に別で表示したい等がありもう一つ宴のプロジェクトを作った方が早いかなと思って制作を進めてしまったため難しく…

片方のコンフィグの設定をもう片方へ共有する方法などありますでしょうか。
下記のドキュメントでシングルトンあたりを一度試しましたが自分ではうまくできませんでした…。


マッドネスラボ

unread,
May 26, 2024, 10:24:58 AMMay 26
to 宴ユーザーグループ
よくある質問等でも答えているのですが、
複数シーンの実装方法は人によってやり方が違うので、やり方によって答えが違うので、残念ながらたぶん正解は答えられないです。

2つのシーン・・・仮にAシーンとBシーンとします。

A、Bのシーンを加算してロードするやり方をしていると、二つ以上のAdvEngineが同時に存在することになるのでかなり面倒なことになります。
色々なところで使っているFindObjectで取得するAdvEngineが別のシーンのものを取得してしまうかもしれないので、そうならないようにする必要があります。
これはかなり大変なので、避けたほうがいいです。

A、Bのシーンを完全に切り替えてロードしている(つまりAシーンをアンロードしてからBシーンをロードしている)のであれば、
AのシーンからBのシーンに移動する直前に、システムセーブデータをファイルに書きこむようにすれば、
Bのシーンが始まってAdvEngineが初期化されたときにシステムセーブデータを自動的にロードするので、システムセーブデータ内にあるコンフィグのデータもロードすることができます。
システムセーブデータの書き込みは次のように行います。

void Sample(AdvEngine advEngine)
{

advEngine.SystemSaveData.Write();
}

ただし、これはコンフィグ以外のシステムセーブデータもロードするので、A・BのAdvEngineが違うシナリオを使っている場合は、
片方には存在しないパラメーターなどをロードすることになり、エラーがでてしまうのでこのアプローチは不可能です。
その場合、シーン切り替え時にコンフィグのセーブデータをバイナリに残して、シーン切り替え後にそのバイナリからConfigの値をロードする形になります。
その「セーブデータをバイナリに残す」という処理を行うオブジェクトはシーンの切り替え時にも生き残らせないといけないです。(DontDestroyを使ってマネージャーオブジェクト的なものを作る必要があります)



2024年5月26日日曜日 14:47:56 UTC+9 ゆき:

マッドネスラボ

unread,
May 26, 2024, 10:39:15 AMMay 26
to 宴ユーザーグループ
追記:
上記のシステムセーブデータを共有するやり方の場合、ディレクトリ名ファイル名を同じものにする必要があります。

2024年5月26日日曜日 23:24:58 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages