Упражнение. Манипуляция трехмерными объектами с помощью элемента управления границами

Завершено

Сценарий ObjectManipulator делает объект перемещаемым, масштабируемым и вращаемым, используя одну или две руки. Этот сценарий поддерживает модель ввода прямого манипулирования, так как он позволяет пользователю касаться голограммы непосредственно руками. Сейчас вы воспользуетесь ObjectManipulator для включения взаимодействия руки, чтобы марсоход можно было перемещать, масштабировать и поворачивать.

  1. Кроме того, вы настроите марсоход так, чтобы соединить все его части вместе и создать полноценную сборку марсохода. В области Hierarchy (Иерархия) разверните объект RoverExplorer > >RoverParts и выберите все его дочерние объекты частей марсохода и объект RoverAssembly, затем в области Inspector (Инспектор) нажмите кнопку Add Component (Добавить компонент), чтобы добавить следующие компоненты ко всем выбранным объектам.

    • компонент Object Manipulator (Script) (Манипулятор объектами — скрипт).
    • компонент Part Assembly Controller (Script) (Элемент управления сборкой деталей — скрипт).

    Screenshot of RoverAssembly with all rover part objects selected and components added.

  2. Если все объекты частей марсохода и объект RoverAssembly все еще выбраны, в области Inspector настройте компонент Object Manipulator (Script) (Манипулятор объектов (сценарий)) следующим образом.

    • В разделе "Базовый взаимодействуемый Параметры" найдите событие On Clicked (). Затем щелкните значок +, чтобы добавить новое событие. Настройте событие следующим образом:

      a. Назначьте объект RoverAssembly в качестве прослушивателя события On Clicked () путем перетаскивания его из иерархии в поле None (Object).

      b. В раскрывающемся списке "Нет функции" выберите TapToPlace>StartPlacement(), чтобы вызвать этот метод при активации события.

    • В раскрывающемся списке разрешенных типов манипуляций снимите флажок "Масштаб проверка", чтобы включить только перемещение и поворот:

    Screenshot of Unity with Two Handed Manipulation Type configured.

  3. Выберите только объект RoverAssembly и удалите компонент взаимодействия с отслеживанием состояния, если он есть. Выберите три точки справа от компонента, а затем нажмите кнопку "Удалить компонент".

  4. В области проекта перейдите в папку Packages>MRTK Standard Assets>Audio>HoloLens2, чтобы найти звуковые клипы:

    Screenshot of Unity Project window with Audio folder selected.

  5. В области Hierarchy повторно выделите все объекты частей марсохода, затем в области Inspector нажмите Add Component (Добавить компонент), чтобы добавить компонент Audio Sources, и настройте его следующим образом.

    • В поле AudioClip укажите аудиоклип MRTK_Scale_Start.
    • Снимите флажок Play On Awake (Воспроизвести при загрузке).
    • Измените значение параметра Spatial Blend (Пространственное смешение) на 1

    Screenshot of Unity with all rover parts selected and Audio Source component added and configured.

  6. В области Hierarchy разверните объект RoverAssembly > RoverModel_PlacementHints_XRay > Parts_PlacementHints, чтобы отобразить все объекты подсказок размещения, затем выберите первую часть марсохода, RoverParts > Camera_Part и настройте компонент Assembly Controller (Script) (Контроллер сборки (сценарий)) следующим образом:

    • В поле Location To Place (Расположение для размещения) укажите объект Camera_PlacementHint.

    Screenshot of Unity with Camera_Part PartAssemblyController component configured.

  7. Повторите шаг 5 для каждого из оставшихся объектов частей марсохода и объекта RoverAssembly, чтобы настроить компонент Part Assembly Controller (Script) (Контроллер сборки частей (сценарий)) следующим образом.

    • В объекте Generator_Part назначьте полю Location To Place (Место расположения) объект Generator_PlacementHint.
    • В объекте Lights_Part назначьте полю Location To Place объект Lights_PlacementHint.
    • В объекте UHFAntenna_Part назначьте полю Location To Place объект UHFAntenna_PlacementHint.
    • Для Spectrometer_Part назначьте объект Spectrometer_PlacementHint полю Location To Place
    • В объекте RoverAssembly назначьте полю Location To Place сам этот объект, то есть RoverAssembly.
  8. В области иерархии выберите объект кнопки "Сброс кнопок >Обозреватель > Обозреватель затем в области инспектора настройте событие PressableButton OnClicked () следующим образом:

    • В поле None (Object) (Отсутствует (объект)) укажите объект RoverAssembly.
    • В раскрывающемся списке No Function (Нет функции) выберите PartAssemblyController>ResetPlacement (), чтобы задать эту функцию в качестве действия, выполняемого при срабатывании события.

    Screenshot of Unity with Reset button object OnClick event configured.

  9. Если вы сейчас войдете в игровой режим, вы сможете использовать ближнее или дальнее взаимодействие, чтобы разместить части на марсоходе. Когда деталь будет близка к соответствующей подсказке о размещении, она автоматически закрепится в нужном месте и станет деталью лунохода. Чтобы сбросить параметры размещения, нажмите кнопку Reset (Сброс):

    Screenshot of Unity Play mode split view with Reset button being pressed.

Добавление элемента управления границами

  1. В окне иерархии выберите объект Rover Обозреватель, а затем в окне Инспектора нажмите кнопку "Добавить компонент", чтобы добавить компонент BoundsControl. Отмените проверка поле проверка box рядом с компонентом, чтобы отключить его по умолчанию:

    Screenshot of Unity with RoverExplorer object selected and components added and disabled.

  2. В окне проекта перейдите к папке "Пакеты>пространственных манипуляций MRTK Spatial Manipulation>BoundsControl>Prefabs", щелкните и перетащите предварительное поле BoundingBoxWithHandles в поле "Привязки визуальных элементов" компонента "Ограничивающие элементы управления".

    Screenshot of Unity with RoverExplorer object selected and the Bounds Visuals Prefab field configured.

  3. В области иерархии разверните объект Menu >Button-GridLayout (Button), чтобы отобразить три кнопки, переименуйте третью кнопку на BoundsControl_Enable, а затем в окне иерархии настройте объект игры BoundsControl_Enable следующим образом:

    • Выберите объект Frontplate > AnimatedContent > Icon > Label и измените компонент TextMeshPro на Enable. Убедитесь, что объект Label активирован в иерархии
    • Настройте событие PressableButton.OnClicked(), назначив объект Rover Обозреватель поле None (Object) и выбрав значение BoundsControl>bool Enabled из раскрывающегося списка "Нет функции" (убедитесь, что аргумент проверка box проверка)
    • Нажмите маленький значок +, чтобы добавить еще одно событие.
    • В поле None (Object) (Отсутствует (объект)) укажите объект RoverExplorer.
    • В раскрывающемся списке "Нет функции" выберите ObjectManipulator>bool Enabled, чтобы обновить это значение свойства при активации события и убедитесь, что аргумент проверка box проверка
    • Нажмите маленький значок +, чтобы добавить еще одно событие.
    • В поле None (Object) (Отсутствует (объект)) укажите объект RoverExplorer.
    • В раскрывающемся списке "Нет функции" выберите BoundsControl>bool HandlesActive, чтобы обновить это значение свойства при активации события и убедитесь, что аргумент проверка box проверка
    • Выберите объект UIButtonFonton frontplate > AnimatedContent > Icon > и измените значок "Значок" на четыре стрелки в компоненте селектора значка шрифта. Это можно найти в списке значков или задать для параметра ** Текущее имя значка** значение "Значок 40".

    Screenshot of Unity with BoundsControl_Enable button object selected and Button Config Helper component configured.

  4. Дублируйте кнопку BoundsControl_Enable и переименуйте ее на BoundsControl_Disable, а затем в области инспектора настройте компонент вспомогательной функции конфигурации кнопки (скрипт), как показано ниже.

    • Выберите объект Frontplate > AnimatedContent > Icon > Label и измените компонент TextMeshPro на Disable
    • Настройте событие PressableButton.OnClicked(), убедившись, что все проверка boxes в событиях не проверка

    Screenshot of Unity with BoundsControl_Disable button object selected and Button Config Helper component configured.

  5. Если теперь перейти в режим игры и нажать кнопку Включить для включения элемента управления границами, можно использовать ближнее или дальнее взаимодействие для перемещения, вращения и масштабирования элемента Bounds Control, а затем нажать кнопку Отключить, чтобы снова отключить элемент управления границами.

    Screenshot of Unity Play mode split view with Bounds Control being manipulated.