如何使用ARKit Swift将对象附加到相机位置?
我有移动的物体,我希望能够与我的玩家发生碰撞。我可以通过获取当时的当前位置/方向从我身上启动对象,但我不知道如何将一个对象附加到我身上,该对象将始终跟随我的定位。在SceneKit中,所有在场景中具有位置的对象都(附加到)一个节点。这不仅包括可见对象,还包括光源和相机。使用如何使用ARKit Swift将对象附加到相机位置?,swift,xcode,augmented-reality,arkit,Swift,Xcode,Augmented Reality,Arkit,我有移动的物体,我希望能够与我的玩家发生碰撞。我可以通过获取当时的当前位置/方向从我身上启动对象,但我不知道如何将一个对象附加到我身上,该对象将始终跟随我的定位。在SceneKit中,所有在场景中具有位置的对象都(附加到)一个节点。这不仅包括可见对象,还包括光源和相机。使用ARSCNView时,仍然有一个SceneKit摄像头,但ARKit控制其位置/方向 SceneKit节点创建一个层次:每个节点的位置(和方向等)都是相对于其父节点的。如果父节点在场景中移动,则其子节点将随之移动,以便它们保持
ARSCNView
时,仍然有一个SceneKit摄像头,但ARKit控制其位置/方向
SceneKit节点创建一个层次:每个节点的位置(和方向等)都是相对于其父节点的。如果父节点在场景中移动,则其子节点将随之移动,以便它们保持相同的父节点相对位置。因此,如果希望某个内容相对于摄影机始终保持相同的位置,则应将该内容设置为摄影机节点的子节点
即使在不自己创建摄影机的场景中(例如SceneKit和ARKit为您管理摄影机时),也可以使用视图的属性获取包含当前摄影机的节点。(注意:ARSCNView
是SCNView
的一个子类,其大多数有用的API由协议定义。)
您可能必须等待会话开始运行才能访问ARKit管理的摄像头节点 ARSCNView有一个属性“pointOfView”。可以将子节点附加到它
let ball = SCNSphere(radius: 0.02)
ballNode = SCNNode(geometry: ball)
ballNode?.position = SCNVector3Make(0, 0, -0.2)
sceneView.pointOfView?.addChildNode(ballNode!)
节点将跟随您的相机移动到任何地方。以下代码可用于获取相机的当前位置(x、y、z坐标)
let pov = sceneView.pointOfView
let position = pov?.position
let x = position?.x
let y = position?.y
let z = position?.z
你需要接受Jimi的答案,并给球一个颜色或纹理来查看它:
let ball = SCNSphere(radius: 0.02)
ball.firstMaterial?.diffuse.contents = UIColor.red
let ballNode = SCNNode(geometry: ball)
ballNode.position = SCNVector3Make(0, 0, -0.2)
self.sceneView.pointOfView?.addChildNode(ballNode)
您在ARKit上使用哪种显示技术?SceneKit?斯皮特基特?团结?等等…我使用SceneKit作为我的显示技术。如果你想将对象添加到相机的节点层次结构中,这很有用,但是如果你想将其添加到标准sceneView的节点层次结构中,那么我建议这种方法在相机前面始终有一个SCNNode:我就是无法让它工作:sceneView.pointOfView?.addChildNode(…)-我看不出什么。你需要给球一个颜色或纹理,然后你就会看到它。