別々にセーブ(または中断、再開)となると、かなり複雑な構成になります。
その1でもその2でも可能ですが、微妙な仕様で設計が変わりますし、微妙な部分でやれないこともあったりします。
普通は起きない問題がでてきますので、それを解決する技術(プログラムの技術や、Unityのシーン管理の基本など)がないと難しいと思います。
プロジェクトの実装方法自体がとても例外的なので、細かいプロジェクトの仕様しだいで、細かい部分に関しては何とも言えないです。
>できればセーブデータを別々に管理したい
シーンAでもシーンBでセーブファイルを別にしたいというのであれば、その2でやるしかないです。
>もしくはシナリオBの中断地点を呼び出せるようにしたいのですが、これは「その1」のやり方で可能でしょうか。
シナリオAではなく、シナリオBを中断・再開するのですか?
宴には厳密な意味での中断・再開という機能はありません。
「再生中のシナリオBを中断→ シナリオAを再生 →
シナリオBの中断していたシナリオを再生」
ということをやりたいのであれば、
「再生中のシナリオBを中断→ シナリオBのセーブデータをプログラム上で保持 → シナリオAを再生 → シナリオBの中断していたシナリオを再生(プログラム上にもっていたセーブデータを使って、シナリオBをロードして再開)」
という形になります。
AdvEngineに、
public void WriteSaveData(AdvSaveData saveData)
public void OpenLoadGame(AdvSaveData saveData)
というのがあるのでそれを使います。
ただし、セーブロード機能での中断・再開は「ページの冒頭から再生しなおし」になりますので、一度読んだセリフや演出が再生しなおされることになります。
それを避けたいのあれば、その1のやり方は使えません。(ですが、その2は実装が難しく複雑になると思います)
ただし、セーブデータはシシナリオAを再生前の状態になるため、シナリオAで変更させたパラメーターなどが巻き戻ってしまいます。
なので、さらにプログラム上で別にシナリオAから操作するパラメーターの影響を記録する仕組みを用意して、それをシナリオBのロード後に反映させるプログラムを書かなければいけません。
>「その2」ではハブシーンをマネージャーシーンに持つ、という理解で大丈夫でしょうか。
そうです
>その場合開始はハブシーンからになるのでしょうか。シーンAからの開始にしたい、と考えています。
ビルドしたゲームがどのシーンから開始するかは、Unityのシーン設定(Build Settings)しだいで一番最初に設定しているシーンから始まりますので、シーンAを一番上に登録すればそうなります。
Unityエディタ上でのテストプレイでは、現在編集中のシーンから始まります。
>また、確認なのですがSceneManagerで呼び出すオブジェクトは別シーンのAdvEngineとなるのでしょうか。
どこから呼び出すか次第ですが、SceneManagerは、ロード済みの別シーンにあるオブジェクトを、ほかのシーンから呼び出すのに使うものです。
同一のシーンにあるAdvEngineであれば使う必要がないです。
別のシーンにあるAdvEngineを呼び出すのであれば使う必要があります。(別のやり方もありますが、基本的には使う必要があります)
>可能なら「その1」のやり方で中断地点の呼び出しをするのがいいでしょうか。
正直なんともいえません。
パラメーターの受け渡しはそんなに難しくないのですが、問題になるのはむしろ「中断して再開」のほうです。
Unityは「中断して再開する」という仕組みが用意されていません。
なので、宴にも基本的にはそのやり方がないです。
その1をやった場合はセーブロードを使うしかないです。この場合は上記の「ページの冒頭から再生しなおし」という問題が解決できません。
その2のやり方をした場合は、中断時にいったんシナリオを止める必要があるのですが、その仕組みは用意していないため、あれこれプログラムする必要がでてきます。
2022年4月9日土曜日 9:34:51 UTC+9 優水: