ビジュアルノベルの演出を早送りしても、人物と背景を正しい最終状態にするには
省略できる移動やフェードアウトの過程と、必ず成立させる人物の退場、背景の切り替え、不透明度の状態を分けて記録します。演出の最終状態表を使い、通常再生と途中からの早送りが同じ舞台の状態に到達するかを、一項目ずつ机上で確認します。

はじめに
早送り後も立ち絵が画面に残るなら、まず「人物の退場」がアニメーション終了に付随する処理になっていないかを確認します。確実にレビューするには、省略できる変化の過程と、必ず実現すべき画面の状態を分けます。移動やフェードアウトを再生しなくても、人物の削除、背景の切り替え、不透明度の復元、進行再開位置の条件は、それぞれ満たす必要があります。最終位置は演出区間の最終状態として定義し、たまたま最後に実行された移動に左右されないようにします。
まず演出区間を区切り、到達すべき画面を一つに定める
以下の「待合室での別れ」は架空の教材例です。人物、演出、障害の状況はいずれも説明のために設定したものであり、実際のユーザー事例、実測結果、筆者が行ったテストの記録、DramaFork の製品機能ではありません。また、特定のエンジンを想定したものでもありません。
開始位置は、車掌が「今夜の列車は、もう全部出てしまいました」と言い終えた直後です。車掌は待合室の中央におり、人物はフェードによる透過のない状態で、夕方の背景も完全に表示されています。通常の演出では、車掌が扉のそばまで移動し、さらに外へ歩きながらフェードアウトします。室内の照明が徐々に暗くなり、夕方の背景が夜の背景へ切り替わります。終了位置は、「待合室には、時計の音だけが残った」という地の文の直前です。
まず、その終了位置の画面を決めます。車掌は舞台の表示リストから削除され、夜の背景は完全に表示され、夕方の背景と一時的な暗転レイヤーは削除済みとします。夜の暗さは背景画像そのもので表し、残った暗転レイヤーを重ねて表現することはしません。ここでは確認しやすい構成を選んでいます。独立した照明レイヤーが必要な作品では、「すべて消す」をそのまま採用せず、そのレイヤーの目標状態も最終状態に記載してください。
最終状態表で過程と結果を分けて記録する
表の位置には場面内の目印を使い、特定の座標系には依存しません。「完全に表示」とは、フェードインやフェードアウトによる余分な透過がないことを指します。「削除」とは、この区間の舞台表示に参加しなくなることであり、単に画面外へ移動させるだけでは代用できません。
| 対象 | 開始状態 | 省略できる過程 | 必須の最終状態 | 残留物・処理の整理 | 進行再開位置 |
|---|---|---|---|---|---|
| 車掌 | 中央、完全に表示 | 中央から扉のそばへ、扉のそばから外へ、フェードアウト | 今回の登場を終え、舞台から削除 | この区間の移動とフェードアウトを中止し、この区間の人物コピーを削除 | ほかの行も成立した後、終了位置の地の文へ |
| 夕方の背景 | 完全に表示 | 徐々にフェードアウト | 表示されていない | 旧背景を削除し、そのトランジションを終了 | 同上 |
| 夜の背景 | まだ表示されていない | 徐々にフェードイン | 正しい夜景が完全に表示されている | この区間の不透明度変更処理を解除 | 同上 |
| 一時的な暗転レイヤー | まだ作成されていない | 照明が暗くなる変化 | 残っていない | レイヤーを削除し、以後の暗くする処理を中止 | 同上 |
| 演出の進行 | 別れの台詞が終了 | 過程の待機 | この区間が完了し、続行できる | この区間で保留された完了通知を取り消す | 「待合室には、時計の音だけが残った」の直前 |
この表を複製して使う際は、一行につき、独立して確認できる対象または進行条件を一つだけ記載します。最終状態を「退場アニメーションを最後まで実行する」と書いてはいけません。それでは、省略される過程に依存したままです。「車掌が表示されていない」と書き、どのような削除の取り決めを採用するかも示します。
複数の移動を飛ばす場合も、まず最後に人物が残るかを考えます。この例では最終的に退場するため、扉のそばや屋外は経由地点にすぎず、一つずつ補って再生する必要はありません。車掌が扉のそばに留まる演出へ変更するなら、最終状態に「扉のそば、完全に表示、指定の向き」と明記し、退場の行を流用しないようにします。
通常再生と早送りを、同じ終了状態まで机上で追う
最初に、通常再生の順序を机上で追います。車掌は中央から扉のそばへ歩き、そのまま外へ移動しながらフェードアウトした後、削除されます。背景の切り替えが終わったら夜景を残し、夕方の画像と一時的な暗転レイヤーを削除します。すべての行が成立してから、終了位置の地の文へ進みます。これは想定する順序の記録であり、実行時に観察した結果ではありません。
次に、開始直後に早送りする場合を考えます。移動経路、不透明度の変化、待機を省略し、まずこの区間の未完了の動作が舞台を変更できないようにします。そのうえで、表に従って人物の削除、夜景の表示、旧レイヤーの整理を行い、最後に進行を再開できるようにします。早送りの完了は「次の一文へ飛んだ」だけでは不十分で、それまでの各行がすべて成立している必要があります。
三回目は、途中に早送りの開始点を置きます。車掌は扉のそばに到着して半透明になっており、夜景はまだ一部しか見えていない状態です。それでも同じ最終状態表を使い、現在の不透明度を新たな目標にはしません。車掌が削除され、夜景が完全に表示され、夕方の画像と暗転レイヤーがなくなって初めて、続行を許可します。
この構成では、早送り時に安定した画面へ直接切り替わり、滑らかな移行が減る場合があります。短いトランジションを残したいなら、再生可能な過程として別途記載しても構いません。ただし、最終的な画面が、そのトランジションを最後まで再生できることに依存してはいけません。早送りを繰り返し要求しても、夜景のレイヤーが増えたり、地の文が二回進んだりしないようにします。
残った要素がどの区間に属するかを確認し、再開後の最初の動作も調べる
人物が見えないだけでは、退場完了とは判断できません。主となる立ち絵、この区間で生じた残像やコピー、それらが未完了の動作にまだ制御されていないかを、別々に確認します。主立ち絵の不透明度だけをゼロにしても、コピーが残る可能性があります。画面外へ動かしただけでも、表で定めた舞台からの削除は完了していません。
背景については、使用されている画像、不透明度、重なりによる遮蔽を併せて確認します。画面が黒く見えても、いきなり全レイヤーを明るくしてはいけません。まず現在の画像が本当に夜景かを確認し、夜景がまだ半透明になっていないか、旧背景や一時的な暗転レイヤーがその上に重なっていないかを調べます。そうしないと、正しく表現されていた夜の暗さまで損なうおそれがあります。
未完了の動作については、遅れて届く結果が最終状態を上書きできないかを確認します。たとえば、早送りで夜景を完全に表示した後、古いフェードイン処理が途中の不透明度を書き込むと、一度は最終状態を適用していても崩れてしまいます。実装では、この区間ですでに無効となった動作が、完成した画面を再び変更できないようにする必要があります。具体的な仕組みはプロジェクト側で決めます。
続いて、地の文の後に行われる最初の舞台動作を確認します。後の場面で車掌を再登場させるなら、位置、不透明度、向きを新たに明示し、今回の退場中の半透明な値を引き継がないようにします。整理の対象はこの区間に属するオブジェクトに限定し、表示し続ける必要のあるほかの人物や常設のインターフェースまで削除してはいけません。
引き継げる判定記録と、適用範囲を残す
この例では、机上の記録を三つ残せます。「開始直後に早送り→人物のいない床と完全に表示された夜景→実行時の検証待ち」「扉のそばで半透明のときに早送り→同じ最終状態→実行時の検証待ち」「背景が重なっているときに早送り→完全に表示された夜景だけが残る→実行時の検証待ち」です。それぞれに演出区間の識別子、原稿のバージョン、進行再開位置を添えれば、後の観察結果を予定していた状態と比較できます。
失敗した場合は、具体的な差分を記録します。たとえば「地の文は表示されたが、夜景の下に夕方の背景が残っている」と書くほうが、「早送りに問題がある」よりも引き継ぎやすくなります。修正後も、早送り終了時の一コマだけを切り取るのではなく、進行を再開した後に古い動作からの書き戻しが起きないかを観察します。
この表が使えるのは、結果がすでに決まっていて、過程を省略してよい演出区間です。扉のそばでプレイヤーに残るか去るかを選んでもらうなら、その選択の前で現在の区間を終え、以後のルートごとに最終状態を記入します。選択を飛び越えて、強制的に退場状態を適用してはいけません。机上の比較で確かめられるのは、取り決めの内部に矛盾がないかだけです。実際に取り決めが守られるかは、記載した各検証開始点からプロジェクト内で検証する必要があります。






