Поделиться через


Общие сведения об ARKit в Xamarin.iOS

Дополненная реальность для iOS 11

ARKit обеспечивает широкий спектр приложений и игр дополненной реальности

Начало работы с ARKit

Чтобы приступить к работе с дополненной реальностью, в следующих инструкциях описано простое приложение: размещение трехмерной модели и предоставление ARKit возможности отслеживания.

Модель Jet 3D, плавающая в изображении камеры

1. Добавление трехмерной модели

Ресурсы следует добавить в проект с действием сборки SceneKitAsset .

Ресурсы SceneKit в проекте

2. Настройка представления

В методе контроллера ViewDidLoad представления загрузите ресурс сцены и задайте Scene свойство в представлении:

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. При необходимости реализуйте делегат сеанса

Хотя и не требуется для простых случаев, реализация делегата сеанса может быть полезной для отладки состояния сеанса ARKit (и в реальных приложениях, предоставляя отзыв пользователю). Создайте простой делегат, используя приведенный ниже код:

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

Назначьте делегат в методе ViewDidLoad :

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

4. Положение трехмерной модели в мире

В ViewWillAppearследующем коде устанавливается сеанс ARKit и устанавливается положение трехмерной модели в пространстве относительно камеры устройства:

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

При каждом запуске или возобновлении работы приложения трехмерная модель будет размещаться перед камерой. После размещения модели переместите камеру и посмотрите, как ARKit сохраняет позицию модели.

5. Приостановка сеанса дополненной реальности

Рекомендуется приостановить сеанс ARKit, если контроллер представления не отображается (в методе ViewWillDisappear :

SceneView.Session.Pause();

Итоги

Приведенный выше код приводит к простому приложению ARKit. Более сложные примеры ожидают, что контроллер представления, на котором размещен сеанс дополненной реальности, будет реализован IARSCNViewDelegateи реализованы дополнительные методы.

ARKit предоставляет множество более сложных функций, таких как отслеживание поверхностей и взаимодействие с пользователем.