paint-brush
VisionOS 开发:构建 Apple Vision Pro 应用程序的技巧和窍门经过@dvaluev
2,701 讀數
2,701 讀數

VisionOS 开发:构建 Apple Vision Pro 应用程序的技巧和窍门

经过 Dmitrii Valuev4m2024/04/15
Read on Terminal Reader

太長; 讀書

Vision Pro 是 Apple 虚拟现实操作系统的新版本。它允许用户以更身临其境的方式与虚拟世界互动。以下是一些提示和技巧,可帮助您制作自己的应用程序。使用这些技巧,您的应用程序将与 VisionOS 的其他部分截然不同。
featured image - VisionOS 开发:构建 Apple Vision Pro 应用程序的技巧和窍门
Dmitrii Valuev HackerNoon profile picture
0-item
1-item
2-item
3-item


最近, 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)


.upperLimbVisibility(.hidden)


        .upperLimbVisibility(.visible)


装饰品

我相信你已经在 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 发布,但只有少数应用程序充分利用了它的全部功能。这就是你脱颖而出的机会——使用它们并充分利用它们。不幸的是,开发人员很难找到易于访问的文档和示例。这就是我写这篇文章的原因。我希望我的技巧能帮助你让你的应用程序变得更好。