Wprowadzenie do zestawu ARKit w środowisku Xamarin.iOS

Rzeczywistość rozszerzona dla systemu iOS 11

Zestaw ARKit umożliwia szeroką gamę aplikacji i gier rzeczywistości rozszerzonej

Wprowadzenie do zestawu ARKit

Aby rozpocząć pracę z rzeczywistością rozszerzoną, w poniższych instrukcjach przedstawiono prostą aplikację: pozycjonowanie modelu 3D i umożliwienie arkitowi utrzymania modelu na miejscu dzięki jego funkcjom śledzenia.

Jet 3D model floating in camera image

1. Dodawanie modelu 3D

Zasoby należy dodać do projektu za pomocą akcji kompilacji SceneKitAsset .

SceneKit assets in a project

2. Konfigurowanie widoku

W metodzie kontrolera ViewDidLoad widoku załaduj zasób sceny i ustaw Scene właściwość w widoku:

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. Opcjonalnie implementowanie delegata sesji

Chociaż nie jest to wymagane w prostych przypadkach, implementacja delegata sesji może być przydatna do debugowania stanu sesji ARKit (i w rzeczywistych aplikacjach, przesyłając opinię użytkownikowi). Utwórz prosty delegat przy użyciu poniższego kodu:

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

Przypisz delegata w metodzie w metodzie ViewDidLoad :

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

4. Pozycjonowanie modelu 3D na świecie

W ViewWillAppearpliku poniższy kod ustanawia sesję ARKit i ustawia pozycję modelu 3D w przestrzeni względem aparatu urządzenia:

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

Za każdym razem, gdy aplikacja zostanie uruchomiona lub wznowiona, model 3D zostanie umieszczony przed aparatem. Po ustawieniu modelu przenieś kamerę i obserwuj, jak ARKit utrzymuje położenie modelu.

5. Wstrzymaj sesję rzeczywistości rozszerzonej

Dobrym rozwiązaniem jest wstrzymanie sesji ARKit, gdy kontroler widoku nie jest widoczny (w metodzie ViewWillDisappear :

SceneView.Session.Pause();

Podsumowanie

Powyższy kod powoduje utworzenie prostej aplikacji ARKit. Bardziej złożone przykłady będą oczekiwać, że kontroler widoku hostuje sesję rzeczywistości rozszerzonej w celu zaimplementowania IARSCNViewDelegatemetody , a dodatkowe metody zostaną zaimplementowane.

Zestaw ARKit oferuje wiele bardziej zaawansowanych funkcji, takich jak śledzenie powierzchni i interakcja użytkownika.