Introducción a ARKit en Xamarin.iOS

Realidad aumentada para iOS 11

ARKit habilita una amplia variedad de aplicaciones y juegos de realidad aumentada

Tareas iniciales con ARKit

Para empezar a trabajar con la realidad aumentada, las instrucciones siguientes le ayudarán a recorrer una aplicación sencilla: colocar un modelo 3D y permitir que ARKit mantenga el modelo en su lugar con su funcionalidad de seguimiento.

Imagen de modelo 3D de Jet flotante en la cámara

1. Agregar un modelo 3D

Los recursos se deben agregar al proyecto con la acción de compilación SceneKitAsset.

Recursos de SceneKit en un proyecto

2. Configuración de la vista

En el método del controlador de ViewDidLoad vista, cargue el recurso de escena y establezca la Scene propiedad 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. Opcionalmente, implemente 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, proporcionando 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 en el ViewDidLoad método :

// Track changes to the session
SceneView.Session.Delegate = new SessionDelegate();

4. Posición del modelo 3D en el mundo

En , el código siguiente establece una sesión de ARKit y establece la posición del modelo 3D en el espacio con respecto a la cámara ViewWillAppear 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 colocará delante de la cámara. Una vez que se coloca el modelo, mueva la cámara y observe cómo ARKit mantiene el modelo posicionado.

5. Pausar la sesión de realidad aumentada

Es una buena práctica pausar la sesión de ARKit cuando el controlador de vista no está visible (en el ViewWillDisappear método :

SceneView.Session.Pause();

Resumen

El código anterior da como resultado una aplicación ARKit sencilla. Los ejemplos más complejos esperarían que el controlador de vista que hospeda la sesión de realidad aumentada implementara y se IARSCNViewDelegate implementarían métodos adicionales.

ARKit proporciona muchas características más sofisticadas, como el seguimiento de la superficie y la interacción del usuario.