How do you attach an object to your camera position with ARKit Swift?

前端 未结 4 1424
走了就别回头了
走了就别回头了 2021-02-02 03:08

I have moving objects which I want to have be able to collide with me the player. I have the ability to launch objects from me by getting my current position/direction at that t

相关标签:
4条回答
  • 2021-02-02 03:39

    ARSCNView has a property 'pointOfView'. You can attach a child node to it.

    let ball = SCNSphere(radius: 0.02)
    ballNode = SCNNode(geometry: ball)
    ballNode?.position = SCNVector3Make(0, 0, -0.2)
    sceneView.pointOfView?.addChildNode(ballNode!)
    

    The node will follow your camera anywhere you go.

    0 讨论(0)
  • 2021-02-02 03:42

    In SceneKit, everything that can have a position in the scene is (attached to) a node. That includes not just visible objects, but also light sources and cameras. When you use ARSCNView, there's still a SceneKit camera, but ARKit controls its position/orientation.

    SceneKit nodes create a hierarchy: every node's position (and orientation etc) are relative to its parent node. If the parent node moves within the scene, its children move along with it so that they keep the same parent-relative positions. So, if you want something to always keep the same position relative to the camera, you should make that content a child of the camera node.

    Even in scenes where you don't create a camera yourself — such as when SceneKit and ARKit manage the camera for you — you can get the node containing the current camera with the view's pointOfView property. (Note: ARSCNView is a subclass of SCNView, most of whose useful API is defined by the SCNSceneRenderer protocol.)

    You may have to wait until the session starts running to access the ARKit-managed camera node.

    0 讨论(0)
  • 2021-02-02 03:56

    Following code work for me to get the current position(x,y,z coordinates) of the camera.

        let pov = sceneView.pointOfView
        let position = pov?.position
    
        let x = position?.x
        let y = position?.y
        let z = position?.z
    
    0 讨论(0)
  • 2021-02-02 03:57

    You need to take Jimi's answer and give the ball a color or texture to see it:

    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)
    
    0 讨论(0)
提交回复
热议问题