找到了解决方案!我在评论中添加了一些解释。
if (movedObject != nil) { //Normalized-depth coordinate matching the plane I want let projectedOrigin = sceneView.projectPoint((movedObject?.position)!) //Location of the finger in the view on a 2D plane let location2D = recognizer.location(in: sceneView) //Location of the finger in a 3D vector let location3D = SCNVector3Make(Float(location2D.x), Float(location2D.y), projectedOrigin.z) //Unprojects a point from the 2D pixel coordinate system of the renderer to the 3D world coordinate system of the scene let realLocation3D = sceneView.unprojectPoint(location3D) if movedObject?.position != nil { //only updating Y axis position movedObject?.position = SCNVector3Make((movedObject?.position.x)!, realLocation3D.y, (movedObject?.position.z)!) }}


