Chapter 8: Adding Objects to Your World

大綱

上一章學會了如何偵測平面,這章就是學如何擺放3D物件到真實世界中。

摘要

Getting started

先針對session的中斷情況進行預先的處理。

extension PortalViewController: ARSessionObserver {

  func session(_ session: ARSession, didFailWithError error: Error) {
    guard let label = self.sessionStateLabel else { return }
    showMessage(error.localizedDescription, label: label, seconds: 3)
  }

  func sessionWasInterrupted(_ session: ARSession) {
    guard let label = self.sessionStateLabel else { return }
    showMessage("Session interrupted", label: label, seconds: 3)
  }

  func sessionInterruptionEnded(_ session: ARSession) {
    guard let label = self.sessionStateLabel else { return }
    showMessage("Session resumed", label: label, seconds: 3)

    DispatchQueue.main.async {
      self.removeAllNodes()
      self.resetLabels()
    }

    runSession()
  }

}

SIMDarrow-up-right

Hit testing

再來要準備置放物件到偵測到的平面。

當使用者透過手機螢幕控制虛擬世界的物體時,要如何轉化使用者在螢幕按壓的2D觸碰點到虛擬世界的3D座標系統。就是透過Hit testing, 這幾乎是ARKit裡面必用的基本招術。

Adding crosshairs

在螢幕的中心點增加一個crosshairs(十字線),主要讓我們可以透過手機畫面來確認螢幕的中心的hit test是否正常。

當螢幕中心落到某個虛擬平面上時,會改變中心UI的crosshairs顏色。

Adding a state machine

接下來,就是這個app本身的邏輯。

當點到偵測的平面時,我們會置放一個白色立方體到平面上,並移除剛剛偵測到平面。透過額外設置的一些flag進行確認。

SIMDarrow-up-right

Last updated