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 选项都将以世界单位统一填充边界。 平展边界时,不填充平展的轴。

平坦

平展的边界Control

BoundsControl 也可用于作 2D 内容。 如果 FlattenMode 设置为 Auto,则如果对象沿任何轴足够平整,则 BoundsControl 会将自身平展为 2D 矩形边界。 如果对象不够平坦,但你仍希望矩形边界提供, FlattenMode.Always 则始终沿最细的轴平展 BoundsControl。 相反, FlattenMode.Never 将阻止 BoundsControl 平展,即使对象非常薄。

作选项

BoundsControl 的作行为可以通过多种方式进行调整。 选项 RotateAnchor 控制使用旋转提供时,BoundsControl 围绕其旋转的透视点。 某些对象的透视点远离其视觉中心,这在使用旋转手柄进行作时可能会导致不适和不完美。 BoundsCenterRotateAnchor 指定 将导致 BoundsControl 始终围绕计算边界的几何中心旋转,而不是对象的实际原点。

缩放行为可以设置为 UniformNon Uniform。 在“统一”模式下,对象的所有轴一起缩放,从而保持纵横比和外观。 非一致性缩放允许单独缩放对象的每个轴。