Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何根据设备的中心在按下按钮的位置向ARKit场景添加节点?_Swift_Xcode_Arkit - Fatal编程技术网

Swift 如何根据设备的中心在按下按钮的位置向ARKit场景添加节点?

Swift 如何根据设备的中心在按下按钮的位置向ARKit场景添加节点?,swift,xcode,arkit,Swift,Xcode,Arkit,完全敏捷的初学者努力添加节点到场景点击一个按钮 我知道我可以使用点击手势获得点击坐标,执行点击测试,然后在点击的3D空间中放置一个对象。然而,我想在设备屏幕的中央显示一个球体或十字线,当点击屏幕底部的按钮时,也会有同样的行为,即获得相同的信息,点击手势会给出相同的信息。(至少我认为这是我在这里需要做的,我不确定。) 加载场景后,我向摄影机视点的子节点添加一个小球体,如下所示: sphereNode = SCNNode(geometry: SCNSphere(radius: 0.020)) sph

完全敏捷的初学者努力添加节点到场景点击一个按钮

我知道我可以使用点击手势获得点击坐标,执行点击测试,然后在点击的3D空间中放置一个对象。然而,我想在设备屏幕的中央显示一个球体或十字线,当点击屏幕底部的按钮时,也会有同样的行为,即获得相同的信息,点击手势会给出相同的信息。(至少我认为这是我在这里需要做的,我不确定。)

加载场景后,我向摄影机视点的子节点添加一个小球体,如下所示:

sphereNode = SCNNode(geometry: SCNSphere(radius: 0.020))
sphereNode?.position = SCNVector3Make(0, 0, -2)
sceneView.pointOfView?.addChildNode(sphereNode!)
这会将球体放置在屏幕的中心,稍微在相机前面。当我把设备移动到房间周围时,球体像预期的那样停留在中间。我希望能够点击一个按钮,然后获得点击手势提供的信息,以便执行点击测试,并在场景中该位置放置一个新球体。除非有更好的方法

我正在寻找的行为与iOS测量应用程序非常相似。测量点始终位于屏幕中心,然后轻触“添加”按钮添加新点

你的使用方法是正确的。我认为,来自
ARSession
的链接是最直接的

由于您希望从屏幕中央点击test,而
hitTest(u:types:)
所需的
CGPoint
参数位于标准化坐标空间中,从(0.0,0.0)到(1.0,1.0),因此只需通过(0.5,0.5)

下面是一些代码:

func buttonAction() {
  guard let currentFrame = session.currentFrame,
    let hitTest = currentFrame.hitTest(CGPoint(x: 0.5, y: 0.5), types: .featurePoint).last else {
    return
  }
  let anchor = ARAnchor(transform: hitTest.worldTransform)
  session.add(anchor: anchor)
}
添加锚定后,可以使用
ARSCNViewDelegate
的方法添加节点。基本上,在向会话添加锚点时将调用此方法

顺便说一下,由于您似乎正在使用,您可以像这样访问AR会话
sceneView.session