WaitCustomで停止時にスキップ状態を解除したい。

26 views
Skip to first unread message

大鳥こはく

unread,
Dec 3, 2025, 3:34:44 PM12/3/25
to 宴ユーザーグループ
のバージョン: 3.12.8
・UnityのバージョンとOS: Unity6000.2.4f1 Windows 10
・Unityの習熟度: 中級者。プログラムはできます。

スキップモードでセリフをスキップして、WaitCustomコマンドまで到達すると、スキップ状態は解除されず、スキップトグルがONのままゲームが停止します。
ここでプレイヤーに操作させるのですが、画面に表示されているスキップトグルがONのままなのでプレイヤーはまだスキップ状態かと思い待ち続けてしまう可能性が高いです。

WaitCustomコマンドに到達した時に、スキップトグルをOFFにすることはできますか? 

以上よろしくお願いいたします。

大鳥こはく

unread,
Dec 3, 2025, 3:53:05 PM12/3/25
to 宴ユーザーグループ
補足いたします。
私はSelectionコマンドと実質同じことを、 WaitCustomコマンドで実装しているので、挙動をSelectionコマンドと同じに揃えたいということになります。
以上、よろしくお願いいたします。


2025年12月4日木曜日 5:34:44 UTC+9 大鳥こはく:

マッドネスラボ

unread,
Dec 3, 2025, 11:43:54 PM12/3/25
to 宴ユーザーグループ
Selectionコマンドでスキップを解除するのは、 Selectionコマンド実行時に下記のプログラム( StopSkipInSelection  )を呼び出しているからです。


public override void DoCommand(AdvEngine engine)
{
engine.Config.StopSkipInSelection();
}

StopSkipInSelectionは、内部でConfigの 「Is Stop Skip In Selection」をチェックして、それがtrueであればスキップを解除します。

public void StopSkipInSelection()
{
if (IsStopSkipInSelection && isSkip)
{
isSkip = false;
}
}

なので、WaitCustomコマンド実行時に、これを呼び出すようにすればいいです。
独自のプログラムを呼び出すには、色々な方法があります。

今回のように、既存のコマンド実行時に統一してなにか処理を追加したいのであれば、
Adv Scenario Playerの「On Begin Command」イベントを使用するとよいかと思います。

以下、サンプルです。


using UnityEngine;
using UtageExtensions;
using Utage;

    public class SampleCommandEvent : MonoBehaviour
    {
        public AdvEngine Engine => this.GetAdvEngineCacheFindIfMissing(ref engine);
        [SerializeField]
        protected AdvEngine engine;
       
        void Awake()
        {
            Engine.ScenarioPlayer.OnBeginCommand.AddListener(OnBeginCommand);
        }
       
        void OnBeginCommand(AdvCommand command)
        {
            if (command.Id == AdvCommandParser.IdWaitCustom)
            {
                Engine.Config.StopSkipInSelection();
            }
        }
    }

2025年12月4日木曜日 5:53:05 UTC+9 kohaku...@gmail.com:

大鳥こはく

unread,
Dec 4, 2025, 2:51:27 PM12/4/25
to 宴ユーザーグループ
ありがとうございます。

Adv Scenario Playerの「On Begin Command」イベントを使用することで、やりたいことを実現できました。
ちなみに、GetAdvEngineCacheFindIfMissingメソッドが宴3には存在しないみたいだったのですが、こちらは宴4だけの機能でしょうか?

以上よろしくお願いいたします。


2025年12月4日木曜日 13:43:54 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Dec 4, 2025, 5:54:33 PM12/4/25
to 宴ユーザーグループ
すみません。GetAdvEngineCacheFindIfMissingは宴4以後のものです。
内容は、engineがNULLだったら(インスペクター上で設定されていなかったら)、
自身または親GameObjectからAdvEngineを探し、それでも見つからなかったら同一シーン内や、現在の全シーン内から検索して探すという処理です。

インスペクター上で手動設定をし忘れていても動くようにしているというだけなので、
シンプルに次のように書いて、インスペクター上でAdvEngineの参照設定をするだけで良いです。
      public AdvEngine Engine => engine;
        [SerializeField]
        protected AdvEngine engine;


2025年12月5日金曜日 4:51:27 UTC+9 kohaku...@gmail.com:
Reply all
Reply to author
Forward
Message has been deleted
0 new messages