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, führen Sie die folgenden Anweisungen durch eine einfache Anwendung: Positionieren eines 3D-Modells und Zulassen, dass ARKit das Modell mit seiner Nachverfolgungsfunktion beibehalten kann.
1. Hinzufügen eines 3D-Modells
Ressourcen sollten dem Projekt mit der Buildaktion SceneKitAsset hinzugefügt werden.
2. Konfigurieren der Ansicht
Laden Sie in der -Methode des Ansichtscontrollers ViewDidLoad
das Szenenobjekt, 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. Optionales Implementieren eines Sitzungsdelegaten
Obwohl für einfache Fälle nicht erforderlich, kann die Implementierung eines Sitzungsdelegats hilfreich sein, um den Zustand der ARKit-Sitzung (und in echten Anwendungen, die dem Benutzer Feedback geben) zu debuggen. Erstellen Sie mithilfe des folgenden Codes einen einfachen Delegaten:
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 Sie das 3D-Modell in der Welt
In ViewWillAppear
richtet der folgende Code eine ARKit-Sitzung ein und legt die Position des 3D-Modells im Raum relativ zur Kamera des Geräts fest:
// 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, verschieben Sie die Kamera und watch, während 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 IARSCNViewDelegate
und zusätzliche Methoden implementiert werden.
ARKit bietet viele komplexere Features, z. B. Surface Tracking und Benutzerinteraktionen.