ページ開始、終了など特定のタイミングで特別な処理をする
投稿日:2016年2月17日 | 最終更新日:2024年5月9日
宴では、ページ開始、終了などで特別な処理を呼び出すように設定することができます。
これを使うことで、「文字送りのサウンドを鳴らす」シナリオ系コマンドでは処理しきれない特殊な処理をすることできます。
イベントの設定の仕方
Unity上の、AdvEngineのAdvPageコンポーネントにイベントを登録できます。
UnityEventというUnityのイベントの仕組みを使っています。これはUnityのボタンのクリックイベントなどでも使われている基本的な仕組みです。
Unityのインスペクターから設定もできますし、プログラムからAddListenerを使って設定もできます

| 名前 | 内容 |
|---|---|
| OnBeginPage | ページの開始 |
| OnBeginText | テキストの表示開始 |
| OnChangeText | テキストが変わった |
| OnUpdateSendChar | 文字送り中 |
| OnEndText | テキストの表示終了 |
| OnEndPage | ページの終了 |
| OnChangeStatus | ステータス変更があったとき |
| OnTrigWaitInputInPage | ページ内の入力待ち開始 |
| OnTrigWaitInputBrPage | 改ページ入力待ち開始 |
| OnTrigInput | ページ内の入力待ちや改ページの入力待ちのクリック入力がされたとき スキップなどによる入力待ち解除は検知しない |
既に用意してあるスクリプト
ページイベントを使った宴公式のスクリプトを紹介します。
基本的にはAdvEngineオブジェクトにAddComponentして使ってください

ここにない処理が必要な場合でも、これらを参考にすれば、自分でスクリプトなどを書いて拡張することができるようになると思います。
しゃべっていないキャラをグレーアウトする

複数キャラを同時に表示する場合に、「誰のセリフかわからない」ということが起きがちです。
その場合に、「現在しゃべっていないキャラをグレーアウトする」というスクリプトです。
Utage/Scripts/ADV/Extra/AdvCharacterGrayOutController.cs

| プロパティ名 | 内容 |
|---|---|
| Engine | AdvEngineオブジェクトを設定します |
| Mask | グレーアウトしないキャラのパターンを設定します。Noneにするとグレーアウト処理をすべて無効化し何もしません。 |
| MainColor | グレーアウトしない場合の基本色を設定します |
| SubColor | グレーアウトする場合の色を設定します。グレー以外の色も設定可能です。黒を設定すればブラックアウトになります。 |
| FadTime | 色変化する際のフェード時間を設定します。 |
| No Grayout Characters | グレーアウトを無視するキャラクターのラベルリスト。 演出中などでグレーアウトしたくないときに。詳細は下記に |
| Enable Change Order | グレーアウトしないキャラクターを手前に表示する機能を有効にする。詳細は下記に |
| Order Offset | グレーアウトしないキャラクターを手前に表示する際のオフセット値。詳細は下記に |
| Maskの名前 | 内容 |
|---|---|
| Talking | しゃべっているキャラはグレーアウトしない |
| NewCharacerInPage | このページで新しく表示されたキャラはグレーアウトしない |
| NoChanageIfTextOnly | テキストのみ表示のときは、色変化しない |
グレーアウトしないキャラを制御
「No Grayout Characters」に設定されたラベルのキャラクターはグレーアウトされなくなります。
その名前リストをSendMessageByNameで制御するサンプル(SampleCharacterGrayOutControllerRecieveMessage.cs)も追加しました。
AdvEngineにAddComponentして、SampleCharacterGrayOutControllerRecieveMessageに、SendMessageByNameコマンドで命令を送って「強調表示するキャラクターの名前リスト」を操作するのを想定しています。

ただし、この場合は
・「強調表示のキャラクター」は一度設定するとゲーム終了後まで解除されない(Arg3の空白行を再設定することで解除)
・セーブロードの対象にはならない
という点に注意してください。セーブロードに対応する場合は、SendMessageByNameを使うのではなく
宴のパラメーター(Paramシートで設定するもの)を利用して、「強調表示するキャラクターの名前リスト」を常に更新するような処理を書くなどしてみてください。
同様に、ほかの拡張スクリプトもSendMessageByNameやカスタムコマンド、パラメーターシートで制御するようにすればシナリオから細かな調整が可能です。
手前に表示
「Enable Change Order」をオンにすると、喋っているキャラクターを常に手前に表示できます。
「Order Offset」で設定された値が、レイヤーシートの「Order」に加算され、合計値が表示順となります。

文字送りのサウンドを鳴らす
一部で「ポポポ音」などと言われる、「テキスト表示の文字送りの間にならすSE」を設定するスクリプトです。
ボイス代わりにしゃべっている雰囲気を出すことができるため、昔からよく使われている手法です。
Utage\Scripts\ADV\Extra\AdvTextSound.cs

| プロパティ名 | 内容 |
|---|---|
| Engine | AdvEngineオブジェクトを設定します |
| Type | 鳴らし方を設定します Time……一定時間ごとに鳴らす。ただし、文字の表示速度が遅いなどで新しい文字がまだ表示されていない場合は鳴りません。 CharacterCount……一定の文字数ごとに鳴らします |
| Default Sound | 基本的にならす音を設定します。未設定の場合は鳴りません |
| Sound Info List | キャラクターごとに鳴らす音を変えたい場合に設定します。Keyにキャラクターラベルを、Soundに鳴らしたい音を設定してください。このリストにないキャラの場合は、デフォルトの音が鳴ります |
| Interval Count | TypeがCharacterCountの場合の、何文字ごとに鳴らすかを設定します |
| Interval Time | TypeがTimeの場合の、次に鳴らすまでのインターバル時間を設定します |
文字の表示速度は、コンフィグ設定で変えられることもあるので、その点も考慮して使ってみてください。
チャット風ログのサンプル
ページイベントを使って、メッセージテキストをチャット画面のようにログをタイムライン表示するサンプルです。
こちらはあくまでサンプルなので、このシーンやスクリプトをそのまま使ったり変更したりせずに、参考にして自分で作ったシーンやスクリプトに反映するようにしてください。
サンプルなので、簡易的な(見栄えの悪い)UIでしかないので、実際にはUIをあちこち拡張・変更する必要があると思います。UIの作成に慣れないと難しいかもしれません。

