Xamarin.iOS의 ARKit 소개

iOS 11용 증강 현실

ARKit을 사용하면 다양한 증강 현실 애플리케이션 및 게임을 사용할 수 있습니다.

ARKit 시작

증강 현실을 시작하기 위해 다음 지침은 간단한 애플리케이션을 안내합니다. 즉, 3D 모델을 배치하고 ARKit에서 추적 기능을 사용하여 모델을 제자리에 유지하도록 합니다.

Jet 3D model floating in camera image

1. 3D 모델 추가

자산은 SceneKitAsset 빌드 작업을 사용하여 프로젝트에 추가되어야 합니다.

SceneKit assets in a project

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 모델 배치

다음 코드에서는 ViewWillAppearARKit 세션을 설정하고 디바이스의 카메라를 기준으로 공간에서 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은 표면 추적 및 사용자 상호 작용과 같은 보다 정교한 기능을 많이 제공합니다.