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.

Jet 3D model floating in camera image

1. Agregar un modelo 3D

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

SceneKit assets in a project

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.