Упражнение - Манипуляция трехмерными объектами с помощью управления границами
Скрипт ObjectManipulator делает объект перемещаемым, масштабируемым и поворотным с помощью одной или двух рук. Этот скрипт поддерживает модель ввода прямых манипуляций, так как позволяет пользователю касаться голограмм непосредственно с помощью рук. Здесь используйте ObjectManipulator, чтобы обеспечить взаимодействие с помощью рук, чтобы можно было перемещать, масштабировать и поворачивать марсоход.
Кроме того, вы настроите Rover Explorer, чтобы разместить детали на марсоходе и превратить его в полноценную сборку. В области иерархии разверните объект RoverExplorer >RoverParts и выберите все дочерние объекты части марсохода и объект RoverAssembly, а затем в области инспектора нажмите кнопку Добавить компонент, чтобы добавить следующие компоненты ко всем выбранным объектам:
- компонент объектного манипулятора (скрипта)
- контроллер сборки компонентов
Когда все объекты компонентов марсохода и объект RoverAssembly выбраны, в панели инспектора настройте компонент Manipulator (Script) следующим образом:
В разделе Базовые параметры взаимодействиянайдите событие On Clicked (). Щелкните значок +, чтобы добавить новое событие. Настройте событие следующим образом:
a. Назначьте объект RoverAssembly в качестве прослушивателя события On Clicked, перетащив его из Иерархия в поле None (Object).
b. В раскрывающемся списке Нет функции выберите TapToPlace>StartPlacement() для вызова этого метода при активации события.
В списке тип разрешенных манипуляций снимите флажок "Масштабирование", чтобы были включены только "Перемещение" и "Поворот".
Выберите только объект RoverAssembly и удалите компонент Stateful Interactable, если он есть. Выберите три точки справа от компонента, а затем выберите Удалить компонент.
В панели Проекта перейдите в папку Пакеты>MRTK Standard Assets>Audio>HoloLens2, чтобы найти аудиоклипы.
В области иерархии повторно выберите все объекты частей марсохода, затем в области инспектора выберите Добавить компонент, чтобы добавить компонент аудиоисточников и настроить его следующим образом:
- Назначьте звуковой клип MRTK_Scale_Start полю AudioClip
- Снимите флажок Воспроизведение при пробуждении
- Измените пространственное смешение на 1
В области иерархии разверните объект RoverAssembly > RoverModel_PlacementHints_XRay >Parts_PlacementHints, чтобы отобразить все объекты подсказок размещения, затем выберите первую часть в составе марсохода — часть RoverParts >Camera_Part, и настройте компонент контроллер сборки частей (скрипт) следующим образом:
- Назначьте объект Camera_PlacementHint полю Location To Place
Повторите шаге 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
В области иерархии выберите объект кнопки RoverExplorer >>Сброс, а затем в области инспектора настройте событие OnClicked () PressableButton следующим образом:
- Назначьте объект RoverAssembly поле None (Object)
- В раскрывающемся списке функции выберите PartAssemblyController>ResetPlacement (), чтобы задать эту функцию в качестве действия, выполняемого при активации события.
Если вы войдете в игровой режим, вы можете использовать взаимодействие вблизи или на расстоянии, чтобы поместить детали марсохода на Ровер. После того как часть близка к соответствующему указанию размещения, она прикрепится к месту и станет частью Марсохода. Чтобы сбросить размещения, можно нажать кнопку сброса:
Добавить контроль границ
В окне иерархии выберите объект RoverExplorer, а затем в окне Инспектора нажмите кнопку Добавить компонент, чтобы добавить компонент BoundsControl. снять флажок рядом с компонентом, чтобы отключить по умолчанию:
В окне проекта перейдите к папке Пакеты>пространственных манипуляций MRTK>BoundsControl>Префабы, щелкните и перетащите префаб BoundingBoxWithHandles в поле Bounds Visuals Prefab компонента Bounds Control.
В области иерархии разверните объект 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".
Дублируйте кнопку BoundsControl_Enable и переименуйте ее в BoundsControl_Disable, а затем в области инспектора настройте компонент Button Config Helper (Script) следующим образом:
- Выберите объект Frontplate > AnimatedContent > Icon > Label и измените компонент TextMeshPro на Отключить
- Настройте событие PressableButton.OnClicked(), убедившись, что все флажки в событиях сняты
Если вы войдете в режим игры и выберите Включить, чтобы включить элемент управления "Границы", вы можете использовать близкое или далекое взаимодействие для перемещения, поворота и масштабирования элемента управления "Границы", а затем выберите Отключить, чтобы отключить элемент управления "Границы" еще раз: