Xamarin.iOS での ARKit の概要

Augmented Reality for iOS 11

ARKit は、さまざまな拡張現実アプリケーションとゲームを可能にします

ARKit の概要

拡張現実を使い始めるために、以下の手順では、3D モデルを配置し、ARKit がその追跡機能を使用してモデルを適切に維持できるようにする単純なアプリケーションについて説明します。

カメラ画像に浮かぶ Jet 3D モデル

1.3D モデルを追加する

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.3D モデルを環境に配置する

ViewWillAppear で、次のコードは ARKit セッションを確立し、デバイスのカメラを基準とする空間内に 3D モデルの位置を設定します。

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

アプリケーションが実行または再開されるたびに、3D モデルがカメラの前に配置されます。 モデルが配置されたら、ARKit がモデルの位置を維持するようにカメラを移動し監視します。

5.拡張現実セッションを一時停止する

ビュー コントローラーが表示されない場合 (ViewWillDisappear メソッドで)、ARKit セッションを一時停止することをお勧めします。

SceneView.Session.Pause();

まとめ

上記のコードでは、単純な ARKit アプリケーションが作成されます。 より複雑な例では、拡張現実セッションをホストするビュー コントローラーが IARSCNViewDelegate を実装し、追加のメソッドが実装されることが想定されます。

ARKit には、サーフェス追跡やユーザー操作など、より高度な機能が多数用意されています。