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.
Réponses
Trop de publicités?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.
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)