マガジン

誤操作を数える:押したのに何も起きなかった回数

遊びをつくる

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

一つだけ空いた場所へ、丸い駒を置こうとする初めての一手。
記事のテーマをもとに制作したAI生成の写真風イメージ。

ゲームを初めて触る人が、最初の30秒のうちに画面のどこかを押したのに、何も起きなかったとします。本人は「壊れているのかな」と思うかもしれませんし、「自分の押し方が違った」と考えるかもしれません。どちらの場合も、作者の手元にはその出来事の記録が残りません。クラッシュもエラーも出ていないので、気づく手段がないのです。 そこでこの記事では、「押したのに何も起きなかった回数」を数える実験を設計します。数えるのは入力の失敗ではなく、見た目が約束していることと実際の動作とのずれです。押せそうに見えるのに押せない場所、押せるのに今は効かない状態、効いているのに反応が見えない瞬間は、この回数の内訳として浮かび上がります。結果は書きません。準備、手順、記録の取り方、読み方、起こりやすい誤りを順に示しますので、自作のゲームか公開前の試作で行ってみてください。

この記事の目次
  1. 「無反応」を先に定義する
  2. 準備するもの
  3. 手順:30秒を3回に分けて見る
  4. 記録の取り方:1入力を1行にする
  5. 結果の読み方:集中の「場所」と「時間」を見る
  6. 起こりやすい誤り
  7. 公式作品で練習する
  8. 次の行動

「無反応」を先に定義する

数える前に、何を無反応と呼ぶかを決めておきます。ここが曖昧だと、記録者によって数がぶれて比較できなくなります。

この実験での定義は次のとおりです。

  • 入力(クリック、タップ、キー押下)から400ミリ秒以内に、画面の変化・音・振動のどれも起きなかったものを「無反応」と数えます。
  • 「その操作はできません」という表示や、押せない音のように、拒否の理由が伝わる反応は無反応に数えません。ただし「拒否の反応あり」として別に記録します。
  • ポーズ中やメニューを閉じている間など、作者が意図して入力を止めている状態の入力も、まずは数えます。意図的かどうかは、集計の段階で分けます。

400ミリ秒は目安です。ボタンを押してから変化が見えるまでの待ち時間として、この長さに明確な根拠があるわけではありません。自分のゲームの反応の速さに合わせて、200〜1000ミリ秒の範囲で調整してかまいません。大事なのは、全員の記録で同じ値を使うことです。

準備するもの

用意するものは次のとおりです。

  • 試遊できる状態のゲーム1本。アソバースに投稿する場合は、「入力→表示の確認→公開」の確認段階で動く状態が目安です。
  • 初めて遊ぶ人。作者本人は、押してはいけない場所を無意識に避けるため、無反応を踏みにくくなります。人数は、まず3人程度から始めて、様子を見て増やすのが現実的です。
  • 画面録画。キー入力も記録したい場合は、入力が見える設定にしておきます。
  • 記録シート(表計算でも紙でもかまいません)。
  • 任意で、下記の計測コード。

録画があれば、数え落としを後から直せます。観察者がその場で書き取る方式は、目が追いつかず取りこぼしやすいので、録画を正とします。

計測コード(任意)

自作ゲームに組み込めるなら、入力と「反応」を機械的に突き合わせると、数え落としを減らせます。次のコードは単独で動く最小構成です。ゲーム側では、画面や音が実際に変わる場所で react() を呼びます。ここでは例として、1秒のクールダウンがあるボタンを置いています。

html
<!doctype html>
<meta charset="utf-8">
<button id="go">押す</button>
<p id="stat"></p>
<pre id="log"></pre>
<script>
const WAIT = 400;
const pending = [];
let total = 0, idle = 0;
const t0 = performance.now();

function react() { // 画面や音が実際に変わる場所で呼ぶ
  pending.splice(0).forEach(p => p.done = true);
}
function watch(kind, target) {
  const p = { done: false };
  total++;
  pending.push(p);
  setTimeout(() => {
    if (!p.done) {
      idle++;
      const i = pending.indexOf(p);
      if (i >= 0) pending.splice(i, 1);
      document.getElementById("log").textContent +=
        `${Math.round(performance.now() - t0)}ms ${kind} ${target}\n`;
    }
    document.getElementById("stat").textContent =
      `入力 ${total} / 無反応 ${idle}`;
  }, WAIT);
}
addEventListener("pointerdown", e => watch("pointer", e.target.tagName));
addEventListener("keydown", e => watch("key", e.key));

let cool = false; // 例:クールダウン1秒のボタン
document.getElementById("go").onclick = () => {
  if (cool) return;
  cool = true; setTimeout(() => cool = false, 1000);
  react();
};
</script>

このコードには弱点があります。react() は、保留中のすべての入力を「反応あり」にしてしまいます。素早い連打では、1回の反応が複数の入力をまとめて救ってしまうので、数はやや少なめに出ます。あくまで録画との突き合わせ用の補助として使い、判断の主役は録画に置いてください。

手順:30秒を3回に分けて見る

遊んでもらう時間は、最初の30秒だけです。後半になるほど、遊ぶ人は作品に慣れて、無反応を踏まなくなります。見たいのは慣れる前の状態です。

  1. 遊ぶ人に、遊び方の説明をしないまま、画面を渡します。「自由に触ってください」とだけ伝えます。
  2. 録画を始め、ゲームを最初から起動してもらいます。
  3. 30秒たったら止めてもらい、そこで観察を終えます。続きを遊んでもらうかどうかは自由です。
  4. 録画を見返し、入力のたびに「反応あり」「拒否の反応あり」「無反応」のどれかを記録します。
  5. 無反応の入力ごとに、遊んだ人に録画を見せ、「何が起きると思って押しましたか」を聞いて書き留めます。

観察中は、声をかけない、ヒントを出さない、画面をのぞき込まない、の3点を守ってください。のぞき込まれると、遊ぶ人は「正しく遊ばなければ」と身構え、普段より慎重に動いてしまいます。

5の聞き取りが、この実験でいちばん価値のある部分です。「どこを押したか」は録画で分かりますが、「何を期待したか」は本人にしか言えません。期待とのずれが、そのまま見た目と動作のずれになります。

記録の取り方:1入力を1行にする

記録は、入力1回につき1行の表にします。連打は、押し直しの間隔が1秒以内なら1つの塊として1行にまとめ、「連打」と注記します。

  • 時刻、書くこと:開始からの秒数(小数1位まで)
  • 入力の種類、書くこと:クリック、タップ、キー名
  • 対象、書くこと:押した場所や要素(例:右上の歯車、盤の左下)
  • 判定、書くこと:反応あり/拒否の反応あり/無反応
  • 期待、書くこと:本人が期待した結果(聞き取りの言葉のまま)
  • 分類、書くこと:下の4種類のどれか

無反応は、原因を次の4種類に分けます。

  • A 見た目の約束、内容:押せそうに見えるが、押せない、よくある例:装飾の絵、ボタンに見えるラベル
  • B 状態による無効、内容:押せるが、今は効かない、よくある例:アニメーション中、クールダウン中、ターン外
  • C 反応の遅れ・弱さ、内容:動作はしたが、変化が見えない、よくある例:小さな数値の変化だけ、音のみで画面は静止
  • D 入力が届かない、内容:入力がゲームに渡っていない、よくある例:キーボードが効かない、当たり判定が見た目より小さい

Dはゲームの中身ではなく、動かす環境が原因のことがあります。アソバースの作品は、sandbox付きのiframe(ページの中に別のページを閉じ込めて表示する仕組み)の中で動きます。この中でキーボード入力がいつから届くかは、ブラウザの挙動や作品の作りにも左右されるので、実際の画面で「開いた直後にキーを押す」操作を、記録の対象にして確かめてください。

結果の読み方:集中の「場所」と「時間」を見る

集計は、回数の合計よりも、偏りを見ます。

場所に偏っている場合

同じ要素に複数の無反応が集まっているなら、その要素の見た目か動作のどちらかを直す候補です。分類がAなら、押せそうに見える理由(色、影、枠、カーソル)を弱めるか、本当に押せるようにします。分類がBなら、無効の間はボタンを暗くするなど、無効であることが見た目で分かるようにします。

時間に偏っている場合

開始直後の数秒に集まるなら、まだ操作の手がかりが足りていません。画面が出る前の入力、読み込み中の入力、フォーカスが合う前のキー入力が候補です。終盤に集まるなら、アニメーションや演出で入力がふさがれている時間帯を疑います。

人によって違う場合

「期待」の列が人によってばらばらなら、画面が何も約束していないということです。同じ期待が複数人から出るなら、その期待に沿って動作を変えるか、見た目を変えるかを決められます。

回数がゼロだった場合

ゼロは「問題なし」の根拠として弱いと考えてください。遊んだ人数が少ないか、遊ぶ人が慎重に動いたか、数え落としをしたかの可能性が残ります。録画を別の人にもう一度確認してもらうか、遊ぶ人の属性を変えて再度行うと、ゼロの信頼度を上げられます。

数え方から、合格ラインの回数を決めることはしません。何回以下なら良いという基準は、ゲームの種類で変わるからです。直した後に同じ手順をもう一度行い、前後を比べる使い方が確実です。

起こりやすい誤り

  • 拒否の反応を無反応に混ぜる:「置けません」と伝える反応は、親切な設計です。混ぜると、優れた箇所を直してしまいます。
  • 作者が自分で遊ぶ:何度も遊んだ作者は、無反応の場所を体が覚えています。数えられるのは、初見の人だけです。
  • 聞き取りで誘導する:「ここ、押せると思いましたか?」と聞くと、「はい」と答えやすくなります。「何が起きると思いましたか」と開いた形で聞いてください。
  • 意図的な無反応を直そうとする:ポーズ中に入力が効かないのは当然です。ただし、ポーズ中であることが見た目で分からないなら、それは分類Cの問題として残ります。
  • コードの数字だけを信じる:計測コードは、反応を呼び忘れた箇所も無反応と数えます。コードが出した無反応は、録画で確かめるまで確定させないでください。

公式作品で練習する

自作のゲームで行う前に、アソバースの公式作品で数え方の練習をする方法があります。作品を開いて、「無反応」と「拒否の反応」を見分ける練習です。以下はいずれも、どう反応するかを作品を開いて確かめる項目です。

  • 潮目のオセロでは、石を置けない場所を押したときの様子を観察します。この作品は、返る石のプレビューがあり、置けない手番は自動でパスされる作りです。置けない場所を押したときに何が見えるかは、作品を開いて確かめます。
  • 時計じかけの台所では、針が緑の範囲に来る前に止めたときの変化を見ます。本番にはミス3回までという決まりがあるので、範囲外の操作がどう表示されるかを記録の対象にできます。
  • 月夜の配達では、バッグが2枠という制約があります。持てる数の上限での操作が、画面にどう現れるかを確かめてください。

これらは、設計から読み取れる範囲では「制約のある操作」です。その制約を、遊ぶ人にどう伝えているかを見る材料になります。どの作品も同じ4分類で記録できるので、自作の集計表の形がそのまま試せます。

次の行動

まず自作のゲームの最初の30秒を、初見の人に遊んでもらい、録画を撮ってください。入力を1行ずつ表に起こし、無反応の行に「何を期待したか」を聞き取って書き込みます。集計では、場所と時間のどちらに偏るかを見て、いちばん集中している1か所だけを直し、同じ手順でもう一度確かめてください。