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

Завершено

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

  1. Кроме того, вы настроите Rover Explorer, чтобы разместить детали на марсоходе и превратить его в полноценную сборку. В области иерархии разверните объект RoverExplorer >RoverParts и выберите все дочерние объекты части марсохода и объект RoverAssembly, а затем в области инспектора нажмите кнопку Добавить компонент, чтобы добавить следующие компоненты ко всем выбранным объектам:

    • компонент объектного манипулятора (скрипта)
    • контроллер сборки компонентов

    снимок экрана RoverAssembly с выбранными всеми частями марсохода и добавленными компонентами.

  2. Когда все объекты компонентов марсохода и объект RoverAssembly выбраны, в панели инспектора настройте компонент Manipulator (Script) следующим образом:

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

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

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

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

    снимок экрана Unity с настроенным двуручным управлением.

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

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

    снимок экрана окна проекта Unity с выбранной папкой Audio.

  5. В области иерархии повторно выберите все объекты частей марсохода, затем в области инспектора выберите Добавить компонент, чтобы добавить компонент аудиоисточников и настроить его следующим образом:

    • Назначьте звуковой клип MRTK_Scale_Start полю AudioClip
    • Снимите флажок Воспроизведение при пробуждении
    • Измените пространственное смешение на 1

    снимок экрана Unity со всеми выбранными частями марсохода и компонентом источника звука, добавленным и настроенным.

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

    • Назначьте объект Camera_PlacementHint полю Location To Place

    снимок экрана Unity с настроенным компонентом Camera_Part PartAssemblyController.

  7. Повторите шаге 5 для каждого из оставшихся объектов части марсохода и объекта RoverAssembly для настройки контроллера сборки части (скрипта) следующим образом:

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

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

    снимок экрана: Unity с настроенным событием OnClick с объектом кнопки

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

    Снимок экрана разделенного вида режима Unity Play при нажатии кнопки сброса.

Добавить контроль границ

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

    снимок экрана Unity с выбранным объектом RoverExplorer и компонентами, добавленными и отключенными.

  2. В окне проекта перейдите к папке Пакеты>пространственных манипуляций MRTK>BoundsControl>Префабы, щелкните и перетащите префаб BoundingBoxWithHandles в поле Bounds Visuals Prefab компонента Bounds Control.

    Снимок экрана Unity с выбранным объектом RoverExplorer и настроенным полем префаба

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

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

    снимок экрана Unity с выбранным объектом кнопки BoundsControl_Enable и настроенным компонентом Button Config Helper.

  4. Дублируйте кнопку BoundsControl_Enable и переименуйте ее в BoundsControl_Disable, а затем в области инспектора настройте компонент Button Config Helper (Script) следующим образом:

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

    Скриншот Unity с выбранным объектом кнопки BoundsControl_Disable и настроенным компонентом вспомогательной конфигурации кнопки.

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

    снимок экрана разделенного вида режима Unity Play с элементом управления границами.