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