射线把远距目标转为角度选择
别名: 射线选择 · 角度点选 · raycast 指点
概念解释
墙那头的画、三米外的开关、贴在身边的面板,一旦从手里射出一条射线,就变成同一类问题:射线与哪个物体相交。射线指点把远距目标改写成角度选择(angular selection)——人控制的不是手到物体的直线距离,而是射线在空间里扫过的方向。远近被投影到同一个角量上。
这不是「把手伸过去」。伸过去要够得到;射线只要方向对。手可以垂在腰侧,目标可以在房间另一头,选择仍然成立。
机制
一条以手或控制器为原点的射线,把三维拾取降成球面上的二维指向。相交测试沿这条线做,第一个命中的可交互物被选中。于是物体的物理尺寸不再直接进入控制回路,进入回路的是它在视点(更准确说,在射线原点)处张的角。同一块 10 厘米的面板,放在 50 厘米处和放在 5 米处,对射线来说是两个完全不同的目标——近处张角大,远处张角小——尽管手指做的动作还是「转一个方向」。
这个降维是射线存在的理由。远场物体无法被手碰到,却可以被一条线点到,空间交互才不必把所有控件堆在手臂半径里。代价也写在同一笔交易里:控制变量从「伸到那里」变成了「对准那个角」,后续的误差和难度都按角来算,不再按米来算。
怎么研究
比较射线选择与直接伸手选择在不同距离上的表现,看任务是否真的从距离问题变成了角度问题。
自变量:目标距离、目标物理尺寸(从而张角)、射线原点(手 / 眼 / 肩)。 因变量:选择时间、首次命中是否正确、手的位移幅度、口头策略(「我在对准」还是「我在伸过去」)。
如果距离变了、张角保持不变(物体随距离放大),射线成绩应大致持平,直接伸手则在超出臂长后崩溃。这是判定「已经转成角度选择」的干净检验。射线原点选在眼睛还是手上,会改变同一目标的张角定义,需要在方法里写明,不能混着报。
边界
弯曲射线、传送抛物线、或「吸附到最近物体」已经不是纯角度选择,相交规则掺进了重力或磁吸,角对准不再充分。近到伸手就能碰到的物体上,人会放弃射线改用手,这条转换不发生。眼动追踪做的注视选择也是角度选择,但原点在眼眶而不在手,抖动源和疲劳源都不同。实验室里常用无限长、零粗细的理想射线;消费级实现有最大长度、碰撞层和 UI 专用的厚拾取体积,行为会偏离「一条几何线」。
怎么落地
- 远场控件按张角来布局和标定大小,不要按厘米在世界坐标里写死。
- 让射线的视觉表现(线、光点、落点光标)清楚标出当前相交的是哪一个物体,因为选择已经离开手所在的位置。
- 近处可抓的物体不要强制走射线,给一条伸手路径,免得把本来的空间任务压成角度任务。
- 验证:把同一控件分别放在 1 米和 4 米,保持物理尺寸不变,测选择时间。若时间随距离明显变差,说明你在用射线,但设计仍按「伸到那里」在思考;若要让两处一样好用,远处那块必须按张角加大。