[SceneKit專題]5-3D空間的觸控事件

蘋果API搬運工發表於2017-12-25

說明

本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會

此書對應的程式碼地址

SceneKit系列文章目錄

在平時開發中常用的touchesBegan方法在3D中仍然可用. 只不過在3D空間內採用了射線檢測方法來返回觸控到的物體.

QQ20170404-104513@2x.png
當有觸控事件發生時:

  1. 拿到使用者觸控在螢幕上的位置.
  2. 轉換到SCNView的座標系中.
  3. 當觸控點在SCNView上時,發射一個射線,返回與該射線相交的一系列物體.
override func touchesBegan(touches: Set<UITouch>, withEvent event:
UIEvent?) {
// 1 拿到觸控物件
  let touch = touches.first!
  // 2 轉換座標系
  let location = touch.locationInView(scnView)
  // 3 執行hitTest,發射射線,返回相交的物體
  let hitResults = scnView.hitTest(location, options: nil)
  // 4 
  if hitResults.count > 0 {
// 5 取出最近的物體
    let result = hitResults.first!
    // 6 處理該節點
    handleTouchFor(result.node)
}
}
複製程式碼

相關文章