マガジン

演出をスキップできるべきか:二度目に見る人の時間

遊びをつくる

執筆にClaudeを使用しています。

異なる大きさの円を同じ進度で巡る玉で、時間に基づくゲームの動きを表したイラスト。
記事のテーマをもとに制作したAI生成イラスト。

ステージをクリアすると、紙吹雪が舞い、効果音が鳴り、スコアが数字で積み上がる4秒の演出が入るゲームを考えてみます。初めてクリアする人にとって、この4秒はごほうびです。ところが同じステージに10回目の挑戦をする人にとっては、次の挑戦を始めるまでに毎回待たされる4秒です。演出の中身は同じでも、見る人にとっての値打ちは回数によって大きく変わります。 題名の問いに先に答えると、スキップは「あったほうがよい」場面が多い一方で、何でも飛ばせればよいわけではありません。演出には、飛ばしても困らないものと、飛ばすと遊びの判断材料を失うものが混ざっています。この記事では演出を性質で分け、アソバースの公式作品の設計から読み取れることを確認し、自分の作品で二度目の人の時間を見積もる手順まで進めます。

この記事の目次
  1. 演出の価値は、回数で変わる
  2. 演出を三つに分けて考える
  3. 公式作品の設計から読み取れること
  4. 「二度目」をどう判定するか:アップロード作品の保存事情
  5. 自分の作品で確かめる手順
  6. 次の行動

演出の価値は、回数で変わる

演出の役割は、初回と二度目以降で入れ替わります。初回は「何が起きたかを理解させる」「達成感を渡す」役割が中心です。二度目以降は、すでに意味を知っている人にとって、演出は理解の助けではなく待ち時間として働き始めます。

ここで見落としやすいのは、再プレイする人の多くが、その作品をいちばん気に入っている人だという点です。何度も遊ぶ人ほど、演出の待ち時間を何度も払うことになります。初回の印象を良くするために作り込んだ演出が、いちばん熱心な人にいちばん多くの負担をかける構図になりがちです。

一方で、「毎回同じだから飛ばしてよい」とも言い切れません。同じ演出でも、毎回に近い頻度で見ても飽きないものがあります。短くて操作を止めないもの、見るたびに結果が変わるものがそうです。問うべきは演出の有無ではなく、次の三点です。

  • 二度目以降も、その演出から新しい情報が得られるか。
  • 演出の間、プレイヤーは操作できるか。
  • 演出の長さは、遊びの1回の長さに対して何割を占めるか。

演出を三つに分けて考える

演出をひとまとめにせず、性質で三つに分けると、スキップの扱いを決めやすくなります。

  • 情報を運ぶ演出、例:お手本の再生、返る石の表示、軌道の予測線、二度目の価値:下がらない。むしろ判断に必要、扱いの目安:飛ばさず、速さや表示の有無を選べるようにする
  • 気分をつくる演出、例:クリア時の紙吹雪、タイトルの見せ場、二度目の価値:下がりやすい、扱いの目安:短縮またはスキップを許す
  • 待ち時間を埋める演出、例:相手の手番の「考え中」表示、読み込み風の間、二度目の価値:低い、扱いの目安:長さに上限を置く

分類で迷うのは、一つの演出が二つの役割を兼ねている場合です。たとえば結果画面でスコアが数字として積み上がる演出は、気分づくりであると同時に、結果の内訳を読ませる情報でもあります。この場合は、演出を飛ばしても内訳が静止画として残るようにすると、どちらの役割も守れます。

逆に、情報を運ぶ演出を一律に飛ばせるようにすると問題が起きます。記憶ゲームのお手本を飛ばせるようにしたら、ただの失敗への近道になります。「飛ばせる」ことと「必要なときに見直せる」ことは、別々に設計します。

公式作品の設計から読み取れること

アソバースの公式作品で確認されている仕様のうち、演出の長さや二度目の遊びに関わるものを取り上げます。いずれも「設計から読み取れること」であり、開発側の意図を断定するものではありません。

灯りのチェス:相手の待ち時間に上限がある。 CPUの思考時間は約450msに制限されています。相手の手番は、人間側から見れば何も操作できない時間です。その長さに上限が置かれている点は、待ち時間を埋める演出は短く抑える、という分類と整合します。

雨音のピアノ:お手本の速さを選べる。 3音から8音へ育つフレーズの記憶ゲームでは、お手本の速さを選べます。お手本は情報を運ぶ演出なので、飛ばすのではなく速さを調整できる形になっていると読み取れます。慣れた人は速くし、不慣れな人は遅くできるため、二度目以降の時間を本人が決められます。

こだまの森:見直しに代価がある。 光る葉の順番を覚えて返すこのゲームには、聴き直し(15点減)があります。お手本をもう一度見られる一方で、そのたびに点が減ります。情報を運ぶ演出を「何度でも無料」にも「一度きり」にもせず、見直しを選択として残している設計です。6・8・10ラウンドの3コースがあり、音なしでも遊べる点も、演出の受け取り方を利用者に委ねる形といえます。

かたちのあいだ:同じ配置への再挑戦。 スライドパズルには、同じ配置の再挑戦、一手戻す(手数は減らない)、時計の一時停止があります。やり直しに入るまでの手数が少ないほど、二度目の人の時間は短くなります。

小さな軌道:前回の記録が次の判断材料になる。 全軌道予測(点線)に加えて、前回の軌道が細い実線で残ります。予測を消して挑むこともできます。前回の軌道が見えることは、二度目の挑戦そのものを演出の一部として扱っているとも読めます。一時停止から同じ位置で再開できる点も、中断後の復帰に余計な時間をかけさせない仕組みです。

時計じかけの台所:同じ料理に二つの時間設定。 時間制限なしの見習いと、1皿28秒・配膳6秒・ミス3回までの本番があります。同じレシピでも、初回は見習いでゆっくり、慣れたら本番で速く、と使い分けられます。時間の使い方が段階で変わる設計です。

共通の「動きを抑える」設定。 13作品すべてが対応しています。演出量を利用者側から下げられる経路が、作品共通で用意されているということです。

ここで書いたのは、確認済みの仕様だけです。各作品の開始演出や結果演出に飛ばす操作があるか、結果画面がどの長さで表示されるかは確認済み事項に含まれていません。この部分は作品を開いて確かめます。

「二度目」をどう判定するか:アップロード作品の保存事情

スキップや短縮を実装するとき、最初に決めるのは「この人は二度目なのか」をどう判定するかです。ここにはアソバース固有の事情があります。

アップロードした作品の中の localStorage と sessionStorage は、一時メモリーとして動く互換処理です。つまり、「演出を見た」というフラグを localStorage に書いても、画面を閉じれば残りません。公式13作品でも、保存があるのは余白の庭・WAVE / WAVE・かたちのあいだの3作品だけで、他の10作品の記録は画面を開いている間だけです。

このため、判定方法は次の三つから選ぶことになります。

  1. 画面を開いている間だけ数える。 変数にカウンタを持ちます。開き直すと初回扱いに戻りますが、同じ画面で何度も遊ぶ人には効きます。実装が最も単純です。
  2. クラウドセーブに「見た」を残す。 アップロード作品にはSDKが自動で追加され、ログイン中なら作品ごとにJSONで128KiBまで保存できます。演出を見たかどうかのフラグ程度なら、容量はほとんど問題になりません。ただしログインしている人にしか効きません。ゲストの進行は端末内に保存され、ログイン後のアカウントへ自動では混ざらない点にも注意が必要です。
  3. 判定せず、常に飛ばせるようにする。 初回か二度目かを推測せず、いつでもキー一つで飛ばせるようにします。判定の誤りが起きません。

どれが正解かは作品しだいです。ただ、画面を開くたびに初回扱いになることを前提に、「最初の1回だけは見せる、以降は飛ばせる」という3番に近い設計にしておくと、保存の有無に左右されにくくなります。

自分の作品で確かめる手順

作品の演出が二度目の人にとって長すぎるかどうかは、数字にすると判断しやすくなります。結果は作品ごとに異なるので、ここでは測り方と読み方だけを示します。

1. 待ち時間を測る

ストップウォッチ(スマートフォンの標準機能で十分です)を用意し、次の区間を同じ条件で3回ずつ測ります。単位は秒です。

  • 操作が終わってから、次の操作ができるようになるまで(演出の間は操作不能な時間)
  • 1回のプレイの全体の長さ

3回の平均を出し、「操作不能な時間 ÷ 1回の長さ」を計算します。

2. 結果の読み方

  • 割合が小さく、数秒で済むなら、スキップがなくても大きな問題にはなりません。
  • 割合が大きいなら、演出の短縮またはスキップを検討します。特に1回のプレイが短い作品(短時間で繰り返す作品)ほど、同じ秒数でも負担が重くなります。
  • 演出中に操作できるなら、同じ秒数でも負担は軽くなります。

3. 最小の実装例

次のコードは、演出を2回目以降に短縮し、Enter・Space・クリックでいつでも飛ばせる最小構成です。3000と800は例示の値なので、1の測定に合わせて変えてください。

html
<!doctype html>
<meta charset="utf-8">
<style>
#fx{position:fixed;inset:0;background:#123;color:#fff;
 display:grid;place-items:center;font-size:2rem}
#fx[hidden]{display:none}
</style>
<button id="go">クリア演出を見る</button>
<div id="fx" hidden>クリア!</div>
<p id="log"></p>
<script>
let seen = 0, timer = null, startedAt = 0;
const fx = document.getElementById("fx");
const log = document.getElementById("log");
function finish(how) {
  if (!timer) return;
  clearTimeout(timer); timer = null;
  fx.hidden = true;
  const ms = (performance.now() - startedAt).toFixed(0);
  log.textContent = seen + "回目: " + how + " / " + ms + "ms";
}
document.getElementById("go").onclick = (e) => {
  e.target.blur();
  seen++;
  fx.hidden = false;
  startedAt = performance.now();
  const full = seen === 1 ? 3000 : 800;
  timer = setTimeout(() => finish("自動終了"), full);
};
addEventListener("keydown", (e) => {
  if (e.key === "Enter" || e.key === " ") finish("スキップ");
});
fx.onclick = () => finish("スキップ");
</script>

このコードの「見た回数」は変数 seen に入っているので、ページを開き直すと0に戻ります。前の章の1番にあたる方式です。ボタンの blur は、Enter でスキップした直後にボタンが反応して演出が再開するのを防ぐためのものです。

4. 起こりやすい誤り

  • 飛ばせる演出が、情報も一緒に隠してしまう。スキップ後も、結果の内訳などが画面に残るか確認してください。
  • キーボードだけで飛ばせない。クリックだけの実装だと、キー操作が前提の作品では不便になります。
  • 「動きを抑える」設定の人に対して、演出を飛ばせる以前に動きが多すぎる。この設定のときは短縮版や静止表示にするのが自然です。
  • 短縮版の演出を作ったのに、初回の見せ場まで削ってしまう。初回の長さは変えず、二度目以降だけを調整します。

次の行動

自分の作品を開き、クリアから次の操作まで、またはゲームオーバーから再開までの操作不能な時間をストップウォッチで3回測ってください。その数字と1回のプレイの長さを比べ、割合が気になるなら、まず「情報を運ぶ演出」と「気分をつくる演出」に分け、後者だけに短縮かスキップを足してみてください。公式作品の演出の長さや飛ばせる操作は、実際に開いて二度目、三度目と遊びながら確かめられます。