为何那件会“关注你”的展品,反而让你更想靠近

发布日期:2026-06-28 10:03:52   浏览量 :3
发布日期:2026-06-28 10:03:52  
3

为什么那个会“注意你”的展品,反而让你更想靠近

博物馆互动设计的隐形杠杆

东京。

teamLab 展览入口。

地面是一整片黑色的水面,倒映着数字花朵。

你踏进去。

花朵在你脚步周围散开,随着你的移动一圈一圈地绽放和飘落。

你停下来,花也停下来。

你开始走,花就跟着你。

你以为是感应。但仔细看——延迟了大概 0.3 秒。

不是“立刻反应”,是“好像在观察你,然后才决定”。

你站在那里又多看了三秒。

你第一个“对”

让我问你一个问题。

你去过那种“互动博物馆”吗?墙上写着“请触摸”,但你碰了之后什么都没发生——或者是那种“语音导览机”,你对着它说话,它说“请靠近一点”。

然后你就失去兴趣了。

现在让我想另一个场景。

一个会动的恐龙骨骼。你站在它面前的时候,它头转过来看了你一眼。

你知道这是传感器。你知道工程师设计了“检测到人”的时候让它转头。

但你还是觉得——

“它在看我。”

两种互动,哪一个让你停留更久?

你第一个“咦”

这里有一个秘密。

让人停留更久的,通常不是“立刻反应”的互动。

是那种“好像在决定要不要理你”的互动。

为什么?

因为“立刻反应”让你确认了——“这是机器”。

但“好像在决定要不要理你”让你的大脑进入了一个不确定的状态——

“它真的知道我来了吗?”
“它在决定什么?”
“我想看看它决定什么。”

这个“我想看看”就是互动设计里最重要的瞬间——

参与者的好奇心,被启动了。

玉树真一郎在《任天堂的体验设计》里,分析了一个现象:

《超级马里奥》里,当玩家靠近一个问号砖块,顶了它,没有任何东西掉下来。

玩家不会觉得“这个游戏坏了”。

玩家会想:“为什么这次没有?

然后再顶一次。

为什么“没有东西掉下来”没有让玩家放弃?

因为设计师在玩家心里创造了一个“还没发生的确定事件”。

玩家知道“迟早会有东西掉下来”。所以他们愿意等待、愿意再试一次。

博物馆的互动设计也应该这样。

不是立刻给答案。是让你相信“答案快来了”,然后让你一直站在那里等。

你最后“我要改变做法”

让我说一个失败的设计。

一个科技博物馆有一面“触控墙”。墙上有很多按钮,碰了就会播放影片、发出声音、变色。

一开始很多小孩去碰。

但大概十五分钟之后,那面墙就没人碰了。

为什么?

因为碰了 100 次,没有任何一次比另一次更“值得等待”。

每一次都是立刻发生,每一次都是同样的结果。

没有任何一件事需要“决定”。

现在让我说一个成功的设计。

同一个博物馆的另一区,有一面“情绪墙”。

你站在墙前,系统会扫描你的脸——不是真的分析情绪,而是给你一个颜色。

每个人的颜色都不太一样。

但颜色不是立刻出现的。

大概等了两秒——然后它慢慢浮现出来。

在这两秒里,每个站在墙前的人都没有动。

他们在等。

他们相信颜色一定会出现。但他们不确定会是什么颜色。

三个马上可以用的方向

第一:不要立刻给回馈。

加入一个 0.3 到 2 秒的“思考时间”。

让互动看起来像“系统在决定”,而不只是“系统在检测”。

坏掉的灯 vs 正在决定的灯——后者让人更想站在那里等。

自己试试看:30 行做出“延迟反应”的灯

// p5.js — 试试延迟回馈的感觉
let lights = [];
const DELAY = 12;  // 帧数延迟(约 0.2 秒)

function setup() {
  createCanvas(400, 400);
  for (let i = 0; i < 5; i++) {
    lights.push({ history: [], lit: false });
    for (let j = 0; j < Math.max(0, DELAY - 1); j++) {
      lights[i].history.push(false);
    }
  }
}

function draw() {
  background(20);
  
  // 模拟用户交互:鼠标按下时记录状态
  let isPressed = mouseIsPressed;
  
  for (let i = 0; i < lights.length; i++) {
    // 将当前状态加入历史队列
    lights[i].history.push(isPressed);
    // 移除最旧的状态以保持固定长度
    if (lights[i].history.length > DELAY) {
      lights[i].history.shift();
    }
    
    // 获取延迟后的状态(队列头部)
    let delayedState = lights[i].history[0];
    
    // 根据延迟状态绘制灯光
    if (delayedState) {
      fill(255, 200, 0); // 亮黄色
    } else {
      fill(50); // 暗灰色
    }
    
    // 绘制灯泡
    ellipse(80 + i * 60, 200, 40, 40);
  }
  
  // 提示文字
  fill(255);
  textAlign(CENTER);
  text("按住鼠标查看延迟效果", 200, 350);
}

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据