Quiero mostrar la experiencia de Reality Composer en una imagen, sin embargo, no quiero que los objetos AR se oculten cuando pierdo el rastro de la imagen, así que creé un AnchorEntity y obtuve la traducción de ImageAnchor del método de delegado de anclas didAdd de la siguiente manera :
func session(_ session: ARSession, didAdd anchors: [ARAnchor]) { // If we already added the content to render, ignore if rootAnchor != nil { return } // Make sure we are adding to an image anchor. Assuming only // one image anchor in the scene for brevity. guard anchors[0] is ARImageAnchor else { return } // Create the entity to render, could load from your experience file here // this will render at the center of the matched image rootAnchor = AnchorEntity(world: [0,0,0]) guard let boxAnchor = boxAnchor else { return } rootAnchor!.addChild(boxAnchor.tap!) arView.scene.addAnchor(rootAnchor!) }Como puede ver aquí, estoy obteniendo la entidad de toque del archivo Reality Composer para volver a insertarla en la entidad Anchor.
Mi problema ahora es que perdí el comportamiento de mi archivo Reality Composer, esta entidad tenía algunos comportamientos como cuando tocas voltea o se acerca a la cámara. Al perder comportamientos, estoy perdiendo todo el sentido de Reality Composer.
Ahora mi pregunta es, ¿cómo puedo recuperar los comportamientos del archivo de realidad? Pensé en anclar toda la experiencia en lugar de una entidad, así que en lugar de rootAnchor!.addChild(boxAnchor.tap!) sería rootAnchor!.addChild(boxAnchor) , pero luego el método de actualización delagate no actualiza la posición de las entidades en la escena, aquí está el código:
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) { guard let rootAnchor = rootAnchor else { return } // Code is assuming you only have one image anchor for brevity guard let imageAnchor = anchors[0] as? ARImageAnchor else { return } if !imageAnchor.isTracked { return } rootAnchor.transform = Transform(matrix: imageAnchor.transform) } Básicamente rootAnchor.transform = Transform(matrix: imageAnchor.transform) no funciona si el anclaje raíz es toda la escena.
Entonces, ¿cómo se puede preservar el comportamiento mientras se actualiza el ancla de acuerdo con la imagen?
Gracias
El problema es: en RealityKit 2.0 no tenemos acceso a los comportamientos de Reality Composer (excepto la notification ), y el tipo de anclaje (sabemos que es AnchorEntity(.image)) que asignó en Reality Composer funciona de la misma manera que la imagen de ARKit. ancla en ARImageTrackingConfig , es decir, utiliza seguimiento local en lugar de seguimiento global. En otras palabras, difícilmente obtienes tal escenario con la escena actual de Reality Composer.
Pruebe ARKit y su ARWorldTrackingConfig para el seguimiento de imágenes. Todos los "comportamientos" deben recrearse desde cero en RealityKit o en SceneKit.