Freigeben über


Einführung in ARKit in Xamarin.iOS

Augmented Reality für iOS 11

ARKit ermöglicht eine Vielzahl von Augmented Reality-Anwendungen und -Spielen

Erste Schritte mit ARKit

Um mit Augmented Reality zu beginnen, gehen die folgenden Anweisungen durch eine einfache Anwendung: Positionierung eines 3D-Modells und ermöglichen ARKit, das Modell mit seiner Tracking-Funktionalität zu halten.

Jet 3D-Modell im Kamerabild unverankert

1. Hinzufügen eines 3D-Modells

Ressourcen sollten dem Projekt mit der SceneKitAsset-Buildaktion hinzugefügt werden.

SceneKit-Ressourcen in einem Projekt

2. Konfigurieren der Ansicht

Laden Sie in der Methode des Ansichtscontrollers ViewDidLoad die Szenenressource, und legen Sie die Scene Eigenschaft für die Ansicht fest:

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. Optional implementieren Sie einen Sitzungsdelegat

Obwohl für einfache Fälle nicht erforderlich, kann die Implementierung eines Sitzungsdelegats für das Debuggen des Zustands der ARKit-Sitzung (und in echten Anwendungen, die dem Benutzer Feedback geben) hilfreich sein. Erstellen Sie mit dem folgenden Code eine einfache Stellvertretung:

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

Weisen Sie den Delegaten in der Methode zu ViewDidLoad :

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

4. Positionieren des 3D-Modells in der Welt

Im ViewWillAppearfolgenden Code wird eine ARKit-Sitzung eingerichtet und die Position des 3D-Modells im Verhältnis zur Kamera des Geräts festgelegt:

// 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);

Jedes Mal, wenn die Anwendung ausgeführt oder fortgesetzt wird, wird das 3D-Modell vor der Kamera positioniert. Sobald das Modell positioniert ist, bewegen Sie die Kamera, und beobachten Sie, wie ARKit das Modell positioniert.

5. Anhalten der Augmented Reality-Sitzung

Es empfiehlt sich, die ARKit-Sitzung anzuhalten, wenn der Ansichtscontroller nicht sichtbar ist (in der ViewWillDisappear Methode:

SceneView.Session.Pause();

Zusammenfassung

Der obige Code führt zu einer einfachen ARKit-Anwendung. Komplexere Beispiele würden erwarten, dass der Ansichtscontroller, der die Augmented Reality-Sitzung hostet, implementiert IARSCNViewDelegatewird, und zusätzliche Methoden implementiert werden.

ARKit bietet viele komplexere Features, z. B. Surface Tracking und Benutzerinteraktion.