5 votes

Comment attacher un objet à la position de votre caméra avec ARKit Swift ?

J'ai des objets mobiles que je veux faire entrer en collision avec moi, le joueur. J'ai la possibilité de lancer des objets à partir de moi en obtenant ma position/direction actuelle à ce moment-là, mais je ne comprends pas comment attacher un objet à moi qui suivra mon positionnement à tout moment.

18voto

rickster Points 19870

Dans SceneKit, tout ce qui peut avoir une position dans la scène est (attaché à) un nœud. Cela inclut non seulement les objets visibles, mais aussi les sources de lumière et les caméras. Lorsque vous utilisez ARSCNView Il y a toujours une caméra SceneKit, mais ARKit contrôle sa position et son orientation.

Les nœuds SceneKit créent une hiérarchie : la position (et l'orientation, etc.) de chaque nœud est relative à son nœud parent. Si le nœud parent se déplace dans la scène, ses enfants se déplacent en même temps que lui, de sorte qu'ils conservent les mêmes positions relatives au parent. Ainsi, si vous souhaitez que quelque chose garde toujours la même position par rapport à la caméra, vous devez faire de ce contenu un enfant du nœud caméra.

Même dans les scènes où vous ne créez pas de caméra vous-même - comme lorsque SceneKit et ARKit gèrent la caméra pour vous - vous pouvez obtenir le nœud contenant la caméra actuelle à l'aide de la fonction pointOfView propriété. (Remarque : ARSCNView est une sous-classe de SCNView dont la majeure partie de l'API utile est définie par la norme SCNSceneRenderer protocole.)

Il se peut que vous deviez attendre que la session commence à s'exécuter pour accéder au nœud de caméra géré par ARKit.

9voto

Joo Soo Points 210

ARSCNView a pour propriété 'pointOfView'. Vous pouvez lui attacher un noeud enfant.

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

Le nœud suivra votre caméra où que vous alliez.

1voto

Ummar Ahmed Points 37

Le code suivant me permet d'obtenir la position actuelle (coordonnées x,y,z) de la caméra.

    let pov = sceneView.pointOfView
    let position = pov?.position

    let x = position?.x
    let y = position?.y
    let z = position?.z

0voto

jeffslofish Points 173

Il faut s'inspirer de la réponse de Jimi et donner une couleur ou une texture à la balle pour la voir :

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X