返回知识库

网页 3D · 交互与性能

点选物体Raycasting

3D 里的点选靠射线拾取:从相机穿过指针射出一条线,最先碰到的物体被选中。透明遮挡要排除,拖动要和点击分开,小目标要放大点击范围,还要给键盘一条替代路径。

在小客厅里点三样东西,找出 AI 第一版的三个点选毛病

画面是真实的 three.js 射线拾取:每次点击,都从相机穿过你点的位置射出一条线,下面的「射线报告」会列出它依次碰到了什么。先点书架,再隔着玻璃点沙发和台灯,然后按住拖动转视角、切到手机模式点台灯;遇到毛病就去旁边清单勾修复,再点一次。

按下 → 松开移动了 0px

正在按需加载 3D 引擎(three.js)…

这条射线依次碰到

还没有点击

用键盘选中:

任务:用鼠标或手指选中(0/4)

  • ○选中书架它不在玻璃后面,先点它试试
  • ○选中沙发隔着玻璃隔断点
  • ○选中台灯小桌上那盏,也在玻璃后面
  • ○手机模式下选中台灯切到「手机 · 手指」再点
给 AI 的修改清单

正在按需加载 three.js……

知识点:一条射线,三个容易出错的地方

刚才射线报告里的顺序,就是 3D 点选的全部规则。

  • 射线拾取(Raycasting):从相机穿过鼠标或手指的位置射出一条线,按距离排出它碰到的物体。
  • 最先碰到的赢:透明玻璃、玻璃罩、看不见的辅助物体只要挡在前面,就会抢走点击,要让它们不参与点选。
  • 点击和拖动要分开:同一个按下—松开,移动超过几像素就算转视角,否则每次转完都会误选。
  • 小物体在手机上很难点中:给它加一个看不见的、更大的碰撞体,而不是要求用户点得更准。
  • 3D 画布对读屏和键盘是一块图片:另外提供按钮或列表来选择物体,是无障碍的替代路径。

什么时候用、怎么验收

只要 3D 场景里的东西「能点」,就要把这几条写进需求。

  • 信号:需求里有「点击模型显示信息」「点选零件换颜色」「点家具看详情」,或 AI 报告里出现 Raycaster、intersectObjects。
  • 需求里写清:哪些物体能点,哪些(玻璃、罩子、地板)不参与;拖动超过 5px 不算点击;小物体放大点击范围;另给一组按钮能选中。
  • 验收一:隔着透明物体点后面的东西,选中的必须是后面那个。
  • 验收二:拖动转视角后松手,不能出现选中高亮。
  • 验收三:真机上用手指点最小的那个物体,三次里至少点中两次;只用 Tab 键也能选中每一样东西。

正反例:同一个「点家具看详情」需求

差别只在需求里有没有写清点选规则。

反例「做成能点 3D 里的东西」

AI 把场景里所有网格都设成可点。客户点沙发弹出「玻璃隔断」,转一下视角就误选,手机上点台灯点了五次都没反应。

正例「点沙发、台灯、书架时高亮并显示名称;玻璃不参与点选;拖动超过 5px 不算点击;台灯点击范围放大;另给一组按钮能选中」

同一个客厅,点到的就是看到的那个;转视角不误选;手机上台灯一点就中;不用鼠标的人也能按按钮选。

快速自测

3D 珠宝展示页:戒指放在一个透明玻璃罩里,用户反馈「点戒指总是弹出『展示罩』的介绍」。最可能的原因是什么?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。