Introduzione ad ARKit in Xamarin.iOS

Realtà aumentata per iOS 11

ARKit consente un'ampia gamma di applicazioni e giochi di realtà aumentata

Introduzione ad ARKit

Per iniziare a usare la realtà aumentata, le istruzioni seguenti illustrano una semplice applicazione: posizionare un modello 3D e consentire ad ARKit di mantenere il modello sul posto con la relativa funzionalità di rilevamento.

Jet 3D model floating in camera image

1. Aggiungere un modello 3D

Gli asset devono essere aggiunti al progetto con l'azione di compilazione SceneKitAsset .

SceneKit assets in a project

2. Configurare la visualizzazione

Nel metodo del controller di ViewDidLoad visualizzazione caricare l'asset della scena e impostare la Scene proprietà nella visualizzazione:

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. Facoltativamente, implementare un delegato di sessione

Sebbene non sia necessario per casi semplici, l'implementazione di un delegato di sessione può essere utile per il debug dello stato della sessione ARKit (e nelle applicazioni reali, fornendo feedback all'utente). Creare un delegato semplice usando il codice seguente:

public class SessionDelegate : ARSessionDelegate
{
  public SessionDelegate() {}
  public override void CameraDidChangeTrackingState(ARSession session, ARCamera camera)
  {
    Console.WriteLine("{0} {1}", camera.TrackingState, camera.TrackingStateReason);
  }
}

Assegnare il delegato in nel ViewDidLoad metodo :

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

4. Posizionare il modello 3D nel mondo

In ViewWillAppearil codice seguente stabilisce una sessione ARKit e imposta la posizione del modello 3D nello spazio rispetto alla fotocamera 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);

Ogni volta che l'applicazione viene eseguita o ripresa, il modello 3D verrà posizionato davanti alla fotocamera. Una volta posizionato il modello, spostare la fotocamera e osservare come ARKit mantiene il modello posizionato.

5. Sospendere la sessione di realtà aumentata

È consigliabile sospendere la sessione ARKit quando il controller di visualizzazione non è visibile (nel ViewWillDisappear metodo :

SceneView.Session.Pause();

Riepilogo

Il codice precedente genera una semplice applicazione ARKit. Esempi più complessi prevedono che il controller di visualizzazione che ospita la sessione di realtà aumentata implementi IARSCNViewDelegatee vengano implementati metodi aggiuntivi.

ARKit offre numerose funzionalità più sofisticate, ad esempio il rilevamento della superficie e l'interazione dell'utente.