Упражнение. Манипуляция трехмерными объектами с помощью элемента управления границами
Сценарий ObjectManipulator делает объект перемещаемым, масштабируемым и вращаемым, используя одну или две руки. Этот сценарий поддерживает модель ввода прямого манипулирования, так как он позволяет пользователю касаться голограммы непосредственно руками. Сейчас вы воспользуетесь ObjectManipulator для включения взаимодействия руки, чтобы марсоход можно было перемещать, масштабировать и поворачивать.
Кроме того, вы настроите марсоход так, чтобы соединить все его части вместе и создать полноценную сборку марсохода. В области Hierarchy (Иерархия) разверните объект RoverExplorer > >RoverParts и выберите все его дочерние объекты частей марсохода и объект RoverAssembly, затем в области Inspector (Инспектор) нажмите кнопку Add Component (Добавить компонент), чтобы добавить следующие компоненты ко всем выбранным объектам.
- компонент Object Manipulator (Script) (Манипулятор объектами — скрипт).
- компонент Part Assembly Controller (Script) (Элемент управления сборкой деталей — скрипт).
Если все объекты частей марсохода и объект RoverAssembly все еще выбраны, в области Inspector настройте компонент Object Manipulator (Script) (Манипулятор объектов (сценарий)) следующим образом.
В разделе "Базовый взаимодействуемый Параметры" найдите событие On Clicked (). Затем щелкните значок +, чтобы добавить новое событие. Настройте событие следующим образом:
a. Назначьте объект RoverAssembly в качестве прослушивателя события On Clicked () путем перетаскивания его из иерархии в поле None (Object).
b. В раскрывающемся списке "Нет функции" выберите TapToPlace>StartPlacement(), чтобы вызвать этот метод при активации события.
В раскрывающемся списке разрешенных типов манипуляций снимите флажок "Масштаб проверка", чтобы включить только перемещение и поворот:
Выберите только объект RoverAssembly и удалите компонент взаимодействия с отслеживанием состояния, если он есть. Выберите три точки справа от компонента, а затем нажмите кнопку "Удалить компонент".
В области проекта перейдите в папку Packages>MRTK Standard Assets>Audio>HoloLens2, чтобы найти звуковые клипы:
В области Hierarchy повторно выделите все объекты частей марсохода, затем в области Inspector нажмите Add Component (Добавить компонент), чтобы добавить компонент Audio Sources, и настройте его следующим образом.
- В поле AudioClip укажите аудиоклип MRTK_Scale_Start.
- Снимите флажок Play On Awake (Воспроизвести при загрузке).
- Измените значение параметра Spatial Blend (Пространственное смешение) на 1
В области Hierarchy разверните объект RoverAssembly > RoverModel_PlacementHints_XRay > Parts_PlacementHints, чтобы отобразить все объекты подсказок размещения, затем выберите первую часть марсохода, RoverParts > Camera_Part и настройте компонент Assembly Controller (Script) (Контроллер сборки (сценарий)) следующим образом:
- В поле Location To Place (Расположение для размещения) укажите объект Camera_PlacementHint.
Повторите шаг 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.
В области иерархии выберите объект кнопки "Сброс кнопок >Обозреватель > Обозреватель затем в области инспектора настройте событие PressableButton OnClicked () следующим образом:
- В поле None (Object) (Отсутствует (объект)) укажите объект RoverAssembly.
- В раскрывающемся списке No Function (Нет функции) выберите PartAssemblyController>ResetPlacement (), чтобы задать эту функцию в качестве действия, выполняемого при срабатывании события.
Если вы сейчас войдете в игровой режим, вы сможете использовать ближнее или дальнее взаимодействие, чтобы разместить части на марсоходе. Когда деталь будет близка к соответствующей подсказке о размещении, она автоматически закрепится в нужном месте и станет деталью лунохода. Чтобы сбросить параметры размещения, нажмите кнопку Reset (Сброс):
Добавление элемента управления границами
В окне иерархии выберите объект Rover Обозреватель, а затем в окне Инспектора нажмите кнопку "Добавить компонент", чтобы добавить компонент BoundsControl. Отмените проверка поле проверка box рядом с компонентом, чтобы отключить его по умолчанию:
В окне проекта перейдите к папке "Пакеты>пространственных манипуляций MRTK Spatial Manipulation>BoundsControl>Prefabs", щелкните и перетащите предварительное поле BoundingBoxWithHandles в поле "Привязки визуальных элементов" компонента "Ограничивающие элементы управления".
В области иерархии разверните объект 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".
Дублируйте кнопку BoundsControl_Enable и переименуйте ее на BoundsControl_Disable, а затем в области инспектора настройте компонент вспомогательной функции конфигурации кнопки (скрипт), как показано ниже.
- Выберите объект Frontplate > AnimatedContent > Icon > Label и измените компонент TextMeshPro на Disable
- Настройте событие PressableButton.OnClicked(), убедившись, что все проверка boxes в событиях не проверка
Если теперь перейти в режим игры и нажать кнопку Включить для включения элемента управления границами, можно использовать ближнее или дальнее взаимодействие для перемещения, вращения и масштабирования элемента Bounds Control, а затем нажать кнопку Отключить, чтобы снова отключить элемент управления границами.