第三章 UINo.020
文字送り
Typewriter Effect別名 テキスト送り、メッセージ送り、タイプライター演出、文字表示速度
概要
会話の台詞を一文字ずつ出していく表示と、出し終えた台詞を次へ進める操作。一文字ずつ出すと話している感じや間が出るが、出す速さが読む速さより遅いと読み手は文字が出るのを待たされる。出している途中で押したら残りを一度に出し、自動で送るときは待ち時間を台詞の文字数に合わせる。
使われる場面
- 会話で物語を進めるゲーム
- 人物の台詞を一文字ずつ出して話している感じを出す。読むことが遊びの中心になるので、文字を出す速さと自動で送る速さを設定で選べるようにする。
- 驚きや言いよどみの台詞
- 「……」を含む台詞や言葉に詰まる台詞だけ、出す速さを落とすか句読点の後で少し止めて、間を見せる。
- 遊びの途中に出る短い台詞
- 戦いや移動の最中に出る仲間の一言は押さなくても自動で送る。送るボタンが攻撃やジャンプと同じだと、遊びの操作で台詞を送ってしまう。
- 操作の説明やシステムの知らせ
- 読んで操作を覚えるための文章は話している感じより読みやすさを優先し、速く出すか一度に出す。
- 同じ会話をもう一度見る場面
- やられてやり直した場面の前の会話や 2 周目の会話では、読んだことのある台詞を早送りで飛ばせるようにする。
判断基準
| こういうとき | こうする |
|---|---|
| 会話の文字が出るのが遅くて、読み終えてから待たされる | 文字を出す速さを、速く読む人の読む速さより速くする。1 秒に 20〜40 文字から試す。演出として遅く出したい台詞はその台詞だけ遅くする。 |
| 文字を出している途中で押しても何も起きない | 1 回目の押下で残りの文字を一度に出し、2 回目の押下で次の台詞へ送る。 |
| 残りを出すつもりで押したら、次の台詞に進んでしまった | 台詞を出し終えてから 0.2〜0.3 秒ほどは押しても送らない。次へ送れることを示す印も、送れるようになってから出す。 |
| 会話が始まった瞬間に最初の台詞が送られてしまう | 会話の窓が開く前から押し続けていたボタンでは送らず、窓が開いてから 0.2〜0.3 秒ほどの押下も捨てる。 |
| 自動で送ると、長い台詞は読み終わる前に進み、短い台詞では待たされる | 待ち時間を台詞の文字数に合わせる。台詞を出し始めてから、文字数を想定する読む速さで割った時間に 0.5 秒ほどの余裕を足した時刻に送る。 |
| 自動で送る速さが速すぎると言う人も遅すぎると言う人もいる | 自動で送る速さを設定で選べるようにし、自動で送っているあいだも押せば次へ送れるようにする。 |
| やり直すたびに同じ会話を最後まで読むことになる | 読んだことのある台詞を記録しておき、送るボタンとは別のボタンで既読の台詞だけを早送りできるようにする。 |
| 読み飛ばした台詞をもう一度読む方法がない | 送った台詞を読み返せる履歴を置く。 |
遊んでこう感じたら
指示の例
会話の文字が出るのが遅くて、読み終わってから待たされる。文字送りを速くして、1 秒に 30 文字くらいで出して
文字が出ている途中でボタンを押しても何も起きない。文字送りの途中で押したら残りの文字を一度に出し、もう一度押したら次の台詞へ進むようにして
オートで読んでいると、長い台詞を読み終わる前に次へ進んでしまう。文字送りの自動の待ち時間を文字数に合わせて、台詞を出し始めてから「文字数 ÷ 10」秒に 0.5 秒を足した時間で送るようにして
残りの文字を出そうとして押したら、次の台詞に飛んでしまった。文字送りで、台詞を出し終えてから 0.3 秒は押しても次へ送らないようにして
やり直すたびに同じ会話を最後まで読まされる。文字送りに既読の早送りを付けて、読んだことのある台詞はボタンを押しているあいだ次々に送れるようにして
詳細
一文字ずつ出す理由
会話の台詞を画面に出すとき、台詞をまるごと一度に出すこともできる。これを一文字ずつ出していくと、人物が話す速さで言葉が出てくるように見える。「……」や句読点の後で少し止めれば、言いよどみや間も表せる。台詞を一文字ずつ出していく表示と、出し終えた台詞を次へ進める操作をあわせて文字送りと呼ぶ1。
文字を出すのに合わせて短い音を鳴らすと、話している感じが強まる。一文字ごとに鳴らすと速く出すときに音が詰まって聞こえるので、数文字おきに鳴らす。話し手ごとに音の高さを変えれば、誰が話しているかも音でわかる。
出す速さと読む速さ
読み手はまだ出ていない文字を読めない。文字を出す速さが読み手の読む速さより遅いと、読み手は出ている文字を読み終えるたびに次の文字を待つことになる。デモの読み手は既定で 1 秒に 10 文字読む。上の段は 1 秒に 6 文字で出すので、読み手は出ている文字にすぐ追いつく。会話を終えるまでの 20.4 秒のうち 7.2 秒を、文字が出るのを待って過ごす。下の段の既定の 1 秒に 30 文字なら、待たされる時間は 0 秒で、会話は 13.2 秒で終わる。
文字を出す速さが読む速さを上回っていれば、それ以上速くしても読み終える時刻は変わらない。デモの「読み手が 1 秒に読む文字数」を最も多い 20 文字にしても、下の段で 1 秒に 20 文字以上出せば、待たされる時間は 0 秒になる。反対に、読み手が 1 秒に読む文字数を 4 文字にすると、どちらの段も読み手より速く出す。上の段も下の段も 30.3 秒かかり、差がなくなる。遅い文字送りで待たされるのは、速く読む人である。
そこで、既定の速さは速く読む人が待たされない速さにする。1 秒に 20〜40 文字から試し、演出として遅く出したい台詞だけを遅くする。
押したら残りを一度に出す
文字を出している途中で押したら、残りの文字を一度に出す。出し終えた後にもう一度押すと、次の台詞へ送る。1 回目で残りを出し、2 回目で送る二段の押し方になる。速く読む人は押して待ち時間を飛ばし、押さない人には一文字ずつ出す演出がそのまま残る。
デモの読み手は文字が出るのを 0.3 秒待たされると、一度だけ押して残りを出そうとする。上の段では、この押下は何も起こさず、6 つの台詞のうち 5 つで「押しても何も起きない」が出る。最後の「え?」は 2 文字しかなく、待たされる前に出し終わる。下の段で 1 秒に出す文字数を上の段と同じ 6 文字にしても、押したら残りを一度に出す作りなら、待たされるのは台詞ごとに押すまでの 0.3 秒ほどである。会話は 14.8 秒で終わる。
押しても何も起きない作りは、プレイヤーにはボタンが効いていないように見える。演出のために途中で飛ばされたくない台詞があっても、飛ばせなくするのはその台詞だけにする。
押しすぎによる読み飛ばし
二段の押し方では押しすぎると、読んでいない台詞を送ってしまうことがある。押そうと決めてから指が動くまでのあいだにも、文字は出続けている。残りを出すつもりで押した瞬間にちょうど台詞を出し終えていると、その押下は次へ送る押下として扱われる。戦いの最中に会話が始まったときも、送るボタンが攻撃と同じだと、攻撃のつもりで続けて押したボタンが最初の台詞を送ってしまう。
そこで、次の作りにする。
- 出し終えた直後の押下を捨てる:台詞を出し終えてから 0.2〜0.3 秒ほどは押しても送らない。長くしすぎると、読み終えて押したのに送れない感じが残る。次へ送れることを示す印(デモの ▼)は送れるようになってから出す。
- 会話の窓が開いた直後の押下を捨てる:窓が開く前から押し続けていたボタンでは送らず、窓が開いてから 0.2〜0.3 秒ほどの押下も捨てる。前の場面で押したボタンを会話に持ち越さないのは、「先行入力」を使わない作りにあたる。
- 読み返せる履歴を置く:送った台詞を後から読み返せれば、読み飛ばしても戻って読める。
会話の中に選択肢があるときは、選択肢が出た直後の押下も受け付けない。送るつもりの押下で取り消せない選択を決めてしまわないためで、「確認と取り消し」と同じ考え方になる。
自動で送るときの待ち時間
押さなくても、台詞を出し終えてからしばらくたったら次へ送る作りもある。手を離したまま読めるので、物語を読ませるゲームや遊びの途中に出る台詞に使う。読み手が読み終えるまでの時間より待ち時間が短いと、読み終える前に次へ進む。長いと、読み終えてから待たされる。
待ち時間を台詞によらず一定にすると、長い台詞では足りず、短い台詞では余る。デモの「自動(一定の時間)」は出し終えてから 1.5 秒で送る。既定の読み手では 26 文字と 32 文字の 3 つの台詞が読み終える前に進み、2 文字の「え?」では読み終えてから 1 秒以上待たされる。
そこで、待ち時間を台詞の文字数に合わせる。台詞を出し始めてから、文字数を想定する読む速さで割った時間がたち、さらに少しの余裕を置いてから送る。デモの「自動(文字数に合わせる)」は 1 秒に 10 文字読む人が読み終えてから 0.5 秒で送る。既定の読み手では読み終える前に進む台詞はなく、待たされるのは台詞ごとに 0.5 秒ほどになる。
ただし、想定より遅く読む人にはこれでも速すぎる。読み手が 1 秒に読む文字数を 8 文字にすると、26 文字と 32 文字の 3 つの台詞がまた読み終える前に進む。想定より速く読む人には反対に遅すぎる。そこで、自動で送る速さも設定で選べるようにし、自動で送っているあいだも押せば次へ送れるようにする。
既読の早送り
同じ会話を何度も見るゲームでは、読んだことのある台詞を早送りで飛ばせるようにする。やられてやり直した場面の前の会話や 2 周目の会話がこれにあたる。台詞ごとに読んだかどうかを記録しておき、早送りのボタンを押しているあいだは既読の台詞を出し終えた状態で次々に送る。まだ読んでいない台詞に来たら止める。
早送りには送るボタンとは別のボタンを使う。送るボタンの連打で飛ばす作りでは、読んでいない台詞まで飛ばしてしまう。
速さを設定で選べるようにする
読む速さは人によって違うので、文字を出す速さと自動で送る速さは設定で選べるようにする。文字を出す速さは「遅い」「ふつう」「速い」の数段階に「一度に全部出す」を加える。設定の画面には見本の台詞を出し、選んだ速さをその場で確かめられるようにする。
作り方
1 ステップごとに出す文字数と押下を処理する。押下は出している途中なら残りを一度に出し、出し終えていれば次の台詞へ送る。自動で送るときは、台詞を出し始めてからの時間で送る時刻を決める。
// t は台詞を出し始めてからのステップ数(毎秒 60 回)。len は台詞の文字数
if (!full) shown = Math.min(len, 1 + Math.floor((t * charsPerSecond) / 60));
if (shown >= len && doneAt === null) doneAt = t;
if (pressed) {
if (shown < len) {
// 1 回目の押下で、残りを一度に出す
full = true;
shown = len;
doneAt = t;
} else if (t - doneAt >= guardSteps) {
// 2 回目の押下で次の台詞へ。出し終えた直後の押下は捨てる
nextLine();
}
}
// 自動で送るとき。文字数 ÷ 想定する読む速さ に余裕を足した時刻で送り、出し終えた直後には送らない
if (autoMode && doneAt !== null) {
const sendAt = Math.max(doneAt + marginSteps, Math.ceil((len / readingSpeed + margin) * 60));
if (t >= sendAt) nextLine();
}
32 文字の台詞を 1 秒に 10 文字読む人に合わせ、余裕を 0.5 秒にするなら、送る時刻は出し始めてから 3.2 秒と 0.5 秒を足した 3.7 秒になる。
脚注
-
英語ではタイプライターで一文字ずつ打っていく様子にたとえて typewriter effect と呼ぶ。文字を出す速さの設定は text speed と呼ぶ。 ↩