第三章 UINo.017
確認と取り消し
Confirmation and Undo別名 確認ダイアログ、確認画面、取り消し、元に戻す、アンドゥ
概要
物を売る、捨てる、セーブを上書きするといった操作で押し間違いや思い違いによる損を防ぐ二つの作り。確認は実行する前に本当に行うかを尋ねて間違いを止めるが、押す手間が増え、何度も出すと読まずに押されるようになる。取り消しは実行した後で元に戻せるようにして、手間を増やさずに間違いを戻す。そこで、取り消しを付けられず損の大きい操作に絞って確認を出す。
使われる場面
- 店で物を売る画面
- 要らない物を続けて売る場面では、売るたびの確認が手間になる。確認を出さずに売り、売った直後の取り消しと店を出るまでの買い戻しで間違いを戻せるようにする。
- 持ち物を捨てる操作
- 捨てた物をすぐには消さずに一時的な置き場に移し、そこから拾い直せるようにする。持ち物がいっぱいで急いで捨てる場面でも、確認で手を止めずに済む。
- 装備の強化やくじ
- 強化の成否のように結果に運が絡む操作には取り消しを付けない。取り消せると、よい結果が出るまでやり直せてしまうため。実行する前に、何を失うかを書いた確認を出す。
- セーブの上書きとデータの削除
- 上書きや削除をすると、元のデータは戻らない。上書きされるデータの遊んだ時間や場所を見せたうえで確認を出し、既定の選択を「やめる」にする。
- タイトルへ戻る操作
- セーブしていない進み具合が消えるときだけ確認を出す。セーブした直後なら、確認を出さずに戻る。
- 盤面を動かすパズル
- 動かした手を一手ずつ戻せるようにする。行き詰まったと気づくたびに最初からやり直させずに、手前の局面から試し直せる。
判断基準
| こういうとき | こうする |
|---|---|
| 要らない物を続けて売るたびに確認が出て、面倒に感じる | 売る操作から確認を外し、売った直後に「元に戻す」を出す。確認は、取り消しを付けられず損の大きい操作に絞る。 |
| 確認が出ても、読まずに「はい」を押して間違える | 確認を出す回数を減らす。取り消しを付けた操作と、答えがいつも同じになる操作からは確認を外し、残った確認が出たときに読まれるようにする。 |
| 確認の選択肢が「はい」と「いいえ」で、何を選んだのかを取り違える | 選択肢の名前を、行うことそのもの(「売る」「上書きする」)と「やめる」にする。 |
| 決定を連打していて、開いたばかりの確認まで決定で通してしまう | 確認が開いたときの選択を「やめる」にする。確認が開く前から押していたボタンは確認の中では受け付けない。 |
| 「元に戻す」の案内が間違いに気づく前に消える | 取り消せる時間を延ばす。4〜10 秒の幅から試し、それより後は店を出るまで売った物の一覧から買い戻せるようにする。 |
| 続けて売ると、少し前に売った物を取り消せない | 直前の 1 個だけでなく売った物の一覧を残し、どれでも売った値段で買い戻せるようにする。 |
| 強化の失敗やくじの結果を取り消してやり直せてしまう | 結果に運が絡む操作からは取り消しを外し、実行する前に確認を出す。 |
| セーブの削除のように失う物がとくに大きい操作を、押し間違いで実行してしまう | 決定の長押しで実行する作りにし、押し続けているあいだ、たまっていく印を出す。 |
遊んでこう感じたら
指示の例
店で要らない物を売るたびに確認が出て、いちいち面倒。売る操作から確認を外して、売った直後に「元に戻す」の案内を 5 秒くらい出して
確認をよく読まずに「はい」を押して大事な物を売ってしまった。確認は店で買い戻せない物を売るときだけに絞って、選択肢は「売る」と「やめる」、開いたときの選択は「やめる」にして
売った後の「元に戻す」が間違いに気づく前に消えてしまう。取り消せる時間を 10 秒に延ばして、店を出るまでは売った物の一覧から同じ値段で買い戻せるようにして
セーブするときに決定を連打して別のデータに上書きしてしまった。上書きの確認に、上書きされるデータの遊んだ時間と場所を出して、開いたときの選択を「やめる」にして
パズルで行き詰まるたびに最初からやり直すのがつらい。動かした手を一手ずつ戻せる取り消しを付けて
詳細
取り返しのつかない操作
店で物を売る、持ち物を捨てる、セーブを上書きするといった操作は実行すると結果が残る。押し間違いや思い違いで実行すると、失った物を取り戻せないことがある。この損を防ぐ作りは二つある。一つは実行する前に本当に行うかをプレイヤーに尋ねる作りで、これを確認と呼ぶ。もう一つは実行した後で元に戻せるようにする作りで、これを取り消しと呼ぶ。
デモは店で要らない物を 4 個続けて売る場面で、二つの作りを比べる。一覧の先頭の行で決定を押すたびに一番上の物が売れ、下の物が繰り上がってくる。要らない物の次には、店では買い戻せない竜のうろこが並んでいる。
デモのプレイヤーのモデル
デモの自動再生では、次のように振る舞うプレイヤーのモデルが操作している。
- 要らない物を売る勢いのまま一覧で決定を 1 回多く押して、竜のうろこも選んでしまう。
- 同じ確認が 3 回続くまでは、確認を読んでから選ぶ。4 回目からは読まずに「売る」を選ぶ。
- 竜のうろこを売ってから 2 秒後に間違いに気づく。そのとき「元に戻す」の案内が出ていれば、取消を押す。
間違え方と気づくまでの時間は上の段と下の段で同じにしてあり、結果の差は店の作りの差から出る。確認を読まなくなるまでの回数や間違いに気づくまでの時間は、実際には人や場面によって変わる。デモでは差の出る場面を再生するために、この値に決めている。
確認を毎回出したとき
デモの上の段は売るたびに「錆びた剣を売りますか?」のように尋ね、「やめる」と「売る」から選ばせる。確認が開いたときのカーソルは「やめる」にあるので、1 個売るのに決定、下、決定の 3 回押す。要らない物 4 個を売るのに 12 回かかり、確認を出さない下の段の 4 回の 3 倍になる。
確認を何度も出すと、確認そのものが効きにくくなる。同じ確認に同じ答えを返し続けると、プレイヤーは確認を開いてから「売る」を選ぶまでの押し方をひと続きで覚え、文を読む前に押し終えることがあるからである。デモのモデルも 4 回目の確認から読まずに「売る」を選ぶ。5 回目の確認は竜のうろこのもので、「店では買い戻せない」と書いてあるが、モデルはこれも読まずに売ってしまう。上の段は 15 回押したうえで、竜のうろこを失う。
確認を出す操作の選び方
確認の文が間違いを止めるのは、読まれたときだけである。読まれるようにするには、確認を出す操作を絞り、確認が出たこと自体がいつもと違う操作をしている知らせになるようにする。確認を出すのは、次の三つを満たす操作にする。
- 取り消しを付けられない:セーブの上書きのように実行すると元の状態が残らない操作。取り消しを付けられる操作には確認の代わりに取り消しを付ける。
- 失う物が大きい:店で買い戻せない物を売るように、取り戻すのに長く遊び直す必要がある操作。安い物を売るたびには出さない。
- まれにしか行わない:何度も行う操作に確認を出すと、上の段のように読まれなくなる。
操作パネルの「上の段で確認を出す」を「珍しい物だけ」にすると、上の段は要らない物を決定 1 回で売り、竜のうろこを選んだときだけ確認を出す。この確認はその場で初めて出るので、モデルは読んで「やめる」を選ぶ。上の段は 6 回押して、竜のうろこを手元に残す。
ただし、確認を出す物を前もって決めておく作りでは、決めた物のほかは守れない。要らない物のつもりで回復薬を売ってしまっても、この作りでは確認が出ない。自分で操作して上の段で回復薬を選ぶと確かめられる。決めた物のほかの間違いまで戻せるようにするには、後の節の取り消しを組み合わせる。
確認の出し方
確認の選択肢は「はい」「いいえ」ではなく、行うことそのものの名前にする。デモの確認のように「売る」「やめる」と書けば、問いの文を読み飛ばしても、選ぶボタンの名前で何が起きるかがわかる。上書きなら「上書きする」、削除なら「削除する」にする。
確認が開いたときにカーソルを置く選択肢は「やめる」にする。一覧で決定を連打していると、確認が開いた直後の決定は開いたときに選ばれている選択肢を実行する。そこが「売る」なら、連打の 1 回で売れてしまう。「先行入力」を受け付けるゲームでは、確認が開く前に押した決定が開いた確認の中で効かないようにする。
ただし、カーソルを「やめる」に置いても、押し方ごと覚えたプレイヤーは止められない。デモの上の段のモデルは、決定、下、決定の並びを覚えて読まずに売っている。カーソルの位置が防ぐのは、確認に向けたつもりのない入力のほうである。
確認の文には、何を失うかを書く。デモの竜のうろこの確認には「店では買い戻せない」と書いている。この一文は問いの文と見分けがつくよう色を変え、確認の中で目に入りやすくする(「情報の優先度」)。
失う物がとくに大きい操作は、決定の長押しで実行する作りにする。押し続けているあいだ、たまっていく印を出し、たまりきったら実行する。連打や押し間違いの 1 回では実行されないので、セーブの削除のような操作に向く。
取り消せない操作は置き場所でも押し間違いを減らせる。設定の初期化のような操作はよく使う項目のそばに置かず、「詳細」のような入り口の奥の最後に置く(「段階的な開示」)。
取り消しを付けたとき
デモの下の段は確認を出さずに売り、売った直後に「竜のうろこを売った」のような案内と、取消のボタンの印を画面の下に出す。案内が出ているあいだに取消を押すと、売った物が元の行に戻る。要らない物 4 個を売るのに押すのは 4 回で、決定を 1 回押すたびに 1 個売れる。
モデルは下の段でも竜のうろこを選んで売ってしまう。2 秒後に間違いに気づいたとき、案内はまだ出ているので、取消を押して取り戻す。下の段は 6 回押して、竜のうろこを手元に戻す。取り消しは間違いに気づいた後で戻す作りなので、間違えなかった操作には手間がかからない。
取り消せる時間
一定の時間だけ取り消せる作りでは、その時間をプレイヤーが間違いに気づくまでの時間より長くする。デモのモデルは売ってから 2 秒後に気づく。操作パネルの「下の段で取り消せる時間」を 2 秒以下にすると、気づいたときには案内が消えていて、下の段も竜のうろこを失う。取り消せる時間は 4〜10 秒の幅から試す。案内を出しているあいだは画面の一部が埋まるので、それより長く戻せるようにしたいときは、次の節の売った物の一覧を使う。
直前の 1 個だけを取り消せる作りでは、続けて別の物を売ると、前に売った物は取り消せなくなる。デモの下の段も、取消で戻せるのは直前に売った 1 個だけで、次の物を売ると案内が切り替わる。売る勢いのまま次の物を売ってから気づいたときは、取消では戻せない。
取り消しの作り方
取り消しには戻せる範囲の違う作り方がある。
- 一定時間の取り消し:実行した直後に「元に戻す」の案内を出し、一定の時間だけ戻せるようにする。デモの下の段の作りで、戻せるのは直前の 1 回だけになる。
- 売った物の一覧からの買い戻し:売った物の一覧を残し、店を出るまで売った値段で買い戻せるようにする。何個前に売った物でも戻せる。
- ごみ箱:捨てた物をすぐに消さずに一時的な置き場に移し、置き場から拾い直せるようにする。置き場があふれたら、古い物から消す。
- 一手戻す:盤面を動かすパズルのように少しずつ状態を変える遊びでは、変える前の状態を順に残しておき、一手ずつ前の状態に戻せるようにする。
一定時間の取り消しと、売った物の一覧からの買い戻しは、同じ処理で作れる。売った物を一覧に残しておき、直後の取消は一覧の最後の物を、一覧の画面からの買い戻しは選んだ物を戻す。
// 売った物を、売った値段と、持ち物の一覧のどこにあったかと一緒に残す
const soldLog: { item: Item; price: number; index: number }[] = [];
function sell(index: number) {
const [item] = inventory.splice(index, 1);
gold += item.price;
soldLog.push({ item, price: item.price, index });
showUndo(item, undoSeconds); // 直後の「元に戻す」の案内
}
// 買い戻す。直後の取消では soldLog の最後の物を渡す
function buyBack(entry: (typeof soldLog)[number]) {
gold -= entry.price;
inventory.splice(Math.min(entry.index, inventory.length), 0, entry.item);
soldLog.splice(soldLog.indexOf(entry), 1);
}
// 店を出たら、売った物の一覧を消す(ここから先は戻せない)
function leaveShop() {
soldLog.length = 0;
}
取り消しを付けない操作
結果に運が絡む操作には取り消しを付けない。強化の成否やくじの結果を取り消せると、プレイヤーはよい結果が出るまで取り消しと実行を繰り返せる。こうした操作は実行する前に、何を失うかを書いた確認を出す。
セーブの上書きは上書きした後で元のデータに戻せない。上書きの確認には、上書きされるデータの遊んだ時間や場所を出し、どのデータが消えるのかを見て決められるようにする。上書きする前のデータを予備として一つ残しておく作りにすれば、上書きも取り消せる操作になる。
売った物の一覧は店を出ると消える。店で売っていない物は、店を出た後はお金があっても買い戻せないので、一覧からの買い戻しに加えて売るときに確認も出す。取り消しで守れる範囲を広げたうえで、それでも戻せない操作にだけ確認を残す。すると、確認の出る回数が減り、出たときに読まれやすくなる。