共用方式為


Xamarin.iOS 中的 ARKit 簡介

適用於 iOS 11 的擴增實境

ARKit 可啟用各種不同的擴增實境應用程式和遊戲

開始使用ARKit

若要開始使用擴增實境,下列指示會逐步解說簡單的應用程式:定位 3D 模型,並讓 ARKit 使用其追蹤功能來保留模型。

噴氣式 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.暫停擴增實境會話

當檢視控制器不可見時,最好暫停 ARKit 工作階段(在 方法中 ViewWillDisappear

SceneView.Session.Pause();

摘要

上述程式代碼會產生簡單的ARKit應用程式。 更複雜的範例預期裝載擴增實境會話的檢視控制器會實 IARSCNViewDelegate作 ,並實作其他方法。

ARKit 提供許多更複雜的功能,例如表面追蹤和用戶互動。