Xamarin.iOS에서 ARKit 소개Introduction to ARKit in Xamarin.iOS

Ios 11의 확대 된 현실Augmented Reality for iOS 11

ARKit 확대 된 현실 응용 프로그램 및 게임의 광범위 한이 있습니다.ARKit enables a wide variety of augmented reality applications and games. 이 단원에서는 다음 항목에 대해 설명합니다.This section covers the following topics:

ARKit 시작Getting Started with ARKit

증강된 현실 시작 하려면 다음 지침을 단계별로 간단한 응용 프로그램: 3D 모델의 위치를 지정 하 고 해당 추적 기능을 사용 하 여 모델을 장소에 보관 하는 ARKit 수 있도록 합니다.To get started with augmented reality, the following instructions walk through a simple application: positioning a 3D model and letting ARKit keep the model in place with its tracking functionality.

카메라에서 이미지를 부동 jet 3D 모델

1. 3D 모델 추가1. Add a 3D model

자산 사용 하 여 프로젝트에 추가 해야 합니다 SceneKitAsset 빌드 작업입니다.Assets should be added to the project with the SceneKitAsset build action.

프로젝트에서 SceneKit 자산이

2. 보기 구성2. Configure the view

뷰 컨트롤러에서 ViewDidLoad 메서드를 장면 자산을 로드 하 고 설정 된 Scene 보기에서 속성:In the view controller's ViewDidLoad method, load the scene asset and set the Scene property on the view:

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. 필요에 따라 세션 대리자 구현3. Optionally implement a session delegate

간단한 경우에 필요 하지는 않지만는 세션 대리자 구현 ARKit 세션 (및 사용자에 게 피드백을 제공 하는 실제 응용 프로그램) 상태를 디버깅을 위해 유용할 수 있습니다.Although not required for simple cases, implementing a session delegate can be helpful for debugging the state of the ARKit session (and in real applications, providing feedback to the user). 아래 코드를 사용 하 여 간단한 대리자를 만듭니다.Create a simple delegate using the code below:

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

대리자에 할당 된에서 ViewDidLoad 메서드:Assign the delegate in the in the ViewDidLoad method:

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

4. 전 세계에서 3D 모델의 위치4. Position the 3D model in the world

ViewWillAppear, 다음 코드는 ARKit 세션을 설정 하 고 장치의 카메라를 기준으로 공간에서 3D 모델의 위치를 설정 합니다.In ViewWillAppear, the following code establishes an ARKit session and sets the position of the 3D model in space relative to the device's camera:

// 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 모델 카메라 앞에 배치 됩니다.Each time the application is run or resumed, the 3D model will be positioned in front of the camera. 모델이 배치 되 면 카메라를 이동 하 고 ARKit 배치 모델을 계속 지켜봅니다.Once the model is positioned, move the camera and watch as ARKit keeps the model positioned.

5. 증강된 현실 세션을 일시 중지5. Pause the augmented reality session

뷰 컨트롤러는 표시 되지 않습니다 ARKit 세션을 일시 중지 하는 것이 좋습니다 (에 ViewWillDisappear 메서드:It is good practice to pause the ARKit session when the view controller is not visible (in the ViewWillDisappear method:

SceneView.Session.Pause();

요약Summary

위의 코드는 간단한 ARKit 응용 프로그램에서 발생합니다.The above code results in a simple ARKit application. 더 복잡 한 예제를 구현 하는 확대 된 현실 세션을 호스트 하는 보기 컨트롤러 기대 IARSCNViewDelegate, 추가 메서드를 구현 하 고 있습니다.More complex examples would expect the view controller hosting the augmented reality session to implement IARSCNViewDelegate, and additional methods be implemented.

ARKit 노출 추적 및 사용자 상호 작용 하는 등 보다 복잡 한 기능을 많이 제공합니다.ARKit provides lots of more sophisticated features, such as surface tracking, and user interaction. 참조 된 UrhoSharp 데모 ARKit UrhoSharp 사용 하 여 추적을 결합 하는 예입니다.See the UrhoSharp demo for an example combining ARKit tracking with UrhoSharp.