ww# 学习资料
基本操作:链接: https://learn.microsoft.com/zh-cn/hololens/hololens2-basic-usage
链接: https://learn.microsoft.com/zh-cn/windows/mixed-reality/mrtk-unity/mrtk2/features/ux-building-blocks/bounds-control?view=mrtkunity-2021-05
编辑器调试方法
默认情况下,MRTK 附带的配置文件中会启用输入模拟。 只需单击“播放”按钮即可运行输入模拟支持的场景。
按 W、A、S、D、Q、E 键可移动摄像头。
在按住鼠标右键的同时移动鼠标可以四处浏览。
按空格键(右手)或左 Shift 键(左手)以显示模拟的双手
按 T 或 Y 键以将模拟的双手保持在视野中
要旋转模拟的手部,请按住 Ctrl 键并移动鼠标
UX组件学习
1.边界框
可以在 BoundingBoxExamples 场景中找到边界框配置的示例。
如何使用 Unity 检查器添加和配置边界框
1)向对象添加盒碰撞体
2)将 BoundingBox 脚本分配给对象
Behavior:Activation
有几个用于激活边界框界面的选项。
启动时激活:在场景启动时,边界框变为可见。
接近时激活:当明确有手接近对象时,边界框变为可见。
指针激活:当边界框成为手射线指针的目标时,边界框变为可见。
指针和手动激活:当边界框成为手射线指针的目标时,明确有手接近对象时,边界框变为可见。
手动激活:边界框不会自动变为可见。 可以通过访问 boundingBox.Active 属性使用脚本手动激活它。
2.边界控制
BoundsControl 是先前在 BoundingBox 中发现的新操作行为组件。 边界控制在设置方面进行了大量改进和简化,并添加了新功能。 此组件是边界框的替换项,边界框将被弃用。
3.布局
布局工具
4.按钮
1)Button
脚本
Interactable.cs
PressableButton.cs
PhysicalPressEventRouter.cs
若要利用特定的表达手部输入状态信息,可以使用可按按钮事件 -Touch Begin、Touch End、Button Pressed、Button Released。 但不会引发这些事件来响应隔空敲击、手部射线或眼部输入。 为了同时支持近距交互和远距交互,建议使用可交互的 OnClick 事件。
2)Toggle
InteractableToggleCollection.cs
5.约束管理器
约束管理器的默认模式,即自动约束选择,将提供所有附加约束组件的列表,以及转到按钮和添加约束按钮。
如果将束管理器设置为手动模式,则仅处理约束列表中链接的约束并将其应用于转换。 显示的列表将仅显示用户选择的约束,以及转到按钮或用于删除或添加条目的选项。 首次启用手动模式时,约束管理器将使用所有可用组件填充列表,作为选择附加约束组件的起点。
约束选择:
手类型
指定约束是用于单手操作、双手操作还是同时用于这两种操作。 由于此属性是一个标志,因此可以同时选择这两个选项。
单手:如果选择,约束将在单手操作期间使用。
双手操作:如果选择,约束将在双手操作期间使用。
邻近类型
指定约束是用于近操作、远操作还是同时用于这两种操作。 由于此属性是一个标志,因此可以同时选择这两个选项。
近:如果选择,约束将在近操作期间使用。
远:如果选择,约束将在远操作期间使用。
FaceUserConstraint
约束人脸用户
当此约束附加到对象时,旋转将受到限制,以便对象始终面向用户。 这适用于盖板或面板。 FaceUserConstraint 的属性如下:
人脸离开
如果为 true,则对象与用户远离。
FixedDistanceConstraint
约束 固定距离
此约束固定了操作开始时被操作对象与另一个对象转换之间的距离。 这适用于诸如固定被操作对象与头部转换之间的距离等行为。 FixedDistanceConstraint 的属性如下:
约束转换
这是被操作对象将具有固定距离的另一个转换。 默认为照相机转换。
FixedRotationToUserConstraint
固定旋转
此约束在被操作时固定了用户和被操作对象之间的相对旋转。 这适用于盖板或面板,因为它可确保被操作对象始终向用户显示与操作开始时相同的人脸。 FixedRotationToUserConstraint 没有任何唯一属性。
FixedRotationToWorldConstraint
固定旋转到世界
此约束固定了被操作时被操作对象的全局旋转。 当不应通过操作来旋转时,这非常有用。 FixedRotationToWorldConstraint 没有任何唯一的属性:
MaintainApparentSizeConstraint
保持明显大小
当此约束被附加到对象时,无论对象与用户有多远,它都将保持与用户相同的表面大小(即它将占据用户视野的相同比例)。 这可用于确保在操作时盖板或面板仍然可读。 MaintainApparentSizeConstraint 没有任何唯一的属性:
MoveAxisConstraint
约束移动轴
此约束可用于固定被操作对象沿哪个轴移动。 这可用于在平面表面或沿直线操作对象。 MoveAxisConstraint 的属性如下:
移动约束
指定要阻止在哪个轴上移动。 默认情况下,这些轴是全局轴而不是局部轴,但可以在下方进行更改。 由于此属性是一个标志,因此可以选择任意数目的选项。
X 轴:如果选择,则沿 x 轴的移动受到限制。
Y 轴:如果选择,则沿 y 轴的移动受到限制。
Z 轴:如果选择,则沿 z 轴的移动受到限制。
使用局部空间进行约束
如果为 true,将约束被操作对象的局部转换轴。 默认值为 False。
RotationAxisConstraint
约束旋转轴
此约束可用于固定被操作对象可沿哪个轴旋转。 这可用于使被操作对象保持垂直,但仍允许围绕 y 轴旋转,例如。 RotationAxisConstraint 的属性如下:
旋转约束
指定要阻止围绕其旋转的轴。 默认情况下,这些轴是全局轴而不是局部轴,但可以在下方进行更改。 由于此属性是一个标志,因此可以选择任意数目的选项。
Y 轴:如果选择,则会约束围绕 y 轴的旋转。
Z 轴:如果选择,则会约束围绕 Z 轴的旋转。
X 轴:如果选择,则会约束围绕 X 轴的旋转。
使用局部空间进行约束
如果为 true,将约束被操作对象的局部转换轴。 默认值为 False。
MinMaxScaleConstraint
Min Max Constatint
此约束允许为被操作对象的规模设置最小值和最大值。 这有助于防止用户将对象缩放得太小或太大。 MinMaxScaleConstraint 的属性如下:
最小缩放
操作期间的最小缩放值。
最大缩放
操作期间的最大缩放值。
相对于初始状态
如果为 true,上述值将被解释为相对于对象的初始缩放值。 否则,它们将被解释为绝对缩放值。
6.对话框
MRTK 提供三种对话框预制件:
DialogSmall_192x96.prefab
DialogMedium_192x128.prefab
DialogLarge_192x192.prefab
使用 Dialog.Open() 打开一个新对话框。 指定“对话框预制件”、“按钮数”、“标题文本”、“消息文本”、“位置距离”或其他变量。 对话框提供“确认”(单个按钮)和“选择”(两个按钮)的对话框选项。
public static Dialog Open(GameObject dialogPrefab, DialogButtonType buttons, string title, string message, bool placeForNearInteraction, System.Object variable = null)
示例:使用单个“确定”按钮打开大型对话框,位于远端交互范围(注视、手部射线、运动控制器)
Dialog.Open(DialogPrefabLarge, DialogButtonType.OK, "Confirmation Dialog, Large, Far", "This is an example of a large dialog with only one button, placed at far interaction range", false);
示例:打开包含用户选择消息的小对话框,位于近端交互范围(直接交互)
Dialog.Open(DialogPrefabSmall, DialogButtonType.Yes | DialogButtonType.No, "Confirmation Dialog, Small, Near", "This is an example of a small dialog with a choice message, placed at near interaction range", true);
7.操作处理程序
使用 ManipulationHandler 脚本可以通过一只或两只手来移动、缩放和旋转对象。 可以限制操作,使其只允许某些种类的变换。 该脚本适用于各种类型的输入,包括 HoloLens 2 关节手输入、手部射线、HoloLens(第一代)手势输入,以及沉浸式头戴显示设备运动控制器输入。
如何使用操作处理程序
将 ManipulationHandler 脚本组件添加到 GameObject。 另外,确保向对象添加一个与其可抓取边界匹配的碰撞体。
为使对象能够响应近距关节手输入,还需要添加 NearInteractionGrabbable 脚本。
在 unity 编辑器中使用操作处理程序
检查器属性
操作处理程序结构
宿主变换:要拖动的变换。 默认为组件的对象。
操作类型:指定是可以使用一只手来操作对象、两只手来操作对象,还是这两种方式都可以。
仅单手
仅双手
一只和两只手
双手操控类型
缩放:仅允许缩放。
旋转:仅允许旋转。
移动缩放:允许移动和缩放。
移动旋转:允许移动和旋转。
旋转缩放:允许旋转和缩放。
移动旋转缩放:允许移动、旋转和缩放。
操作处理程序
允许远距操作:指定是否可以使用远距交互通过指针来执行操作。
近距单手旋转模式:指定使用单手/控制器近距抓取对象时的对象行为。
远距单手旋转模式:指定使用单手/控制器远距抓取对象时的对象行为。
单手旋转模式选项:指定使用单手抓取对象时如何旋转对象。
保持原始旋转:在移动对象时不旋转它
保持向用户旋转:保持原始的沿 X/Y 轴向用户旋转方式
保持沿重力方向向用户旋转:保持原始的向用户旋转方式,但使对象垂直。 对于具有边界控件的对象很有用。
面向用户:确保对象始终面向用户。 适用于平板/面板。
背对用户:确保对象始终背对用户。 对于后向配置的平板/面板很有用。
围绕对象中心旋转:仅适用于关节手/控制器。 使用手部/控制器旋转来旋转对象,但围绕对象中心点旋转。 可用于在某种距离进行检查。
围绕抓取点旋转:仅适用于关节手/控制器。 旋转对象,如同它被手部/控制器抓住了一样。 可用于检查。
释放行为:释放对象时,指定其物理运动行为。 要求该对象上有一个刚体组件。
无
全部内容
保持速度
保持角速度
旋转约束:指定在与对象交互时,对象在哪个轴上旋转。
无
仅 X 轴
仅 Y 轴
仅 Z 轴
使用局部空间进行约束:在应用世界空间轴或局部空间轴相关的约束时用于切换的切换开关。
运动约束
无
固定与头部的距离
平滑化处于活动状态:指定平滑化是否处于活动状态。
单手平滑化量:应用于移动、缩放、旋转的平滑化量。 平滑化量为 0 表示不平滑化。 最大值表示不更改值。
事件
操控处理程序提供以下事件:
OnManipulationStarted:在操控开始时触发。
OnManipulationEnded:在操控结束时触发。
OnHoverStarted:当手部/控制器悬停在近距或远距可操控对象上时触发。
OnHoverEnded:当手部/控制器未悬停在近距或远距可操控对象上时触发。
8.对象控制器
若要使用对象操控器,请先将 ObjectManipulator 脚本组件添加到 GameObject。 另外,确保向对象添加一个与其可抓取边界匹配的碰撞体。
为使对象能够响应近距关节手输入,还需要添加 NearInteractionGrabbable 脚本。
对象控制器
9.凝视停留
停留脚本
DwellHandler:向 UI 目标添加停留模态。
DwellStateType:停留处理程序的状态。
DwellUnityEvent:停留事件的 Unity 事件。 包含指针引用。
BaseDwellPressableButton.cs:可在 PressableButtonHoloLens2 预制件的 Interactable 中触发 OnClick() 事件的脚本。
ToggleDwellPressableButton.cs:此脚本可修改使用 MRTK 标准着色器的 dwellVisualImage 的 BorderWidth 属性。