根据您对期望的设置方式,可以将SceneKit用作ARKit的“后备”,特别是来自ARSCNView。
您可以轻松地创建一个3D内容体验,当在支持ARKit的设备上运行时,它可以通过AR在“真实世界”中出现,并且在完全虚拟的设置(即以3D渲染,而没有相机作为背景)时,在没有ARKit的情况下运行。
注意: ARKit支持不仅限于iOS 11,还需要A9设备。因此,您可能会想到iOS 11上较旧的硬件的回退体验,而不仅仅是iOS较旧的版本。
为此,您需要能够在运行时换出您的视图类。这意味着不创建ARSCNView故事板,而是初始化一个故事板并将其添加到代码中视图控制器的根视图中。
override func viewDidLoad() {
super.viewDidLoad()
let sceneView = ARSCNView(frame: view.bounds)
sceneView.scene = // ... set up your SceneKit scene ...
view.addSubview(sceneView)
}
Run Code Online (Sandbox Code Playgroud)
一旦执行了类似的操作,就可以将关键部分包装ARSCNView在可用的条件中,SCNView否则可用。实际上,您可能想要为此设置方便的功能...
var canUseARKit: Bool {
if #available(iOS 11.0, *) {
return ARWorldTrackingSessionConfiguration.isSupported
} else {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以条件化您的视图设置:
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)
}
Run Code Online (Sandbox Code Playgroud)
当然,此后还有更多工作要做:
但是除了这些担心之外,在其中使用SceneKit内容与在中使用SceneKit内容ARSCNView没有什么不同SCNView,因此对于其余的应用程序/游戏,您可以在AR和非AR用户体验之间共享大量代码和资产。
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |