サブシナリオ再生中の使用BGMをそのままメインシナリオでも上書きしたい

43 views
Skip to first unread message

abyss good games

unread,
Apr 10, 2025, 6:00:52 AMApr 10
to 宴ユーザーグループ
宴のバージョン: 宴4.1.5
UnityのバージョンとOS: Unity6 6000.0.33f1 Windows11
Unityの習熟度:中級者。スクリプト書けます。

お世話になっております。
サブシナリオ再生中に流したBGMを、メインシナリオに戻る際そのまま流したいです。

【SampleSubScenario.cs】
        //再開用のセーブデータのロード直後の処理
        void OnBeginReadSaveData(AdvScenarioPlayer player)
        {
            //シナリオ再開前にパラメーターだけ、サブシナリオで変化したものに戻す
            BinaryUtil.BinaryRead(BufferParam, (reader) => AdvEngine.Param.Read(reader, AdvParamData.FileType.Default));
            AdvEngine.ScenarioPlayer.OnBeginReadSaveData.RemoveListener(OnBeginReadSaveData);
        }

パラメーターの上書きと同様に、BGMを上書きしたいのですが、どのように書けばよろしいでしょうか。

マッドネスラボ

unread,
Apr 10, 2025, 8:31:16 AMApr 10
to 宴ユーザーグループ
上書き的なことをすると、いったんサウンドが止まって再び再開という形になってしまうので
・サウンドを止めない
・メインシナリオのセーブデータロード時にサウンドの読み込みだけ無視する
ということをしないといけないです。

宴のソースコードに必要となる拡張をしたのですが、
宴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;
}

これらの機能はプログラムからオンオフしないと元に戻らず、その動作が継続してしまうので、
サブシナリオの再生中に、別の方法でシナリオがロードされたり終了したりするなどで、ここで用意した元に戻す処理が呼ばれないようであれば、
その動作に合わせて機能をもとに戻すようにしてください。

また、戻り先のメインシナリオがちょうどBGMコマンドがあるページだった場合は、そのBGMが再生されてしまうと思うのでご注意ください。


2025年4月10日木曜日 19:00:52 UTC+9 abyss good games:
UnstopSoundEndSubScenario.unitypackage

abyss good games

unread,
Apr 22, 2025, 10:02:36 AMApr 22
to 宴ユーザーグループ
返信が遅くなってしまい申し訳ございません。
ご丁寧にありがとうございます!無事実装出来ました。

追加で質問です。

 //サブシナリオの開始処理
    void OnStartSubScenario()
    {
        //~~~略~~~~

  //シナリオ 開始、終了時、ロード時のサウンド停止機能を切っておく
AdvEngine.IsStopSoundOnEnd = false;
AdvEngine.IsStopSoundOnStart = false;
AdvEngine.IsStopSoundOnLoad =  false;
    }

ここでAdvEngine.IsStopSoundOnStart = false; としているにも関わらず、サブシナリオ開始時にそれまで流れていたサウンドが止まってしまいます。
ここでいう「シナリオ」はメインシナリオのことでしょうか?
サブシナリオ開始時に、メインシナリオ開始時のサウンド停止機能をfalseにする。という認識であっておりますでしょうか。

サブシナリオ開始時にもサウンドが停止しないようにするには、どうすればよろしいでしょうか。

2025年4月10日木曜日 21:31:16 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Apr 22, 2025, 4:26:08 PMApr 22
to 宴ユーザーグループ
>ここでいう「シナリオ」はメインシナリオのことでしょうか?
サブシナリオもではあるのですが、 
サブシナリオを開始するAdvEngine.JumpScenarioではサウンドの停止は自動では呼ばれず、
サブシナリオに入る直前に、手動でクリア処理(AdvEngine.ClearOnEnd)を呼んでいるので、そこで止まってしまってます。
なので、それを呼ぶ前に自動停止フラグをfalseにしておいてください。

    //サブシナリオの開始処理
    void OnStartSubScenario()
    {
        //セーブを無効化
        AdvEngine.SaveManager.Type = AdvSaveManager.SaveType.Disable;
        IsAutoSave = AdvEngine.SaveManager.IsAutoSave;
        AdvEngine.SaveManager.IsAutoSave = false;


  //シナリオ 開始、終了時、ロード時のサウンド停止機能を切っておく
AdvEngine.IsStopSoundOnEnd = false;
AdvEngine.IsStopSoundOnStart = false;
AdvEngine.IsStopSoundOnLoad =  false;

        //今の表示等をクリア
        AdvEngine.ClearOnEnd();
    }

2025年4月22日火曜日 23:02:36 UTC+9 abyss good games:

abyss good games

unread,
Aug 30, 2025, 5:06:59 AM (12 days ago) Aug 30
to 宴ユーザーグループ
すみません、返信し忘れておりました。
こちらで実装できました、ありがとうございます!

2025年4月23日水曜日 5:26:08 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages