說明
本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會
在平時開發中常用的touchesBegan方法在3D中仍然可用. 只不過在3D空間內採用了射線檢測方法來返回觸控到的物體.
當有觸控事件發生時:- 拿到使用者觸控在螢幕上的位置.
- 轉換到SCNView的座標系中.
- 當觸控點在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)
}
}
複製程式碼