BoundsControl - MRTK3
BoundsControl 提供自动调整大小的范围框,以及用于旋转和缩放的操作视觉元素。
在 MRTK 2.x 中,BoundsControl 主要通过使用配置 ScriptableObjects 在运行时生成的。 在 MRTK3 中,BoundsControl 的设置和自定义已大大简化。 边界视觉对象和手柄只是一个 BoundsControl 在运行时实例化的可自定义的预制件。 开发人员可以调整和自定义视觉对象预制件,甚至可以从头开始生成新的边界视觉对象。 我们遵循新的混合现实设计语言,提供了标准边界视觉对象实现。
新的视觉对象提供简化的视觉反馈,以最少的干扰性视觉噪音来说明用户对对象的意图和操作。
安装
只需将 BoundsControl 添加到现有对象,并用要使用的边界视觉对象填充 BoundsVisualsPrefab
引用。 我们会提供一些不同的预生成边界视觉对象供你使用。
重要
强烈建议开发人员添加 MinMaxScaleConstraint,以防止用户将对象缩放到无法使用的小尺寸或大尺寸。
若要使用边界视觉对象的意图和焦点效果,对象必须具有 StatefulInteractable
。 如果未自动检测到可交互对象,则可以在 BoundsControl 检查器中指定连接。
注意
我们建议开发人员将 ObjectManipulator 与 BoundsControl 一起使用,为用户提供直接操作,以及基于视觉元素的操作。 ObjectManipulator 可以充当边界视觉对象响应的悬停/焦点状态的 StatefulInteractable
。
边界视觉对象预制件
我们提供多个用于 BoundsControl 的预生成的边界视觉对象。 鼓励开发人员制作这些视觉对象的预制体变体,并对其进行自定义以满足各自的需求。 手柄动画和状态由 StateVisualizer 提供支持,使开发人员能够进一步自定义视觉元素的外观。
手柄遮挡样式
这些边界视觉对象为用户提供了简化的视觉设计,减少了对用户的干扰。 只有边界边缘的相关手柄可见。 边界视觉对象根据用户意向和选择进度收缩、展开和更改颜色/粗细。 强烈建议使用此边界视觉样式。
仅意向
在某些上下文中,可能不需要手柄,开发人员可能希望仅使用边界视觉对象来轻松指示用户意图。 虽然此预制件可以实现这个目的,但通过选择 HandleType.None 可以通过任何其他边界视觉对象实现相同的效果。 我们发现,可挤压的边界视觉对象对于许多不同的上下文来说都是令人满意且令人愉快的视觉反馈元素,而不仅仅是对于基于手柄的操作。
旧样式
这些边界视觉对象显示框的所有手柄和边缘。 这更符合旧设计语言和 MRTK 2.x 中之前的行为;然而,由于不必要的视觉噪音,这种设计可能会分散用户的注意力。 此外,对象前面(和后面)存在手柄可能会导致间接凝视-捏合操作出现问题。 不建议将此样式用于新应用程序,尤其是那些利用凝视目标的应用程序。
交互设计
在当前迭代中,我们提供了一个简单的激活/停用交互。 通过单击可视边界(换句话说,选择对象,不移动对象,并释放对象),可以打开和关闭手柄。 可以使用 DragToggleThreshold
调整此检查的距离容差,并且可以使用 ToggleHandlesOnClick
属性启用/禁用此激活行为本身。
可以通过设置 HandlesActive
随时从代码手动激活或停用手柄。
自动边界计算
BoundsControl 将尝试自动计算关联对象的边界。 如果需要特定的边界形状,请检查 OverrideBounds
选项并直接指定边界对象。 边界计算系统将仅计算指定重写对象的边界。
BoundsCalculationMethod
会影响算法计算边界的方式。 如果封闭对象的视觉形状不一定与碰撞体匹配,或者情况正好相反,开发人员可以调整计算方法,以首选使用呈现器或碰撞体边界,或两者的组合。
无论计算方法如何,Padding
选项都将以世界单位统一填充边界。 当边界平展时,不填充平展轴。
平展
BoundsControl 也可用于操作 2D 内容。 如果 FlattenMode
设置为 Auto
,则 BoundsControl 会将自身平展为 2D 矩形边界(如果对象在任何轴的方向上足够平整)。 如果对象不够平整,但你仍然要使用矩形边界视觉元素,FlattenMode.Always
将始终沿最细的轴展平 BoundsControl。 相反,即使对象非常细,FlattenMode.Never
也会阻止 BoundsControl 平展。
操作选项
BoundsControl 的操作行为可以通过多种方式进行调整。 该 RotateAnchor
选项控制使用旋转视觉元素时 BoundsControl 围绕其旋转的透视点。 某些对象的透视点远非其视觉中心,当使用旋转手柄操作时,这可能会导致不适和不精确。 为 RotateAnchor
指定 BoundsCenter
将导致 BoundsControl 始终围绕计算边界的几何中心(而不是对象的实际原点)旋转。
缩放行为可以设置为 Uniform
或 Non Uniform
。 在统一模式下,对象的所有轴都一起缩放,以保持纵横比和外观。 非统一缩放允许单独缩放对象的每个轴。