SceneKit_高級05 檢測手勢點擊到節點

SceneKit_入門01_旋轉人物
SceneKit_入門02_如何創建工程
SceneKit_入門03_節點
SceneKit_入門04_燈光
SceneKit_入門05_照相機
SceneKit_入門06_行為動畫
SceneKit_入門07_幾何體
SceneKit_入門08_材質
SceneKit_入門09_物理身體
SceneKit_入門10_物理世界
SceneKit_入門11_粒子系統
SceneKit_入門12_物理行為
SceneKit_入門13_骨骼動畫
SceneKit_中級01_模型之間的過渡動畫
SceneKit_中級02_SCNView 詳細講解
SceneKit_中級03_切換照相機視角
SceneKit_中級04_約束的使用
SceneKit_中級05_力的使用
SceneKit_中級06_場景的切換
SceneKit_中級07_動態修改屬性
SceneKit_中級08_陰影詳解
SceneKit_中級09_碰撞檢測
SceneKit_中級10_濾鏡效果制作
SceneKit_中級11_動畫事件
SceneKit_高級01_GLSL
SceneKit_高級02_粒子系統深入研究
SceneKit_高級03_自定義力
SceneKit_高級04_自定義場景過渡效果
SceneKit_高級05 檢測手勢點擊到節點
SceneKit_高級06_加載頂點、紋理、法線坐標
SceneKit_高級07_SCNProgram用法探究
SceneKit_高級08_天空盒子制作
SceneKit_高級09_霧效果
SceneKit_大神01_掉落的文字
SceneKit_大神02_彈幕來襲
SceneKit_大神03_navigationbar上的3D文字

讓學習成為一種習慣

先認識一個方法,這個方法在SCNView 里面

  public func hitTest(_ point: CGPoint, options: [SCNHitTestOption : Any]? = nil) -> [SCNHitTestResult]

當我們手點擊屏幕時,要知道我們都點到了那些節點,我們應該怎么處理呢?

首先我們添加一個手勢到視圖中去

let tap = UITapGestureRecognizer(target: self, action: #selector(tapHandle(gesture:)))
scnView.addGestureRecognizer(tap)

然后,我們獲取點擊到的第一個節點

func tapHandle(gesture:UITapGestureRecognizer){
    let results:[SCNHitTestResult] = (self.scnView?.hitTest(gesture.location(ofTouch: 0, in: self.scnView), options: nil))!
    guard let firstNode  = results.first else{
        return
    }
    // 點擊到的節點
    print(firstNode.node)
}
  • 認識類SCNHitTestResult
open class SCNHitTestResult : NSObject {


/// 擊中的幾點
open var node: SCNNode { get }

/// 擊中的幾何體索引
open var geometryIndex: Int { get }

/// 擊中的面的索引
open var faceIndex: Int { get }

 /// 擊中的本地坐標系統
open var localCoordinates: SCNVector3 { get }


 /// 擊中的世界坐標系統
open var worldCoordinates: SCNVector3 { get }


/// 擊中節點的本地法線坐標
open var localNormal: SCNVector3 { get }


/// 擊中的世界坐標系統的法線坐標
open var worldNormal: SCNVector3 { get }


/*! World transform of the node intersected. */
open var modelTransform: SCNMatrix4 { get }


/*! The bone node hit. Only available if the node hit has a SCNSkinner attached. */
@available(iOS 10.0, *)
open var boneNode: SCNNode { get }


/*!
 @method textureCoordinatesWithMappingChannel:
 @abstract Returns the texture coordinates at the point of intersection, for a given mapping channel.
 @param channel The texture coordinates source index of the geometry to use. The channel must exists on the geometry otherwise {0,0} will be returned.
 */
open func textureCoordinates(withMappingChannel channel: Int) -> CGPoint
}

我們看出來,通過這個方法可以獲取的信息還是蠻多的,gei'qu

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容