ビジュアルノベルのオートモードは何を待つ?音声終了・読むための待ち時間・演出完了を分ける
一文を自動で送ってよいかは、文字表示、読むための待ち時間、音声終了、必要な演出を個別に確認し、読者が操作を引き継いでいないことまで確かめて判断します。温室を舞台にした架空の三文から、演出担当と実装担当に渡せる待機ルール表を作ります。

はじめに
オートモードで次の文へ進んでよいのは、文字がすべて表示され、読むための所定の待ち時間を満たし、その文の音声が自然に終了し、必要な演出が完了していて、なおかつ読者の操作による一時停止がないときだけです。これらがすべてそろって初めて「自動送りが可能な状態」になります。どれか一つの通知だけで次の文へ送ってはいけません。
以下の温室の場面は、解説のために創作した架空の例です。実際のユーザー事例、実測結果、実際に操作して行ったテスト、DramaForkの製品機能ではありません。庭師のボイス付きの注意に続いて、ボイスなしの地の文が入り、最後にカーテンが開くのを待ちます。特定のエンジンを前提にせず、この三文について一文ずつルールを決めていきます。
1. 観測できる完了と、確認できない理解を分ける
「文字を表示し終えた」ことは観測できますが、「読者が読み終えた」ことは時間だけでは確認できません。企画側は後者を、読むための待ち時間として実行可能なルールに落とし込み、読者が調整や一時停止をできるようにする必要があります。カウントダウンの終了を、内容を理解した証拠として扱ってはいけません。
この例では、現在の文の最後の文字が完全に表示された時点から、読むための待ち時間を加算する方式を採用します。必要な時間は、その文の表示文字数と読者が選んだ待ち時間設定に基づいて決めます。句読点をどう数えるかもプロジェクトのルールに明記し、ボイスの有無にかかわらず同じ基準を使います。ここでは、誰にでも適した一定の速度は提示しません。
音声再生と、読むための待ち時間の計測は並行させられます。音声のほうが長ければ音声を待ち、読むための待ち時間のほうが長ければ文字を残します。この方式では、音声終了後に読むための待ち時間を丸ごともう一度追加しません。別の方式として、音声を聞き終えてから計時を始める方法もあります。文字を読み返す時間を確保できますが、短い文では間延びを感じやすくなります。どちらも成り立つ方式ですが、同じ一連の文章の中で説明なく混在させるべきではありません。
2. 五つの条件を待機ルール表にまとめる
まず各文について、ボイスの有無と、自動送りを止める演出の有無を登録し、次の表を埋めます。ボイスなしは事前に分かっている設定であり、再生失敗は異常です。両者に同じ「終了済み」フラグを使ってはいけません。
| 確認項目 | この例のルール | 自動送りを許可するために観測できる根拠 |
|---|---|---|
| 文字表示の完了 | 現在の文の文字がすべて表示されている | 現在の文の全文表示完了通知を受け取った |
| 読むための待ち時間 | 全文表示後、文の長さとユーザー設定に応じて時間を加算する | 現在の文の有効な待ち時間が所定の長さに達した |
| 音声終了 | ボイス付きは自然な再生終了を待ち、ボイスなしは明示的に対象外とする | 現在の文の終了通知、または事前登録されたボイスなしの設定 |
| 演出完了までの進行保留 | 現在の文の完了待ちリストに登録された演出だけを待つ | リストの全項目が指定の完了状態に達した |
| 一時停止と操作の引き継ぎ | オートモードが有効で、読者が操作を引き継いでいない | 読者が一時停止しておらず、バックログやメニューも開いていない |
ユーザーの待ち時間設定は、読むために必要な待ち時間を決めるための入力です。別の独立したカウントダウンではありません。この例では、文に入るときに設定を読み取ります。途中で読者が設定画面を開いて変更した場合は、まず一時停止し、明示的に再開された後、新しい設定で現在の文の待ち時間を計算し直して、ゼロから加算します。もう一度待つことにはなりますが、遅い設定を選んだ直後に次へ送られる事態を防げます。
「演出完了」は具体的な状態を指す必要があります。たとえば、この例では「カーテンが全開位置に到達した」と書き、「画面がだいたい整った」とは書きません。温室内で光を受けて舞うほこりのループ演出は、完了待ちリストに入れません。終点のない装飾効果を入れると、いつまでも次の文へ進めなくなるためです。
3. 三つの文で、自動送りが可能か順に判断する
一文目は、庭師のボイス付きの注意です。「その鉢の苗にはまだ触らないで。カーテンを開けるまで待っていて。」ここでは注意を伝えるだけで、まだカーテンは動かしません。文字を表示し終えたら読むための待ち時間を数え始め、音声はそのまま再生します。待ち時間を先に満たしても、次へは進めません。ボイスが自然に終了した後、オートモードと一時停止の状態を改めて確認し、すべての条件がそろってから地の文へ進みます。
ボイスが先に終わり、文字がまだ一字ずつ表示されているなら、全文表示を待ってから読むための待ち時間を満たします。音声終了が解除するのは音声の制約だけで、文字を十分な時間表示した証明にはなりません。ボイスから間を削る必要がある場合も、従来のテンポがそのまま成立すると考えず、完了する順序を検討し直します。
二文目は、ボイスなしの地の文です。「彼は手袋を長椅子に置いた。温室には、葉のこすれるかすかな音だけが残った。」この文は事前にボイスなしとして登録し、完了を待つ必要のある演出もありません。全文表示後に読むための待ち時間を加算し、所定の時間を満たせば自動送りが可能になります。架空の音声終了イベントを発生させる必要はなく、音声がないからといって即座に飛ばしてもいけません。
三文目もボイスなしです。「カーテンが左右に開き、最初の一筋の光が育苗トレーに差し込んだ。」この文に入った時点でカーテンを動かし、「カーテンが全開になること」を進行を止める条件として登録します。読むための待ち時間を満たしてもカーテンが動いていれば、この文にとどまります。先にカーテンが全開になった場合は、文字の待ち時間を満たすまで待ちます。両方を満たして初めて、庭師の次の説明へ進めます。
この三文で、音声待ち、ボイスなしの待ち、演出待ちをそれぞれ扱っています。引き渡し時には、各文の開始状態、各条件が完了した順序、最後に解除された制約、実際に次へ進んだかを記録します。秒数を作り上げなくても、ロジックに矛盾がないか確認できます。
4. 読者が操作を引き継いだ後は、明示的な再開を必要とする
この例では、読者が本文をクリックする、バックログを開く、メニューに入る、または自分でオートモードをオフにすると、まず自動送りを一時停止します。文字がすべて表示される前に本文をクリックした場合、その入力では現在の文を全文表示するだけにします。すでに全文表示されていれば、一時停止だけを行います。その後の手動送りは別の手動操作ルールに従い、同じ一回の入力で次の文まで送らないようにします。
一時停止中は、読むための待ち時間の加算を止めます。音声や演出の再生を続けるかどうかは、別途決める必要があります。この例では、通常の本文クリックによる操作の引き継ぎでは再生を続け、メニューを開いた場合は一時停止可能な再生を止めます。どの再生方針を採る場合でも、一時停止中に届いた完了通知は状態の更新にのみ使い、次へ送るきっかけにはしません。
バックログやメニューを閉じても、自動では再開しません。読者が明示的にオートの続行を選んだら、現在の文は全文表示を保ち、読むための待ち時間をゼロから数え直します。すでに自然に終了した音声や、完了したカーテンの動きは繰り返さず、未完了の項目は引き続き待ちます。再開時に少し長くとどまる可能性はありますが、本文に戻った途端に次へ飛ばされずに済みます。
読者がすでに手動で次の文へ進んでいたら、前の文の待機記録は無効になります。前の文の音声終了通知が遅れて届いても、新しい文の制約を解除してはいけません。そのため、完了通知には対象の文を識別する情報も記録します。
5. 異常時の対処手段と適用範囲を明記する
ボイスの読み込み失敗、再生の中断、手動停止は、いずれも自然な再生終了ではありません。この例ではオートを一時停止し、再試行するか、現在の文を明示的にボイスなしの読み進め方へ切り替えられるようにします。ボイスなしを選んだ後は、読むための待ち時間を改めて満たします。見えないタイムアウトで、あらゆる異常をひそかに成功扱いしてはいけません。
カーテンが全開状態に達していなければ、進行を止める条件も維持します。スキップを認める設計なら、「スキップ後は直ちに全開状態を表示する」という独立したルールを定めます。アニメーションを止めただけでカーテンが半開きのままなら、演出完了とはみなせません。
引き渡し前に三文の例を使い、音声が先に終わる、文字の待ち時間を先に満たす、カーテンが先に開ききる、一時停止中に終了通知が届く、前の文の通知が遅れて届く、といった順序を確認します。どの場合も「止まった」「送りが速すぎる」とだけ記録するのではなく、まだ満たされていない具体的な条件を指摘できるようにします。
このルールは、一文ずつ進む直線的な読書パートを対象とします。選択肢、継続的な操作が必要な場面、明確な終点のない演出に入ったら、この自動送りの流れから外し、それぞれのインタラクションのルールに委ねます。待機表が示せるのは、いつ進行を許可できるかまでです。すべての読者が理解したことを証明するものではありません。






