上書き的なことをすると、いったんサウンドが止まって再び再開という形になってしまうので
・サウンドを止めない
・メインシナリオのセーブデータロード時にサウンドの読み込みだけ無視する
ということをしないといけないです。
宴のソースコードに必要となる拡張をしたのですが、
宴4.1.5で適用するとコンパイルエラーになるかもしれないので、エラーが出るようであれば宴をアップデートしてから添付のパッケージファイルを適用してください。
(ダウンロードした添付ファイルの拡張子が *. gzになっている場合は、*.unitypackageに変えてからプロジェクトに適用してください)
この変更は、次回の宴のアップデートにも反映させる予定です。
添付のパッケージファイルを適用すると、
SoundManagerコンポーネントに、
IgnoreReadSaveData というプロパティが追加されます。
これをプログラム上でtrueにすると、サウンドのセーブデータのロードを無視するようになります。
また、デフォルトではシナリオの開始と終了時にBGMや環境音を止める設定になっています。
Adv Engineの「Is Stop Sound On Start」と「Is Stop Sound On End 」でその機能をオンオフできるのですが
これに「Is Stop Sound On Load」という、セーブデータのロード時にもサウンドを止めない機能を追加しました。
これらをインスペクター上でオフしてしまうと、ゲーム全体の動作に影響してしまうので、
サブシナリオからメインシナリオに戻るときだけ設定を変えられるようにプログラム側で操作する必要があります。
(元からオフのままでよいならプログラムは不要です)
以下、サンプルプログラムです。
//サブシナリオの開始処理
void OnStartSubScenario()
{
//~~~略~~~~
//シナリオ
開始、終了時、ロード時のサウンド停止機能を切っておく
AdvEngine.IsStopSoundOnEnd = false;
AdvEngine.IsStopSoundOnStart = false;
AdvEngine.IsStopSoundOnLoad =
false;
}
//サブシナリオの終了処理
void OnEndSubScenario()
{
//~~~略~~~~
//サウンドセーブデータロードを無視する機能をオンにする
AdvEngine.SoundManager.IgnoreReadSaveData = true;
//セーブデータから本シナリオを再開
AdvEngine.ScenarioPlayer.OnBeginReadSaveData.AddListener(OnBeginReadSaveData);
AdvEngine.OpenLoadGame(AdvEngine.SaveManager.CurrentAutoSaveData);
//~~~略~~~~
}
//再開用のセーブデータのロード直後の処理
void OnBeginReadSaveData(AdvScenarioPlayer player)
{
//~~~略~~~~
//シナリオ 開始、終了時、ロード時のサウンド停止機能を戻す
AdvEngine.IsStopSoundOnEnd = true;
AdvEngine.IsStopSoundOnStart =
true ;
AdvEngine.IsStopSoundOnLoad = true;
//サウンドセーブデータロードを無視する機能を戻す
AdvEngine.SoundManager.IgnoreReadSaveData = false;
}