Udostępnij za pośrednictwem


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.

Model Jet 3D unoszący się w obrazie aparatu

1. Dodawanie modelu 3D

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

Zasoby platformy SceneKit w projekcie

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.