Partilhar via


Introdução ao ARKit no Xamarin.iOS

Realidade Aumentada para iOS 11

ARKit permite uma grande variedade de aplicações e jogos de realidade aumentada

Introdução ao ARKit

Para começar com a realidade aumentada, as instruções a seguir percorrem um aplicativo simples: posicionar um modelo 3D e permitir que o ARKit mantenha o modelo no lugar com sua funcionalidade de rastreamento.

Modelo 3D do jato flutuando na imagem da câmera

1. Adicione um modelo 3D

Os ativos devem ser adicionados ao projeto com a ação de compilação SceneKitAsset.

Ativos do SceneKit em um projeto

2. Configurar o modo de exibição

No método do controlador de ViewDidLoad exibição, carregue o ativo de cena e defina a Scene propriedade na exibição:

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. Opcionalmente, implemente um delegado de sessão

Embora não seja necessário para casos simples, a implementação de um delegado de sessão pode ser útil para depurar o estado da sessão ARKit (e em aplicativos reais, fornecendo feedback ao usuário). Crie um delegado simples usando o código abaixo:

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

Atribua o delegado no ViewDidLoad no método:

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

4. Posicione o modelo 3D no mundo

No ViewWillAppear, o código a seguir estabelece uma sessão ARKit e define a posição do modelo 3D no espaço em relação à câmera do dispositivo:

// 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);

Cada vez que o aplicativo é executado ou retomado, o modelo 3D será posicionado na frente da câmera. Assim que o modelo estiver posicionado, mova a câmera e observe como o ARKit mantém o modelo posicionado.

5. Pause a sessão de realidade aumentada

É uma boa prática pausar a sessão ARKit quando o controlador de exibição não estiver visível (no ViewWillDisappear método:

SceneView.Session.Pause();

Resumo

O código acima resulta em um aplicativo ARKit simples. Exemplos mais complexos esperariam que o controlador de exibição que hospeda a sessão de realidade aumentada implementasse IARSCNViewDelegateo , e métodos adicionais fossem implementados.

O ARKit fornece muitos recursos mais sofisticados, como rastreamento de superfície e interação do usuário.