為什麼遊戲「再一關就好」?拆解那些讓你欲罷不能的設計
先問你一個問題
你曾經有沒有過以下經驗?
躺在床上想說「再打一場就睡」,結果抬頭已經凌晨三點。
或者地鐵上玩消消樂,本來想只玩五分鐘,結果一路玩到站。
這也許不是意志力的問題。更可能是設計出來的。
機制一:即時反饋(Immediate Feedback)
遊戲裡幾乎每一個動作,都會馬上得到回應。
你砍了一隻怪 → 經驗值跳出來
你放了一個技能 → 畫面馬上閃爍
你答對了一個題目 → 「太棒了!」音效響起
這種「做一個動作,立刻得到回應」的感覺,在現實生活裡不一定常見。
現實:你努力了一個月,老闆說「還不錯,繼續加油」(有時候一個月才一次回應)
遊戲:你砍了一隻怪,馬上看到數字跳出來
玩遊戲時,你的大腦會覺得「這個世界很有回應」——也許就停不下來了。
機制二:階梯式成就感(Progressive Challenge)
好的遊戲會設法讓難度階梯式上升——讓你墊腳搆得到,但搆的過程有點挑戰性。
心理學上有個詞叫「心流(flow)——就是完全沉浸在活動裡,忘記時間的那種感覺」:
挑戰太簡單 → 無聊
挑戰太難 → 焦慮
挑戰剛好比你能力高一點點 → 專注到忘記時間
遊戲設計師常會參考這個框架來設計難度曲線。
機制三:未知獎勵(Variable Reward)
這一招很強。
想像你有兩種情況:
情況 A:你知道打敗這只怪,會掉 100 金幣。100% 確定。
情況 B:你不知道打敗這只怪會掉什麼。可能掉 10 金幣,可能掉稀有裝備,也可能什麼都沒有。隨機的。
即使兩個選項的「平均報酬」一樣,如果你問身邊朋友「你喜歡哪一個」,他們可能會選情況 B——那種「不知道」的刺激感,會讓大腦對「未知的驚喜」特別有反應。
手機遊戲的抽卡、轉蛋,有些可以說是這個機制的變形。
庭庭:這些東西跟我的生活有什麼關係?
不只是遊戲。
有些平台的設計——例如 Instagram 的限時動態、Netflix 的自動播放、Spotify 的每週推薦——常會用到「即時反饋」和「未知獎勵」的元素。
當你知道這些機制在運作的時候,你就可以選擇「我要不要被它影響」。
你可以是這樣的人:
玩手遊的時候,知道這些機制存在,所以玩完這關就選擇真的去睡。
而不是這樣的人:
「奇怪我為什麼每次都停不下來⋯⋯」
小傑:如果想做得更正式
遊戲化機制(gamification)不只是手機遊戲的專利。
如果你想把它做成展覽或互動裝置,硬體電路可以讓回饋從「虛擬」變成「物理」:
材料:
- Arduino Uno(大約 200 元)
- 三色 LED 燈 + 220Ω 電阻 x 3
- 麵包板和杜邦線
概念:做一個「能量條」——每次觀眾做一個指定動作(按鈕、觸碰感測器),燈就亮一格。累積到一定程度,全部 LED 閃爍 + 播放成功音效。
這就是把遊戲的「即時反饋」和「階梯式成就感」變成實體感受的做法。
進階版:加入隨機性——有時候做完動作只亮 1 格,有時候亮 2 格(未知獎勵)。觀眾可能會想「再試一次看看會亮幾格」。
阿哲:如果想用這些機制做作品
好消息:這些機制是可以拿來做好事的。
例如:
- 讀書 app:每讀完一個章節,馬上有一個小測驗(即時反饋),讓讀書也有「打怪」的感覺
- 習慣養成:每完成一次習慣,就在日曆上打一個勾(台階式成就感),累積三十天給自己一個獎勵(未知獎勵)
- 互動藝術:讓觀眾參與的每一步都得到視覺或聲音的回應,讓他們不願意離開
下次看到一個讓你停不下來的設計時,試著問自己:
這是哪一種機制在作用?
知道名字之後,你就比較不容易被它牽著走了。
實驗:自己體驗即時反饋
用 p5.js 做出來的。點擊圓圈,馬上看到分數增加(即時反饋)。有時候只加 1 分,有時候加 10 分(未知獎勵)。分數越高,升級需要的分數越多(階梯式成就感)。
// p5.js 遊戲化機制實驗
// 點擊黃色目標,觀察三種上癮機制
let score = 0;
let level = 1;
let pointsToNextLevel = 10;
let target;
let particles = [];
function setup() {
createCanvas(400, 400);
noCursor();
spawnTarget();
}
function spawnTarget() {
target = {
x: random(50, width - 50),
y: random(80, height - 50),
size: 30 + random(10)
};
}
function draw() {
background(30);
// 即時反饋粒子
for (let p of particles) {
fill(255, 200, 50, p.life);
noStroke();
ellipse(p.x, p.y, p.size);
p.x += p.vx;
p.y += p.vy;
p.life -= 5;
}
// 目標
fill(255, 220, 0);
noStroke();
ellipse(target.x, target.y, target.size);
// 等級進度條
fill(50);
rect(20, 20, 200, 20, 5);
let scoreInLevel = score - (pointsToNextLevel - 10);
if (scoreInLevel < 0) scoreInLevel = 0;
let progress = scoreInLevel / (pointsToNextLevel - (pointsToNextLevel - 10));
if (progress > 1) progress = 1;
fill(0, 200, 100);
rect(20, 20, 200 * progress, 20, 5);
// 分數與等級
fill(255);
textSize(14);
text(`分數: ${score}`, 20, 60);
text(`等級: ${level}`, 20, 80);
// 清除死亡粒子
particles = particles.filter(p => p.life > 0);
// 游標
noFill();
stroke(255);
ellipse(mouseX, mouseY, 20);
line(mouseX - 12, mouseY, mouseX + 12, mouseY);
line(mouseX, mouseY - 12, mouseX, mouseY + 12);
}
function mousePressed() {
let d = dist(mouseX, mouseY, target.x, target.y);
if (d < target.size / 2) {
// 即時反饋:馬上加分
let reward = random() < 0.3 ? 10 : 1; // 未知獎勵:30% 機率得 10 分
score += reward;
// 等級提升(支援一次升多級)
while (score >= pointsToNextLevel) {
level++;
pointsToNextLevel += 10;
}
// 粒子特效
for (let i = 0; i < 8; i++) {
particles.push({
x: target.x,
y: target.y,
vx: random(-3, 3),
vy: random(-3, 3),
size: random(4, 10),
life: 255
});
}
spawnTarget();
}
}
試著把 random() < 0.3 改成 0.5 或 0.1,看遊戲感覺怎麼變化。
今天的功課
下次玩遊戲的時候(如果你有玩的話),注意三件事:
- 我在哪個時刻停不下來? 是打Boss的緊張感?還是開寶箱的期待感?
- 這個遊戲什麼時候讓我覺得自己很強? 第幾關?什麼操作?
- 我能不能用一句話總結這款遊戲最吸引我的部分?
如果你能回答這三個問題,你就知道這個遊戲在用哪一招抓住你了。
今日概念:遊戲讓人停不下來,通常不是因為「好玩」两个字能解釋的。背後常見的手法包括「即時反饋」、「台階式成就感」和「未知獎勵」——設計師把它們按得比較精準。
一句話版本:當你的大腦開始覺得「每個動作好像都有意義」的時候,你可能就停不下來了。
Top comments (0)