簡體   English   中英

替換iOS10中的ARKit

[英]Replacement for ARKit in iOS10

我想將ARKit包含在專為iOS10 +設計的應用程序中,如果iOS版本低於11,我將用SceneKit替換ARKit。

不幸的是,似乎目前尚無辦法?

根據您如何設置您的期望,也可以使用SceneKit從ARKit一個“回退” -具體而言,從ARSCNView

您可以輕松地創建一個3D內容體驗,當在支持ARKit的設備上運行時,它可以通過AR在“真實世界”中出現,並且在完全虛擬的設置(即以3D渲染,而沒有相機作為背景)時,在沒有ARKit的情況下運行。

注意: ARKit支持不僅限於iOS 11,還需要A9設備。 因此,您可能會想到iOS 11上較舊的硬件的回退體驗,而不僅僅是iOS較舊的版本。

為此,您需要能夠在運行時換出您的視圖類。 這意味着不是在情節ARSCNView中創建ARSCNView ,而是對其進行初始化並將其添加到代碼中視圖控制器的根視圖中。

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
    }
}

然后,您可以條件化您的視圖設置:

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時,您必須考慮將相機放置在何處以及如何讓用戶控制它。 (有關新的iOS 11相機控件,請查看WWDC17 SceneKit會話以獲取一些提示。)
  • 當您單獨使用SceneKit時,您的3D內容將定義用戶與之交互的“世界”-即,您將相機等與您的內容相關聯。 使用ARKit時,您必須考慮相對於現實世界放置內容的位置和方式。

但是,除了這些顧慮,與內SceneKit內容合作ARSCNView無異於在SceneKit內容的工作不同SCNView ,所以對你的應用程序/游戲的其他部分可以共享大量的AR和非AR用戶體驗之間的代碼和資源。

您可以使用以下語法有條件地選擇包括功能:

if #available(iOS 11.0, *) {
    // Use ARKit
} else {
   // Use SceneKit
}

像任何框架一樣,ARKit存在於存在它的系統版本中,並且沒有其他系統版本中。 ARKit存在於iOS 11中,而不存在於iOS 10或更低版本中。 iOS 10用戶永遠無法使用ARKit(無需升級到iOS 11)。

(即使那樣,ARKit也只能在運行iOS 11的一部分設備上使用,因為它的功能高度依賴於硬件。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM