gpt4 book ai didi

ios - iOS10中ARKit的替代品

转载 作者:行者123 更新时间:2023-12-01 17:20:04 25 4
gpt4 key购买 nike

我想在为 iOS10+ 设计的应用程序中包含 ARKit,如果 iOS 版本 <11,我将 ARKit 替换为 SceneKit。

不幸的是,目前似乎没有办法做到这一点?

最佳答案

根据您设定期望的方式,可以使用 SceneKit 作为 ARKit 的“后备”——具体而言,来自 ARSCNView .

您可以轻松地创建一个 3D 内容体验,当在支持 ARKit 的设备上运行时,通过 AR“在现实世界中”出现,并且在完全虚拟的设置(即,在没有摄像头馈送作为背景的情况下以 3D 呈现)时在没有 ARKit 的情况下运行。

Note: ARKit support isn't just an iOS 11 thing -- you also need an A9 device. So you might think about a fallback experience for older hardware on iOS 11, not just for older iOS versions.



为此,您需要能够在运行时更换 View 类。这意味着不创建 ARSCNView在 Storyboard 中,但初始化一个并将其添加到代码中的 View Controller 的 Root View 中。
override func viewDidLoad() {
super.viewDidLoad()
let sceneView = ARSCNView(frame: view.bounds)
sceneView.scene = // ... set up your SceneKit scene ...
view.addSubview(sceneView)
}

一旦你做了这样的事情,你可以将关键部分包装在一个使用 ARSCNView 的条件中。可用时和 SCNView除此以外。实际上,您可能想为此设置一个方便的功能...
var canUseARKit: Bool {
if #available(iOS 11.0, *) {
return ARWorldTrackingSessionConfiguration.isSupported
} else {
return false
}
}

然后你可以条件化你的 View 设置:
override func viewDidLoad() {
super.viewDidLoad()
let sceneView: SCNView
if canUseARKit {
sceneView = ARSCNView(frame: view.bounds)
} else {
sceneView = SCNView(frame: view.bounds)
}
sceneView.scene = // ... set up your SceneKit scene ...
view.addSubview(sceneView)
}

当然,在那之后还有更多工作要做:
  • 当您使用 ARKit 时,您可以“免费”获得相机控制;当您单独使用 SceneKit 时,您必须考虑将相机放置在哪里以及如何让用户控制它。 (查看 WWDC17 SceneKit session 了解有关新 iOS 11 相机控件的一些提示。)
  • 当您单独使用 SceneKit 时,您的 3D 内容定义了用户与之交互的“世界”——也就是说,您将相机等与您的内容相关联。使用 ARKit 时,您必须考虑相对于现实世界将内容放置在何处以及如何放置。

  • 但除了这些问题之外,在 ARSCNView 中使用 SceneKit 内容与使用 SCNView 中的 SceneKit 内容没有什么不同,因此对于您的应用程序/游戏的其余部分,您可以在 AR 和非 AR 用户体验之间共享大量代码和 Assets 。

    关于ios - iOS10中ARKit的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45332261/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com