最近, 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 为 VisionOS 引入了一种新的View
方法,允许你“扩展”窗口并在其两侧添加装饰物。
.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 发布,但只有少数应用程序充分利用了它的全部功能。这就是你脱颖而出的机会——使用它们并充分利用它们。不幸的是,开发人员很难找到易于访问的文档和示例。这就是我写这篇文章的原因。我希望我的技巧能帮助你让你的应用程序变得更好。