Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
如何使用ARKit Swift将对象附加到相机位置?_Swift_Xcode_Augmented Reality_Arkit - Fatal编程技术网

如何使用ARKit Swift将对象附加到相机位置?

如何使用ARKit Swift将对象附加到相机位置?,swift,xcode,augmented-reality,arkit,Swift,Xcode,Augmented Reality,Arkit,我有移动的物体,我希望能够与我的玩家发生碰撞。我可以通过获取当时的当前位置/方向从我身上启动对象,但我不知道如何将一个对象附加到我身上,该对象将始终跟随我的定位。在SceneKit中,所有在场景中具有位置的对象都(附加到)一个节点。这不仅包括可见对象,还包括光源和相机。使用ARSCNView时,仍然有一个SceneKit摄像头,但ARKit控制其位置/方向 SceneKit节点创建一个层次:每个节点的位置(和方向等)都是相对于其父节点的。如果父节点在场景中移动,则其子节点将随之移动,以便它们保持

我有移动的物体,我希望能够与我的玩家发生碰撞。我可以通过获取当时的当前位置/方向从我身上启动对象,但我不知道如何将一个对象附加到我身上,该对象将始终跟随我的定位。

在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(…)-我看不出什么。你需要给球一个颜色或纹理,然后你就会看到它。