Размещение касанием — MRTK3

Tap to Place — это решатель, используемый для размещения игрового объекта на поверхности сетки реконструкции сцены (SR) среды вокруг пользователя. Для размещения объекта с помощью этого компонента требуется сочетание двух выделений и движение головой. Вы можете начать размещение с помощью одного выделения, использовать движение головы для управления положением объекта и поместить объект в сцену с помощью другого действия выбора.

Использование

  1. Настройте сцену.

    • Создайте сцену Unity.
    • Добавьте куб в сцену и измените масштаб на 0,2, а расположение — на (0; 0; 0,7).
  2. Присоедините размещение касанием к игровому объекту с помощью коллайдера.

    • При добавлении компонента размещения касанием будет также присоединен обработчик решателя. Размещение касанием происходит от класса Solver, для которого требуется обработчик решателя. Расположение объекта размещения касанием вычисляется относительно элемента TrackedTargetType в обработчике решателя. По умолчанию компонент Head имеет тип TrackedTargetType, т. е. при движении головой объект следует за ней, если он выбран. Также можно задать значение луча контроллера TrackedTargetType, в котором объект следует за контроллером. Первой группой свойств в инспекторе размещения касанием являются общие свойства решателя.

    Важно!

    Размещение касанием (Tap to Place) — это автономный решатель, который невозможно поставить в цепочку с другими решателями. Он не может быть помещен в цепочку, так как SolverHandler.UpdateSolvers используется для обновления расположения объекта во время его размещения.

    • Свойства размещения касанием:
      • Auto Start: если задано значение True, решатель размещения касанием начнет управлять положением игрового объекта для размещения. Объект немедленно начнется следовать за TrackedTargetType (головой или лучом контроллера). Это значение должно быть изменено перед вызовом Start() для выполнения любого действия.
      • Default Placement Distance: расстояние по умолчанию (в метрах), на которое будет помещен объект по отношению к TrackedTargetType вперед в SolverHandler. Если луч не попадает на поверхность, игровой объект будет размещен на расстоянии размещения по умолчанию.
      • Max Raycast Distance — это максимальное расстояние (в метрах) для луча, основанное на источнике TrackedTargetType. Этот луч ищет поверхность для размещения выбранного объекта.
      • UseDefaultSurfaceNormalOffset: это свойство равно TRUE по умолчанию. Это гарантирует, что размещаемый объект будет располагаться на поверхности. Если это свойство имеет значение True, то вместо любого значения, указанного для свойства SurfaceNormalOffset, будет применено стандартное смещение нормали поверхности по умолчанию. Если задано значение False, будет применено значение для SurfaceNormalOffset. Смещение нормали поверхности по умолчанию — это экстент коллайдера вдоль оси Z.
      • Surface Normal Offset — расстояние между центром игрового объекта, который нужно разместить, и нормалью поверхности, если луч достигает поверхности. Это свойство применяется к объекту только в том случае, если UseDefaultSurfaceNormalOffset имеет значение False.
      • Keep Orientation Vertical: если значение равно True, игровой объект будет находиться вертикально и на одной линии с Vector3.up.
      • Rotate According to Surface: если значение равно False, то размещаемый игровой объект не будет изменять свой поворот в зависимости от попадания по поверхности. Объект будет повернут к камере, пока IsBeingPlaced имеет значение True.
      • Magnetic Surfaces: массив объектов LayerMasks для выполнения от высшего до самого низкого приоритета. Маска первого слоя, обеспечивающая попадание луча, будет использоваться для расчетов положения.
      • Debug Enabled: если значение равно True и в редакторе Unity, нормаль попадания луча будет нарисована желтым цветом. Включенная отладка полезна, если RotateAccordingToSurface имеет значение True, так как она рисует нормаль к поверхности, что визуально объясняет, почему объект установлен в текущей ориентации.
      • On Placing Started: это событие активируется один раз при выборе игрового объекта, который нужно разместить.
      • On Placing Stopped: это событие активируется один раз при отмене выбора размещенного игрового объекта.
  3. Тестирование поведения размещения касанием в редакторе

    • Нажмите кнопку воспроизведения и удерживайте пробел, чтобы отобразить руку имитации ввода.
    • Двигайте рукой до тех пор, пока куб не станет активным, и имитируйте щелчок с помощью руки, щелкнув левой кнопкой мыши.
      • Если в сцене отсутствуют коллайдеры, объект будет следовать TrackedTargetType на определенном расстоянии Default Placement Distance.
    • Объект будет следовать за перемещением TrackedTargetType после выбора. Чтобы имитировать движение головой в редакторе, нажимайте клавиши WASD. Измените поворот головы, щелкнув и удерживая правую кнопку мыши.
    • Чтобы остановить размещение объекта, щелкните еще раз. Объект не обязательно должен находиться в фокусе при нажатии для завершения размещения. Фокус необходим только для начального щелчка, запускающего процесс размещения.