宴のシナリオをスキップ、または早送りする方法

1,334 views
Skip to first unread message

jason....@ponos.co.jp

unread,
Sep 25, 2017, 3:51:54 AM9/25/17
to 宴ユーザーグループ
お世話になっております。

今、宴を使ってプロジェクトのストーリー画面を作成しているところですが、宴のシナリオをスキップするボタン、または早送りするボタンを追加したいです。理想としては「次の質問までエベントを飛ばす。シナリオエンドまでに質問がない場合、シナリオエンドまて飛んで会話シーンの終わり」。そういう機能が見当たりませんので、やはり自分で実装する必要はあるでしょうか?

自分はまだ宴を使い始めたばかりでうまい使い方がわからないのですが、想像しているのはUnity側にUIにボタンを作成して、そのボタンを押すとシナリオジャンプで「次」に飛ばすようにする。ただしジャンプ機能は「決まった場所へ移動する」機能であって、宴を呼ぶときにジャンプ先を指定したり、選択を通したらSendMessageでスキップボタンの設定を更新したりする必要があってちょっと不便だと思います。本当は「次のSelectionまたはEndScenarioまでジャンプ」コマンドがあれば(または自分で作れば)ベストですが、もし自分が実装するとなると宴の中身まだそんなに見ていないのでどこにその機能を入れればいいかまだわかりません。

もし日本語がよみづらかったらすみません。よろしくお願いします。

マッドネスラボ

unread,
Sep 25, 2017, 11:01:37 AM9/25/17
to 宴ユーザーグループ
「早送り」であれば、スキップ機能を使えば可能です。

AdvEnigne engine;
engine.Config.IsSkipUnread = true; //未読スキップを有効に
engine.Config.IsSkip = true;   //スキップを有効に


「次の選択肢までジャンプ」は現状は難しいです。
方法はいくつかあるのですが、プロジェクトの仕様次第です。

〇拡張すれば可能なケース
以下のすべての仕様が必須になります。
・「次の選択肢」に必ずシナリオラベルを割り振る
・次の選択肢のシナリオラベルから再開しても大丈夫な構成にする
 つまり、選択肢の部分で背景、キャラ表示、BGMなどを改めて表示・再生するようにシナリオを作成する必要があります。
 BGMなどは前のページを引き継ぐのが前提という構成にしてはいけない
・「自動でルート分岐しない」
 つまり選択肢以外では分岐しない。
 「好感度が高い場合は、自動でこちらのルートに分岐する」という構成を使ってはいけない。
・ジャンプ中に省略されるコマンド内で、パラメーター操作やSendMessage等の拡張含めて、省略されて問題になるコマンドを使わない。


会話シーンなどで使っていて、自動分岐がないゲームであれば多くの場合はこのケースで大丈夫かと思います。
要は「シナリオ途中でジャンプしても破綻しない仕様」であることが必須になります。
その仕様であれば、私の方で拡張用のサンプルなどを用意できると思います。

途中でジャンプして問題がある構成の場合は、
・画面手前を黒などで覆って宴全体を暗転させる
・バックグラウンドで「早送り」を高速で行う
などの拡張をする必要があるかと思いますが、これも「入力待ちがあるコマンドを使わない」ことが必須になります。



jason....@ponos.co.jp

unread,
Oct 1, 2017, 10:45:28 PM10/1/17
to 宴ユーザーグループ
ご返事をありがとうございます。

検証したところ、スキップ機能の早送りで大丈夫そうなのでそれを使わせていただきます。もしまた何か問題出た場合また訪ねるかもしれませんが、いまのところ大丈夫そうです。スキップ機能を調べずに質問してたのにご丁寧に説明してもらって、ありがとうございます。

jason....@ponos.co.jp

unread,
Oct 4, 2017, 3:22:40 AM10/4/17
to 宴ユーザーグループ
すみません、大丈夫と書いた直後に仕様の相談をしたら早送りはダメになりました。

幸い、選択肢までという話もなくなりましたので、共通の「終了処理を含めたEndScenarioだけの処理」へのジャンプで固定している。現状はスキップを押したら、こっちで用意した確認ポップアップが表示したあとにそのEndScenario+こっちが必要としているSendMessageByName処理だけが入っているスキップ用処理に飛ぶようにしています。

問題は、ジャンプしてからはもう一回タッチ入力しないとシナリオは終了しない(ジャンプからEndScenarioは直接よべれないからか、SendMessageByNameが挟んでいるからかまではわかりません)。致命的なもんだいではないですが、今そのジャンプはポップアップのところから読んでいる(Engine.JumpScenario("Skip"); をスクリプトで)ので、何かスクリプトレベルで疑似タッチをその直後に飛ばしたいと考えている。そうすればスキップ確定した瞬間に終了してくれるようになると思います。

まだこっちでコードを見ているが、UguiBackgroundRaycaster, UguiBackgroundRaycastReceiverあたりに何等かの処理を追加すればいいかなっと思っていますが、それであっているのでしょうか?何か、「このクラスにこういうメソッドを追加したほうがすんなりいく」的なアドバイスがあれば助かります。

マッドネスラボ

unread,
Oct 4, 2017, 4:00:53 AM10/4/17
to 宴ユーザーグループ
スキップボタンを押したときに呼ばれる処理に、

AdvEnigne engine;

engine.EndScenario();  //シナリオを終了
engine.Config.JumpScenario(label);  //特定のシナリオラベルにジャンプ


のようにして、今のシナリオを終了してから次のシナリオにジャンプするとしてみるのはどうでしょうか

jason....@ponos.co.jp

unread,
Oct 4, 2017, 4:46:44 AM10/4/17
to 宴ユーザーグループ
それで大丈夫みたいです!ありがとうございます!
Reply all
Reply to author
Forward
0 new messages