Realityui - это коллекция коммунальных услуг и объектов пользовательского интерфейса для RealityKit. Объекты пользовательского интерфейса, включенные в реальность, стремятся предложить знакомые стандарты пользовательского интерфейса, но в 3D настройке для дополненной и виртуальной реальности через RealityKit.
Realityui также имеет коллекцию компонентов для взаимодействия с любым объектом через взаимодействие с прикосновением или перетаскиванием.



Добавьте URL этого репозитория в свой проект Xcode 11+ в соответствии с Project > Swift Packages .
https://github.com/maxxfrazer/RealityUI.git
Добавьте import RealityUI в верхнюю часть вашего Swift File, чтобы запустить.
Все компоненты, используемые в реальности, должны быть зарегистрированы до того, как они будут использоваться, просто называйте RealityUI.registerComponents() в любом месте вашего приложения, прежде чем какие -либо классы, начиная с RUI будут инициализированы, чтобы избежать проблем с этим. Для получения дополнительной информации о том, что подразумевается под регистрацией компонентов, см. Документацию Apple здесь.
При VisionoS жесты могут быть включены на реальность, используя модификаторы View/addRUIDragGesture() или View/addRUITapGesture() или путем добавления жестов непосредственно с .gesture(RUIDragGesture()) или .gesture(RUITapGesture()) . RealityView может выглядеть примерно так:
RealityView { content in
let swtch = RUISwitch ( )
swtch . scale = . init ( repeating : 0.1 )
content . add ( swtch )
} . addRUIDragGesture ( )Приведенный выше фрагмент добавляет интерактивный переключатель/переключатель к сцене.
Этот жест работает для любого объекта с ruidragcomponent, например:
RealityView { content in
let movable = try ! await ModelEntity ( named : " toy_biplane " )
movable . generateCollisionShapes ( recursive : false )
movable . components . set ( RUIDragComponent ( type : . move ( nil ) ) )
movable . components . set ( InputTargetComponent ( ) )
content . add ( movable )
} . addRUIDragGesture ( ) 
Включение жестов RealityUI может быть задействовано ARView называя RealityUI.enableGestures(.all, on: ARView)
Ruislider, Ruiswitch, Ruistepper и Ruibutton - все используют RUIDragComponent , который требует .ruiDrag . Если вы добавляете элементы, которые используют компонент RUITapComponent , вы можете использовать Gesture .tap . Я бы просто порекомендовал использовать .all Все при включении жестов, так как они неизбежно будут двигаться по мере развития реальности.
RealityUI.enableGestures(.all, on: arView)
По умолчанию все сущности реальности довольно велики. Это используется для стандартизации размеров, чтобы вы всегда знали, чего ожидать. Например, все большие пальцы пользовательского интерфейса представляют собой сферы диаметром 1 метра, который составляет 1 единицу в реальности, ± любые корректировки накладки. Все объекты реальности сталкиваются с [0, 0, -1] по умолчанию. Чтобы они указывали .look(at: .zero, from: [0, 0, 1]) пользовательскую камеру .look(at:,from:,relativeTo:) или .zero Или, если вы хотите, чтобы он развернулся сразу же, если вы позиционировали его на [0, 0, -1] , установите ориентацию на simd_quatf(angle: .pi, axis: [0, 1, 0]) . Использование метода .look () работает здесь, установив значение at: значение для направления, в котором следует использовать кнопку.
Ruiswitch - это 3D -переключатель с включенным и выключенным состоянием. Ограничивающее окно по умолчанию составляет 2x1x1m

Более подробная информация
Ruistepper используется для увеличения или уменьшения значения. Ограничение по умолчанию - 2x1x0.25m

Более подробная информация
Интерактивный трек для представления интерполированного значения. Ограничивающее окно по умолчанию составляет 10x1x1m, включая большой палец.

Более подробная информация
Ruibutton используется для инициирования указанного действия. Действие здесь будет запускаться только в том случае, если жест начнется на кнопке, а также заканчивается на одной кнопке. Это похоже на событие Uicontrol TouchPinside. Кнопка по умолчанию, ограничивающая кнопку, прежде чем удручать кнопку в основание [1, 1, 0.3]

Более подробная информация
Все объекты управления реальностью используют пользовательские жесты, которые не являются стандартными в реальности, но некоторые из них были изолированы, чтобы любой мог использовать их для манипулирования своей собственной сценой RealityKit.
Перетащите объекты в любом месте в пространстве с 3 градусами свободы с Ruidragcomponent, используя тип .move.

Этот тип имеет дополнительное ограничение, чтобы исправить движение в рамках определенных критериев:
Ограничение ящика : ограничивает движение в указанном BoundingBox , обеспечивая определенную область, где сущность может перемещаться.
Ограничение точек : ограничение перемещения на набор предопределенных точек, представленных как массив SIMD3<Float> .
Ограничение зажима : использует пользовательскую функцию зажима для управления движением. Эта функция принимает SIMD3<Float> в качестве входного и возвращает модифицированный SIMD3<Float> чтобы определить новую позицию.
Разблокируйте способность вращать реалитационную сущность только одним пальцем.

Более подробная информация
Создайте объект в своей сцене RealityKit с действием, и он будет автоматически подбирать всякий раз, когда пользователь нажимает на него!
Нет GIF для этого, но проверьте RuitApComponent, чтобы увидеть, как добавить это в сущность в вашем приложении.
Если вы вместо этого хотели использовать что -то похожее на Tap «Touch Up Inside», вы можете использовать ruidragcomponenttype/click.

Не так много анимаций, добавленных по умолчанию в RealityKit, особенно ни один из них, которые вы можете повторить. Смотрите страницу вики о том, как использовать эти анимации.
Легко прокрутите сущность вокруг оси, используя руиспин.
Более подробная информация
Встряхните сущность, чтобы привлечь внимание, или сигнал что -то было неверным.
Более подробная информация
Уже можно поместить текст в RealityKit, но я чувствовал, что это нужно немного обновления.
С помощью Ruitext вы можете легко создать сущность с указанным текстом, размещенным в центре ограничивающей коробки в середине вашей сущности.

Более подробная информация
Более подробную информацию обо всем, представленном в этом Swift Package в документации.
Также см. Пример проекта для iOS в этом репозитории.