Introducción a ARKit en Xamarin.iOS
Realidad aumentada para iOS 11
ARKit habilita una amplia variedad de aplicaciones y juegos de realidad aumentada
Introducción a ARKit
Para empezar a trabajar con la realidad aumentada, las instrucciones siguientes le ayudarán a seguir el proceso de una aplicación sencilla: colocar un modelo 3D y permitir que ARKit mantenga el modelo bien situado con su funcionalidad de seguimiento.
1. Agregar un modelo 3D
Los recursos deben agregarse al proyecto con la acción de compilación SceneKitAsset.
2. Configurar la vista
En el método ViewDidLoad
del controlador de vista, cargue el recurso de escena y establezca la propiedad Scene
en la vista:
ARSCNView SceneView = (View as ARSCNView);
// Create a new scene
var scene = SCNScene.FromFile("art.scnassets/ship");
// Set the scene to the view
SceneView.Scene = scene;
3. Implementar opcionalmente un delegado de sesión
Aunque no es necesario para casos sencillos, la implementación de un delegado de sesión puede ser útil para depurar el estado de la sesión de ARKit (y en aplicaciones reales, proporcionar comentarios al usuario). Cree un delegado simple con el código siguiente:
public class SessionDelegate : ARSessionDelegate
{
public SessionDelegate() {}
public override void CameraDidChangeTrackingState(ARSession session, ARCamera camera)
{
Console.WriteLine("{0} {1}", camera.TrackingState, camera.TrackingStateReason);
}
}
Asigne el delegado en el método ViewDidLoad
:
// Track changes to the session
SceneView.Session.Delegate = new SessionDelegate();
4. Posicionar el modelo 3D en un entorno real
En ViewWillAppear
, el código siguiente establece una sesión de ARKit y define la posición del modelo 3D en el espacio con respecto a la cámara del dispositivo:
// Create a session configuration
var configuration = new ARWorldTrackingConfiguration {
PlaneDetection = ARPlaneDetection.Horizontal,
LightEstimationEnabled = true
};
// Run the view's session
SceneView.Session.Run(configuration, ARSessionRunOptions.ResetTracking);
// Find the ship and position it just in front of the camera
var ship = SceneView.Scene.RootNode.FindChildNode("ship", true);
ship.Position = new SCNVector3(2f, -2f, -9f);
Cada vez que se ejecute o reanude la aplicación, el modelo 3D se posicionará delante de la cámara. Una vez que se haya posicionado el modelo, mueva la cámara y observe cómo ARKit mantiene el modelo posicionado.
5. Pausar la sesión de realidad aumentada
Se recomienda pausar la sesión de ARKit cuando el controlador de vista no está visible (en el método ViewWillDisappear
:
SceneView.Session.Pause();
Resumen
El código anterior da como resultado una aplicación de ARKit sencilla. En los ejemplos más complejos se espera que el controlador de vista que hospeda la sesión de realidad aumentada implemente IARSCNViewDelegate
y que se implementen métodos adicionales.
ARKit proporciona muchas características más sofisticadas, como el seguimiento de superficies y la interacción del usuario.