练习 - 使用 objectmanipulator 添加手部交互

已完成

ObjectManipulator 脚本支持“手部和运动控制器”输入模型的“直接操作”模态。 向对象附加脚本后,用户可以用手来移动、缩放或旋转该对象。 在本练习中,你将创建两个立方体,向它们附加必要的脚本,然后四处移动它们。

添加并调整第一个立方体

  1. 在菜单栏中,选择“GameObject”>“3D 对象”>“立方体”。

    Screenshot of menu commands for adding the cube.

    立方体的默认大小为 1 立方米,这对我们来说太大了。 我们将大小缩减到 20 立方厘米。

  2. 选择该立方体,然后在“检查器”的“转换”部分中将该立方体的“缩放”值更改为以下值

    X = 0.2, Y = 0.2, Z = 0.2

    立方体在场景中的默认位置为 (0,0,0)。 这意味着立方体与用户的头戴显示设备位于同一位置,用户无法看到立方体,直到他们向后移动。 我们将更改立方体的位置值,使它位于更便于查看的位置。

  3. 在“检查器”的“转换”部分中,将该立方体的“位置”值更改为以下值

    X = -0.2, Y = 1.6, Z = 0.5

    Screenshot of the cube's transform component after updates.

    我们希望能看到立方体的三个面,因此还会更改立方体的旋转。

  4. 在“检查器”的“转换”部分中,将该立方体的“旋转”值更改为以下值

    X = 9, Y = 14, Z = 0

    提示

    若要放大该立方体,请选择它,确保光标悬停在“场景”窗口上,然后按 F 键。 可通过这种方式放大任何对象。

向立方体添加脚本

若要使对象在使用跟踪手时可抓取,必须附加三个组件:

  • 碰撞体组件(无需在此执行任何操作;Unity 的立方体默认已附加盒状碰撞体)
  • 对象操控器(脚本)组件
  • 约束管理器(脚本)组件
  1. 在立方体仍然处于选中状态的情况下,在“检查器”窗口中,单击“添加组件”按钮,然后搜索并选择“对象操纵器”脚本

    Screenshot of adding the Object Manipulator script.

    对象操控器脚本能够让对象变得可移动、可缩放和可旋转,这些操作可通过一只或两只手来实现。 添加 Object Manipulator 脚本时,系统会自动添加 Constraint Manager 脚本,因为前者依赖于后者。

    Screenshot of the Constraint Manager script added to the cube.

更新立方体的材料

出于性能考虑,建议使用 MRTK 材料而不是默认的 Unity 材料。

  1. 在仍选中该立方体的情况下,在网格呈现器组件上找到并展开“材料”部分。
  2. 将默认材料替换为位于 MRTK 标准资产>材料下的 MRTK_Standard_White 材料。 可以通过将材料直接拖动到“材料”部分的“元素”字段中来执行此操作

添加第二个立方体

  1. 在“层次结构”中,右键单击该立方体,然后选择“复制”。 系统显示复制的立方体,名称为“Cube (1)”。

  2. 右键单击原始立方体,选择“重命名”,然后将其命名为“Near Cube”。

  3. 右键单击复制的立方体,选择“重命名”,然后将其命名为“Far Cube”。

    目前,Scene 视图中似乎只有一个立方体。 这是因为 Near Cube 和 Far Cube 的位置完全相同。 我们可以更改 Far Cube 的位置和旋转。

  4. 使 Far Cube 仍处于选定状态,将其 Transform 组件中的值更改为以下值:

    位置:X = 0.6,Y = 1.6,Z = 1.1

    旋转:X = 27,Y = 0,Z = 0

    现在,摄像头能看到 Near Cube 位于左侧,Far Cube 位于右侧稍远处。 若要确认这一点,请在“层次结构”中选择“主摄像头”(在“MRTK XR Rig”>“摄像头偏移”下),然后在“场景”窗口中查看“主摄像头”窗口。

    Screenshot of the Main Camera view in the Scene window.

    提示

    如果希望 Scene 窗口中的视图更接近于摄像机所看到的实际场景,请在该窗口中四处滚动。 如果摄像头的“清除标志”未默认设置为 Skybox,可能需要将其设置为 Skybox。

在播放模式下抓取和移动立方体

  1. 选择 Play 按钮。 项目开始播放时,视图切换到 Game 窗口。

    Screenshot of the Game window after entering Play mode.

    注意

    播放前请确认“项目设置”>“MRTK3”下设置了有效的配置文件。

  2. 选择“游戏”窗口右上角的三点按钮,然后选择“最大化”

    Screenshot of Maximize command for the Game window.

  3. 按住空格键,使模拟右手显示在视图中。

  4. 将模拟手朝 Near Cube 移动,直到它触碰到立方体的一面或底部。

    Screenshot of the simulated right hand touching the Near Cube.

  5. 单击鼠标左键(这会使手“抓取”立方体),然后在场景中拖动立方体。

    Screenshot of Move the cube.

    要抓取和移动 Far Cube,我们将使用模拟手附带的远指针。

  6. 如果需要,请再次按住空格键,使模拟右手显示出来。 请注意从手的食指末端延伸出来的远指针。

    Screenshot of simulated hand's far pointer.

  7. 朝 Far Cube 移动手,直到你看到指针末端移到在立方体上。 可能需要将手画几次圈,才能使指针末端出现在立方体上。

    Screenshot of the far pointer touching the cube.

  8. 单击鼠标左键(这会使手靠近,呈我们所谓的“捏合手势”),然后在场景中拖动立方体。