Xamarin.iOS 中的 ARKit 簡介
適用於 iOS 11 的擴增實境
ARKit 可啟用各種不同的擴增實境應用程式和遊戲
開始使用ARKit
若要開始使用擴增實境,下列指示會逐步解說簡單的應用程式:定位 3D 模型,並讓 ARKit 使用其追蹤功能來保留模型。
1.新增 3D 模型
資產應新增至具有 SceneKitAsset 建置動作的專案。
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 提供許多更複雜的功能,例如表面追蹤和用戶互動。