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는 surface 추적 및 사용자 상호 작용과 같은 다양 한 고급 기능을 제공 합니다.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.