Недавно Apple выпустила Vision Pro, и мне посчастливилось стать его счастливым обладателем. С тех пор я активно занимался разработкой своего приложения и изучением различных приложений и тенденций в Vision Pro App Store.
Мое внимание привлекло то, что новые приложения выходят каждый день, но лишь немногие из них хорошо подходят для погружения в виртуальную реальность. Я думаю, что многим разработчикам сложно найти документацию и примеры функций Vision Pro. Однако использование возможностей Vision Pro может выделить ваше приложение и предоставить пользователям расширенные возможности.
В этой статье я поделюсь некоторыми советами и приемами, которые я обнаружил при создании своего приложения. Эти советы не только помогут вашему приложению выделиться, но также обеспечат его плавную интеграцию и удобство работы с VisionOS.
Наверняка вы замечали, что при просмотре видео или фото фон за окном затемняется, в настройках это называется "автозатемнение". Чтобы получить тот же эффект, вам нужно использовать .preferredSurroundingsEffect(.systemDark)
в вашем представлении, и тогда пространство вокруг пользователя потемнеет, а ваше окно останется ярким, это поможет сохранить фокус на содержимом.
При просмотре видео или контента вы хотите, чтобы пользователь не отвлекался и создавал эффект парящего в воздухе окна, для этого Apple предоставила нам возможность скрыть нижнюю панель окна, которая используется для перемещения или закрытия. текущее окно. С помощью .persistentSystemOverlays(.hidden)
вы можете скрыть эту панель управления в своем окне, она исчезнет с анимацией по умолчанию и появится только тогда, когда пользователь взаимодействует с окном.
Если вы откроете стандартное приложение Apple TV и включите фильм, вы заметите, что окно фильма имеет отражение, которое меняется с каждым кадром, создавая более захватывающий эффект. Чтобы получить эффект свечения вокруг вашего видео, вам нужно использовать VideoPlayerComponent
и включить isPassthroughTintingEnabled
, тогда эффект будет такой же, как в Apple TV или HBO Max. Вот что говорится в документации:
Это делается для того, чтобы во время воспроизведения видео включить сквозную тонировку, которая отображается вокруг видео, беря средний цвет кадра и окрашивая проходную часть этим цветом, чтобы подчеркнуть видео.
Возможно, вы захотите запретить пользователю изменять размер окна, есть способ сделать это:
onAppear { guard let windowScene = UIApplication.shared.connectedScenes.first as?UIWindowScene else { return } windowScene.requestGeometryUpdate(.Vision(resizingRestrictions: UIWindowScene.ResizingRestrictions.none)) }
В этом методе также можно указать дополнительные настройки размера. Полная сигнатура метода выглядит так:
windowScene.requestGeometryUpdate(.Vision(size:, minimumSize:, maximumSize:, resizingRestrictions:))
Если ваше приложение использует иммерсивное пространство и вы не хотите, чтобы пользователь видел свои руки, или вы хотите заменить их виртуальными руками, как это сделано в AmazeVR, то вам нужно использовать .upperLimbVisibility(.hidden)
Я уверен, что вы видели в приложениях VisionOS боковые панели, похожие на TabBars
. Apple представила новый метод View
для VisionOS, который позволяет «расширять» окно и добавлять орнаменты по обе стороны от него.
.ornament( visibility: .visible, attachmentAnchor: .scene(.bottom), contentAlignment: .center ) { HStack { Button("Play", systemImage: "play.fill") { } Button("Stop", systemImage: "stop.fill") { } } .labelStyle(.iconOnly) .padding(.all) .glassBackgroundEffect() }
Интересный факт, который мне удалось проверить экспериментально, заключается в том, что методы CMMotionManager работают только в иммерсивном пространстве, а не в обычном окне.
VisionOS предоставляет множество инструментов для создания иммерсивных приложений, которые переносят пользователей в виртуальный мир и заставляют их чувствовать себя его частью. Хотя для Vision Pro выпускается все больше и больше приложений, лишь немногие используют весь спектр его функций. Вот тут-то и появляется ваш шанс отличиться — используйте его и воспользуйтесь преимуществом. К сожалению, разработчикам сложно найти легкодоступную документацию и примеры. Вот почему я пишу эту статью. Надеюсь, мои советы помогут вам улучшить ваше приложение.