练习 - 使用边界控件操作三维对象

已完成

ObjectManipulator 脚本使用一两只手使对象可移动、可缩放且可旋转。 此脚本支持直接作输入模型,因为它使用户能够直接用手触摸全息影像。 在这里,使用 ObjectManipulator 启用手部互动功能,以便你可以缩放、旋转和移动探测车。

  1. 此外,你将配置 Rover 探索器,以便可以将漫游车部件放置在该漫游车上,使其成为完整的漫游车组装部件。 在“层次结构”窗格中,展开 RoverExplorer >RoverParts 对象并选择其所有子 rover 部件对象和 RoverAssembly 对象,然后在检查器窗格中,使用 “添加组件 ”按钮将以下组件添加到所有选定对象:

    • 对象控器(脚本) 组件
    • 部件程序集控制器(脚本) 组件

    RoverAssembly 的屏幕截图,其中选择了所有漫游器部件对象并添加了组件。

  2. 在选中所有 rover 部件对象和 RoverAssembly 对象后,在检查器窗格中,按如下所示配置 对象控器(脚本) 组件:

    • 基本可交互设置下,找到 On Clicked () 事件。 选择 + 图标以添加新事件。 按如下所示配置事件:

      a。 通过将 RoverAssembly 对象从“层次结构”拖到“无(对象)”字段,将其指定为侦听器的“On Clicked ()”事件。

      b. 从“无函数”下拉列表中选择“TapToPlace”>“StartPlacement()”,以便在触发事件时调用此方法。

    • 从“允许的操作类型”下拉列表中,清除“缩放”复选框,以便仅启用“移动”和“旋转”:

    配置了双手操作类型的Unity屏幕截图。

  3. 仅选择 RoverAssembly 对象,并删除其上的 有状态交互 组件(如果有)。 选择组件最右侧的三个点,然后选择“ 删除组件”。

  4. 在“项目”窗格中,导航到 “包>MRTK 标准资产>音频>HoloLens2 ”文件夹以查找音频剪辑:

    选中了“音频”文件夹的 Unity 项目窗口的屏幕截图。

  5. 在“层次结构”窗格中,重新选择所有 rover 部件对象,然后在检查器窗格中,选择“添加组件”以添加音频源组件并将其配置如下:

    • MRTK_Scale_Start 音频剪辑分配给 AudioClip 字段。
    • 取消选中“ 在唤醒时播放 ”复选框。
    • 空间混合 更改为 1

    Unity 的屏幕截图,其中选择了所有漫游器部件,并添加了并配置了音频源组件。

  6. 在“层次结构”窗格中,展开 RoverAssembly>RoverModel_PlacementHints_XRray>Parts_PlacementHints 对象以显示所有放置提示对象,然后选择第一个漫游器部件、 RoverParts>Camera_Part,然后配置 部件程序集控制器(脚本) 组件,如下所示:

    • Camera_PlacementHint 对象分配到 放置位置 字段。

    配置了 Camera_Part PartAssemblyController 组件的 Unity 屏幕截图。

  7. 剩余的 rover 部件对象和 RoverAssembly 对象重复步骤 5,以配置 部件程序集控制器(脚本) 组件,如下所示:

    • 对于Generator_Part,将Generator_PlacementHint 对象分配给放置位置字段。
    • 对于Lights_Part,请将Lights_PlacementHint对象分配给放置位置字段。
    • 对于 UHFAntenna_Part,请将 UHFAntenna_PlacementHint对象 分配给 放置位置 字段。
    • 对于 Spectrometer_Part,请将 Spectrometer_PlacementHint 对象分配到“放置位置”字段。
    • 对于 RoverAssembly,请将对象本身(即相同的 RoverAssembly 对象)分配给 位置 字段。
  8. 在“层次结构”窗格中,选择“RoverExplorer > 按钮 >重置 ”按钮对象,然后在检查器窗格中配置 PressableButton.OnClicked () 事件,如下所示:

    • RoverAssembly 对象分配给 None (Object) 字段。
    • “无函数 ”下拉列表中,选择 PartAssemblyController>ResetPlacement () 将此函数设置为触发事件时要运行的作。

    Unity 界面的屏幕截图,其中配置了 Reset 按钮对象的 OnClick 事件。

  9. 如果现在进入“游戏”模式,可以使用近或远交互将漫游车部件放在漫游车上。 部件靠近相应的定位提示后,它将卡入到位并成为漫游车的一部分。 若要重置位置,可以按“重置”按钮:

    Unity Play 模式拆分视图的屏幕截图,其中按下了“重置”按钮。

添加边界控件

  1. 在“层次结构”窗口中,选择 RoverExplorer 对象,然后在检查器窗口中,使用 “添加组件 ”按钮添加 BoundsControl 组件。 取消选中 组件旁边的复选框,默认禁用它:

    Unity 的屏幕截图,其中选择了 RoverExplorer 对象,并添加和禁用了组件。

  2. 在“项目”窗口中,导航到“包”“MRTK 空间操作”>“BoundsControl”“预制件”文件夹,单击并拖动 BoundingBoxWithHandles,然后预设“边界控件”组件的“边界视觉对象预设”字段。>>

    Unity 的屏幕截图,其中选择了 RoverExplorer 对象并配置了 Bounds Visuals Prefab 字段。

  3. 在“层次结构”窗格中,展开 “菜单> ”Buttons-GridLayout(按钮) 对象以显示三个按钮。 将第三个按钮重命名为 BoundsControl_Enable,然后在“层次结构”窗口中配置 BoundsControl_Enable 游戏对象,如下所示:

    • 选择 Frontplate > AnimatedContent > Icon > Label 对象,并将 TextMeshPro 组件更改为 “启用”。 确保在层次结构中激活 Label 对象。
    • 通过将 RoverExplorer 对象分配到 None(Object)字段,并从“No 函数”下拉列表中选择 BoundsControl>bool 已启用(确保 参数 复选框被选中),来配置 PressableButton.OnClicked() 事件。
    • 选择小 + 图标以添加另一个事件。
    • RoverExplorer 对象分配到 “无”(对象) 字段。
    • “无函数”下拉列表中,选择“已启用 ObjectManipulator>bool”以在触发事件时更新此属性值,并验证是否选中了参数复选框。
    • 选择小 + 图标以添加另一个事件。
    • RoverExplorer 对象分配到 “无”(对象) 字段。
    • “无函数”下拉列表中,选择 BoundsControl>bool HandlesActive 以在触发事件并验证是否选中参数复选框时更新此属性值。
    • 选择 Frontplate > AnimatedContent > Icon > UIButtonFontIcon 对象,并将 图标 更改为 字体图标选择器 组件上的四个箭头图标。 可以在图标列表中找到此名称,或将 “当前图标名称 ”设置为 “图标 40”。

    Unity 的屏幕截图,其中选中了“BoundsControl_Enable”按钮对象,并配置了“按钮配置助手”组件。

  4. 复制 BoundsControl_Enable 按钮并将其重命名为 BoundsControl_Disable,然后在检查器窗格中配置 按钮配置帮助程序(脚本) 组件,如下所示:

    • 选择 Frontplate > AnimatedContent > Icon > Label 对象,并将 TextMeshPro 组件更改为 “禁用”。
    • 配置 PressableButton.OnClicked() 事件,确保事件下的所有复选框均已取消勾选。

    Unity 的屏幕截图,其中已选中 BoundsControl_Disable 按钮对象,并配置了按钮配置助手组件。

  5. 如果现在进入游戏模式并选择“ 启用 边界控件”,则可以使用近或远的交互来移动、旋转和缩放边界控件,然后选择“ 禁用 ”以再次禁用边界控件:

    Unity 播放模式拆分视图的屏幕截图,其中正在操作边界控件。