Unity

【Unity】宴でUnity側からシナリオ自体を一時停止させる

ティラノスクリプトでは【sleepgame】というタグがあったことでそれを介して一時的にゲームを休止状態にすることができました。
その状態からコンフィグに入って設定をいじり、再び戻ってくるというタグですね。

対してUnity側。
宴では「PauseScenario」を使ってシナリオを止める必要がありますが、これが止めてもポイントで設置してあるところでしか使えません。なかなか厄介です。

つまり、節目で設置しておかないとシナリオを止めて操作がしにくい。個人的には思ってた想定の動きになりにくいなと感じました。Unity側の問題もあるし、おそらくバグが出る可能性もあったり複雑なんでしょう。一つのプログラムで直結してないから、相互で影響する。

EndScenarioとPauseScenario | Unity用ビジュアルノベルツール「宴」
シナリオの終了位置を設定します。 「宴」では基本的にシナリオシートの一番最後までくると、シナリオは終了扱いにな

エロゲーで言うバックログから過去のシナリオに戻る機能があるようで、それを搭載するにもなかなか面倒なのと、制御が大変そうだと思いました。

他の方法でできるかどうかと、表面上完全に止められるかどうかがポイントになりそうですけど、Unity側から宴のシナリオに干渉してシナリオジャンプさせれば、そこのジャンプ前で一時的に各種機能制限を施せれば疑似的にシナリオ停止にはなるかなと思いました。

自分が考えた方法として、まずエクセルでこんな状態になってシナリオジャンプ可能なようにラベルが置いてある。
仮にLabel1、Label2、Label3があったとしたら、指定することでそのシーンに飛べるということです。

この場合、下側に*Next、*Prevとかありますけど、この部分も正常に動作させるならボタンを数だけ用意しないと重複エラーでここしか動きません。

Jumpさせる場合、Label1があったら、その下側にシナリオを書いておいてボタンで移動するようにする。

Unity側から呼び出すために各種ボタンを設置。
ボタンはLabel1、Label2、Label3…というように該当する分だけ用意して設置。

ボタン内部の処理は、AdvEngine参照できるスクリプトを付けたOnClickイベントでラベル指定し、こちらのコードで参照。AdvEngineController JumpScenarioにラベル指定で打ち込む。

会話シーンとして宴を使う | Unity用ビジュアルノベルツール「宴」
宴はビジュアルノベルだけではなく、ゲームの会話シーンやチュートリアルとして使うこともできます。 その方法をまと

各種ボタンを押すことでラベルジャンプ機能という形でラベルなら自由に遷移できるようにする、ぐらいですかね。
欠点はボタン設定が極めて手間であるということ、スクリプトで書けるならボタン設置の手間は少ないにしても、結局はボタン設定がネックだということです。これにより設定ミスでシーン遷移が重複するだとか人為的エラーの確立も上がるわけです。

表面上はパネル機能を使っているので、パネルで全面を覆えばクリックは疑似的に無効化できますが、キー入力は受け付けるので、Ctrlキーだとスキップ動作になります。
UIも全面を覆えるなら作動しないでしょうが、そうしないならUIを一時的に無効化処理、キー入力無効化処理も必要で、ここまでやってようやく疑似的な休止状態になるでしょう。

逆に宴側からUnity側を呼び出す場合、かなり色々とエクセルで項目増やさないと辛そうで、場合によっては大変だなと思いました。特にシナリオがラベルで区切ったら、シート単位でやらないとまずい場合もありそう。

そう考えるとUnity側で可能な限りやった方がいいような気もしますが、作るものによって対応した方がいいと思いました。

自分が質問したことで宴側にキー入力を一時的に無効化するドキュメントが追加されました。

宴への入力を一時的に無効化する

自分はボタン形式で対応しました。というのも、シナリオジャンプすると入力無効化が残っていたため、ボタンで入力有効化を入れ込んでOnClickに組み込みました。

継承とoverrideができれば問題ないんでしょうが。

コメント