Noções básicas do MR 101E: projeto completo com emuladorMR Basics 101E: Complete project with emulator

Observação

Os tutoriais do Mixed Reality Academy foram projetados com o HoloLens (1ª geração) e os headsets imersivos de realidade misturada em mente.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Dessa forma, achamos que é importante continuar disponibilizando esses tutoriais para os desenvolvedores que ainda buscam obter diretrizes para o desenvolvimento visando esses dispositivos.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. Esses tutoriais não serão atualizados com os conjuntos de ferramentas mais recentes nem com as interações usadas para o HoloLens 2.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Eles serão mantidos para continuar funcionando nos dispositivos compatíveis.They will be maintained to continue working on the supported devices. Uma nova série de tutoriais foi postada para o HoloLens 2.A new series of tutorials has been posted for HoloLens 2.


Este tutorial guiará você por um projeto completo, interno do Unity, que demonstra os principais recursos de realidade mista do Windows no HoloLens, incluindo olhar, gestos, entrada de voz, som espacial e mapeamento espacial.This tutorial will walk you through a complete project, built in Unity, that demonstrates core Windows Mixed Reality features on HoloLens including gaze, gestures, voice input, spatial sound and spatial mapping. O tutorial levará aproximadamente 1 hora para ser concluído.The tutorial will take approximately 1 hour to complete.

Suporte a dispositivosDevice support

CursoCourse HoloLensHoloLens Headsets imersivosImmersive headsets
Noções básicas do MR 101E: projeto completo com emuladorMR Basics 101E: Complete project with emulator ✔️✔️

Antes de começarBefore you start

Pré-requisitosPrerequisites

Arquivos de projetoProject files

  • Baixe os arquivos exigidos pelo projeto.Download the files required by the project. Requer o Unity 2017,2 ou posterior.Requires Unity 2017.2 or later.
    • Se você ainda precisar de suporte do Unity 5,6, use esta versão.If you still need Unity 5.6 support, please use this release.
    • Se você ainda precisar de suporte do Unity 5,5, use esta versão.If you still need Unity 5.5 support, please use this release.
    • Se você ainda precisar de suporte do Unity 5,4, use esta versão.If you still need Unity 5.4 support, please use this release.
  • Cancele o arquivamento dos arquivos em sua área de trabalho ou outro local fácil de acessar.Un-archive the files to your desktop or other easy to reach location. Mantenha o nome da pasta como origami.Keep the folder name as Origami.

Observação

Se você quiser examinar o código-fonte antes de baixá-lo, ele estará disponível no GitHub.If you want to look through the source code before downloading, it's available on GitHub.

Capítulo 1 – mundo "holo"Chapter 1 - "Holo" world

Neste capítulo, vamos configurar nosso primeiro projeto do Unity e percorrer o processo de compilação e implantação.In this chapter, we'll setup our first Unity project and step through the build and deploy process.

ObjetivosObjectives

  • Configure o Unity para o desenvolvimento de Holographic.Set up Unity for holographic development.
  • Crie um holograma.Make a hologram.
  • Veja um holograma que você fez.See a hologram that you made.

InstruçõesInstructions

  • Inicie o Unity.Start Unity.
  • Selecione Abrir.Select Open.
  • Insira o local como a pasta de origami que você cancelou anteriormente.Enter location as the Origami folder you previously un-archived.
  • Selecione origami e clique em Selecionar pasta.Select Origami and click Select Folder.
  • Salve a nova cena: arquivo / salvar cena como.Save the new scene: File / Save Scene As.
  • Nomeie o origami da cena e pressione o botão salvar .Name the scene Origami and press the Save button.

Configurar a câmera principalSetup the main camera

  • No Painel de Hierarquia, selecione Câmera Principal.In the Hierarchy Panel, select Main Camera.
  • No Inspetor , defina sua posição de transformação como 0, 0, 0.In the Inspector set its transform position to 0,0,0.
  • Localize a propriedade limpar sinalizadores e altere a lista suspensa de Skybox para cor sólida.Find the Clear Flags property, and change the dropdown from Skybox to Solid color.
  • Clique no campo Tela de fundo para abrir um seletor de cor.Click on the Background field to open a color picker.
  • Defina R, G, B e A para 0.Set R, G, B, and A to 0.

Configurar a cenaSetup the scene

  • No painel hierarquia, clique em criar e em criar vazio.In the Hierarchy Panel, click on Create and Create Empty.
  • Clique com o botão direito do mouse no novo gameobject e selecione Renomear.Right-click the new GameObject and select Rename. Renomeie o gameobject para origamicollection.Rename the GameObject to OrigamiCollection.
  • Na pasta hologramas no painel Projeto:From the Holograms folder in the Project Panel:
    • Arraste o estágio para a hierarquia para ser um filho de origamicollection.Drag Stage into the Hierarchy to be a child of OrigamiCollection.
    • Arraste Sphere1 para a hierarquia para ser um filho de origamicollection.Drag Sphere1 into the Hierarchy to be a child of OrigamiCollection.
    • Arraste Sphere2 para a hierarquia para ser um filho de origamicollection.Drag Sphere2 into the Hierarchy to be a child of OrigamiCollection.
  • Clique com o botão direito do mouse no objeto de luz direcional no painel hierarquia e selecione excluir.Right-click the Directional Light object in the Hierarchy Panel and select Delete.
  • Na pasta hologramas , arraste as luzes para a raiz do painel hierarquia.From the Holograms folder, drag Lights into the root of the Hierarchy Panel.
  • Na hierarquia, selecione o origamicollection.In the Hierarchy, select the OrigamiCollection.
  • No Inspetor, defina a posição de transformação como 0,-0,5, 2,0.In the Inspector, set the transform position to 0, -0.5, 2.0.
  • Pressione o botão reproduzir no Unity para visualizar os hologramas.Press the Play button in Unity to preview your holograms.
  • Você deve ver os objetos de origami na janela de visualização.You should see the Origami objects in the preview window.
  • Pressione executar uma segunda vez para parar o modo de visualização.Press Play a second time to stop preview mode.

Exportar o projeto do Unity para o Visual StudioExport the project from Unity to Visual Studio

  • Em Unity, selecione arquivo > configurações de Build.In Unity select File > Build Settings.
  • Selecione Windows Store na lista plataforma e clique em alternar plataforma.Select Windows Store in the Platform list and click Switch Platform.
  • Defina o SDK como Universal 10 e o tipo de compilação como D3D.Set SDK to Universal 10 and Build Type to D3D.
  • Verifique os projetos do Unity C#.Check Unity C# Projects.
  • Clique em Adicionar abrir cenas para adicionar a cena.Click Add Open Scenes to add the scene.
  • Clique em configurações do Player....Click Player Settings....
  • No painel Inspetor, selecione o logotipo da Windows Store.In the Inspector Panel select the Windows Store logo. Em seguida, selecione configurações de publicação.Then select Publishing Settings.
  • Na seção recursos , selecione os recursos de microfone e SpatialPerception .In the Capabilities section, select the Microphone and SpatialPerception capabilities.
  • De volta à janela configurações de compilação, clique em Compilar.Back in the Build Settings window, click Build.
  • Crie uma nova pasta chamada "app".Create a New Folder named "App".
  • Clique uma vez na pasta do aplicativo.Single click the App Folder.
  • Pressione Selecionar pasta.Press Select Folder.
  • Quando o Unity for concluído, uma janela Explorador de arquivos será exibida.When Unity is done, a File Explorer window will appear.
  • Abra a pasta do aplicativo .Open the App folder.
  • Abra a solução de origami do Visual Studio.Open the Origami Visual Studio Solution.
  • Usando a barra de ferramentas superior no Visual Studio, altere o destino de debug para Release e de ARM para x86.Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to X86.
    • Clique na seta ao lado do botão dispositivo e selecione emulador do HoloLens.Click on the arrow next to the Device button, and select HoloLens Emulator.
    • Clique em depurar-> iniciar sem Depurar ou pressione Ctrl + F5.Click Debug -> Start Without debugging or press Ctrl + F5.
    • Após algum tempo, o emulador começará com o projeto de origami.After some time the emulator will start with the Origami project. Ao iniciar o emuladorpela primeira vez, pode levar até 15 minutos para que o emulador seja inicializado.When first launching the emulator, it can take as long as 15 minutes for the emulator to start up. Quando ele for iniciado, não o feche.Once it starts, do not close it.

Capítulo 2 – olharChapter 2 - Gaze

Neste capítulo, vamos apresentar a primeira das três maneiras de interagir com seus hologramas-- olhar.In this chapter, we are going to introduce the first of three ways of interacting with your holograms -- gaze.

ObjetivosObjectives

  • Visualize seu olhar usando um cursor com bloqueio mundial.Visualize your gaze using a world-locked cursor.

InstruçõesInstructions

  • Volte ao seu projeto do Unity e feche a janela de configurações de Build se ela ainda estiver aberta.Go back to your Unity project, and close the Build Settings window if it's still open.
  • Selecione a pasta hologramas no painel Projeto.Select the Holograms folder in the Project panel.
  • Arraste o objeto cursor para o painel hierarquia no nível raiz.Drag the Cursor object into the Hierarchy panel at the root level.
  • Clique duas vezes no objeto de cursor para examiná-lo mais detalhadamente.Double-click on the Cursor object to take a closer look at it.
  • Clique com o botão direito do mouse na pasta scripts no painel projeto.Right-click on the Scripts folder in the Project panel.
  • Clique no submenu criar .Click the Create sub-menu.
  • Selecione script C#.Select C# Script.
  • Nomeie o script WorldCursor.Name the script WorldCursor. Observação: o nome diferencia maiúsculas de minúsculas.Note: The name is case-sensitive. Você não precisa adicionar a extensão. cs.You do not need to add the .cs extension.
  • Selecione o objeto cursor no painel hierarquia.Select the Cursor object in the Hierarchy panel.
  • Arraste e solte o script WorldCursor no painel Inspetor.Drag and drop the WorldCursor script into the Inspector panel.
  • Clique duas vezes no script WorldCursor para abri-lo no Visual Studio.Double-click the WorldCursor script to open it in Visual Studio.
  • Copie e cole esse código em WorldCursor.cs e Salve tudo.Copy and paste this code into WorldCursor.cs and Save All.
using UnityEngine;

public class WorldCursor : MonoBehaviour
{
    private MeshRenderer meshRenderer;

    // Use this for initialization
    void Start()
    {
        // Grab the mesh renderer that's on the same object as this script.
        meshRenderer = this.gameObject.GetComponentInChildren<MeshRenderer>();
    }

    // Update is called once per frame
    void Update()
    {
        // Do a raycast into the world based on the user's
        // head position and orientation.
        var headPosition = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;

        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
        {
            // If the raycast hit a hologram...
            // Display the cursor mesh.
            meshRenderer.enabled = true;

            // Move thecursor to the point where the raycast hit.
            this.transform.position = hitInfo.point;

            // Rotate the cursor to hug the surface of the hologram.
            this.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
        }
        else
        {
            // If the raycast did not hit a hologram, hide the cursor mesh.
            meshRenderer.enabled = false;
        }
    }
}
  • Recompile o aplicativo do arquivo > configurações de Build.Rebuild the app from File > Build Settings.
  • Retorne à solução do Visual Studio usada anteriormente para implantar no emulador.Return to the Visual Studio solution previously used to deploy to the emulator.
  • Selecione ' recarregar tudo ' quando solicitado.Select 'Reload All' when prompted.
  • Clique em depurar-> iniciar sem Depurar ou pressione Ctrl + F5.Click Debug -> Start Without debugging or press Ctrl + F5.
  • Use o controlador Xbox para examinar a cena.Use the Xbox controller to look around the scene. Observe como o cursor interage com a forma de objetos.Notice how the cursor interacts with the shape of objects.

Capítulo 3-gestosChapter 3 - Gestures

Neste capítulo, adicionaremos suporte para gestos.In this chapter, we'll add support for gestures. Quando o usuário seleciona uma esfera de papel, vamos fazer com que a esfera fique ativando a gravidade usando o mecanismo de física do Unity.When the user selects a paper sphere, we'll make the sphere fall by turning on gravity using Unity's physics engine.

ObjetivosObjectives

  • Controle seus hologramas com o gesto de seleção.Control your holograms with the Select gesture.

InstruçõesInstructions

Vamos começar criando um script do que pode detectar o gesto de seleção.We'll start by creating a script than can detect the Select gesture.

  • Na pasta scripts , crie um script chamado GazeGestureManager.In the Scripts folder, create a script named GazeGestureManager.
  • Arraste o script GazeGestureManager para o objeto origamicollection na hierarquia.Drag the GazeGestureManager script onto the OrigamiCollection object in the Hierarchy.
  • Abra o script GazeGestureManager no Visual Studio e adicione o seguinte código:Open the GazeGestureManager script in Visual Studio and add the following code:
using UnityEngine;
using UnityEngine.XR.WSA.Input;

public class GazeGestureManager : MonoBehaviour
{
    public static GazeGestureManager Instance { get; private set; }

    // Represents the hologram that is currently being gazed at.
    public GameObject FocusedObject { get; private set; }

    GestureRecognizer recognizer;

    // Use this for initialization
    void Start()
    {
        Instance = this;

        // Set up a GestureRecognizer to detect Select gestures.
        recognizer = new GestureRecognizer();
        recognizer.Tapped += (args) =>
        {
            // Send an OnSelect message to the focused object and its ancestors.
            if (FocusedObject != null)
            {
                FocusedObject.SendMessageUpwards("OnSelect", SendMessageOptions.DontRequireReceiver);
            }
        };
        recognizer.StartCapturingGestures();
    }

    // Update is called once per frame
    void Update()
    {
        // Figure out which hologram is focused this frame.
        GameObject oldFocusObject = FocusedObject;

        // Do a raycast into the world based on the user's
        // head position and orientation.
        var headPosition = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;
        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
        {
            // If the raycast hit a hologram, use that as the focused object.
            FocusedObject = hitInfo.collider.gameObject;
        }
        else
        {
            // If the raycast did not hit a hologram, clear the focused object.
            FocusedObject = null;
        }

        // If the focused object changed this frame,
        // start detecting fresh gestures again.
        if (FocusedObject != oldFocusObject)
        {
            recognizer.CancelGestures();
            recognizer.StartCapturingGestures();
        }
    }
}
  • Crie outro script na pasta scripts, desta vez com o nome SphereCommands.Create another script in the Scripts folder, this time named SphereCommands.
  • Expanda o objeto origamicollection na exibição hierarquia.Expand the OrigamiCollection object in the Hierarchy view.
  • Arraste o script SphereCommands para o objeto Sphere1 no painel hierarquia.Drag the SphereCommands script onto the Sphere1 object in the Hierarchy panel.
  • Arraste o script SphereCommands para o objeto Sphere2 no painel hierarquia.Drag the SphereCommands script onto the Sphere2 object in the Hierarchy panel.
  • Abra o script no Visual Studio para edição e substitua o código padrão por este:Open the script in Visual Studio for editing, and replace the default code with this:
using UnityEngine;

public class SphereCommands : MonoBehaviour
{
    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // If the sphere has no Rigidbody component, add one to enable physics.
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }
}
  • Exporte, compile e implante o aplicativo no emulador do HoloLens.Export, build and deploy the app to the HoloLens emulator.
  • Examine a cena e centralize-a em um dos seus próprios.Look around the scene, and center on one of the spheres.
  • Pressione o botão a no controlador Xbox ou pressione a barra de espaços para simular o gesto de seleção.Press the A button on the Xbox controller or press the Spacebar to simulate the Select gesture.

Capítulo 4-vozChapter 4 - Voice

Neste capítulo, adicionaremos suporte para dois comandos de voz: "redefinir mundo" para retornar o que caiu para o local original e "soltar a esfera" para fazer a esfera cair.In this chapter, we'll add support for two voice commands: "Reset world" to returns the dropped spheres to their original location, and "Drop sphere" to make the sphere fall.

ObjetivosObjectives

  • Adicione comandos de voz que sempre escutam em segundo plano.Add voice commands that always listen in the background.
  • Crie um holograma que reage a um comando de voz.Create a hologram that reacts to a voice command.

InstruçõesInstructions

  • Na pasta scripts , crie um script chamado speechmanager.In the Scripts folder, create a script named SpeechManager.
  • Arraste o script speechmanager para o objeto Origamicollection na hierarquiaDrag the SpeechManager script onto the OrigamiCollection object in the Hierarchy
  • Abra o script speechmanager no Visual Studio.Open the SpeechManager script in Visual Studio.
  • Copie e cole esse código em SpeechManager.cs e Salve todos:Copy and paste this code into SpeechManager.cs and Save All:
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Windows.Speech;

public class SpeechManager : MonoBehaviour
{
    KeywordRecognizer keywordRecognizer = null;
    Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

    // Use this for initialization
    void Start()
    {
        keywords.Add("Reset world", () =>
        {
            // Call the OnReset method on every descendant object.
            this.BroadcastMessage("OnReset");
        });

        keywords.Add("Drop Sphere", () =>
        {
            var focusObject = GazeGestureManager.Instance.FocusedObject;
            if (focusObject != null)
            {
                // Call the OnDrop method on just the focused object.
                focusObject.SendMessage("OnDrop", SendMessageOptions.DontRequireReceiver);
            }
        });

        // Tell the KeywordRecognizer about our keywords.
        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

        // Register a callback for the KeywordRecognizer and start recognizing!
        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
        keywordRecognizer.Start();
    }

    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        System.Action keywordAction;
        if (keywords.TryGetValue(args.text, out keywordAction))
        {
            keywordAction.Invoke();
        }
    }
}
  • Abra o script SphereCommands no Visual Studio.Open the SphereCommands script in Visual Studio.
  • Atualize o script para ler da seguinte maneira:Update the script to read as follows:
using UnityEngine;

public class SphereCommands : MonoBehaviour
{
    Vector3 originalPosition;

    // Use this for initialization
    void Start()
    {
        // Grab the original local position of the sphere when the app starts.
        originalPosition = this.transform.localPosition;
    }

    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // If the sphere has no Rigidbody component, add one to enable physics.
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }

    // Called by SpeechManager when the user says the "Reset world" command
    void OnReset()
    {
        // If the sphere has a Rigidbody component, remove it to disable physics.
        var rigidbody = this.GetComponent<Rigidbody>();
        if (rigidbody != null)
        {
            rigidbody.isKinematic = true;
            Destroy(rigidbody);
        }

        // Put the sphere back into its original local position.
        this.transform.localPosition = originalPosition;
    }

    // Called by SpeechManager when the user says the "Drop sphere" command
    void OnDrop()
    {
        // Just do the same logic as a Select gesture.
        OnSelect();
    }
}
  • Exporte, compile e implante o aplicativo no emulador do HoloLens.Export, build and deploy the app to the HoloLens emulator.
  • O emulador dará suporte ao microfone do seu PC e responderá à sua voz: ajuste a exibição para que o cursor esteja em um dos seus esferas e, em seguida, diga "drop Sphere".The emulator will support your PC's microphone and respond to your voice: adjust the view so the cursor is on one of the spheres, and say "Drop Sphere".
  • Diga "Redefinir mundo" para trazê-los de volta para suas posições iniciais.Say "Reset World" to bring them back to their initial positions.

Capítulo 5-som espacialChapter 5 - Spatial sound

Neste capítulo, vamos adicionar música ao aplicativo e, em seguida, disparar efeitos sonoros em determinadas ações.In this chapter, we'll add music to the app, and then trigger sound effects on certain actions. Vamos usar o som espacial para dar sons a um local específico no espaço 3D.We'll be using spatial sound to give sounds a specific location in 3D space.

ObjetivosObjectives

  • Ouça os hologramas em seu mundo.Hear holograms in your world.

InstruçõesInstructions

  • Na seleção do Unity, no menu superior, edite > configurações do projeto > áudioIn the Unity select from the top menu Edit > Project Settings > Audio
  • Localize a configuração do plug-in Spatializer e selecione MS HRTF Spatializer.Find the Spatializer Plugin setting and select MS HRTF Spatializer.
  • Na pasta hologramas , arraste o objeto Ambience para o objeto origamicollection no painel hierarquia.From the Holograms folder, drag the Ambience object onto the OrigamiCollection object in the Hierarchy Panel.
  • Selecione origamicollection e localize o componente fonte de áudio .Select OrigamiCollection and find the Audio Source component. Altere estas propriedades:Change these properties:
    • Verifique a propriedade espacialize .Check the Spatialize property.
    • Verifique o jogo em ativo.Check the Play On Awake.
    • Altere a mistura espacial para 3D arrastando o controle deslizante para a direita.Change Spatial Blend to 3D by dragging the slider all the way to the right.
    • Verifique a propriedade loop .Check the Loop property.
    • Expanda configurações de som 3D e insira 0,1 para o nível de Doppler.Expand 3D Sound Settings, and enter 0.1 for Doppler Level.
    • Definir rolloff de volume para rolloff logarítmica.Set Volume Rolloff to Logarithmic Rolloff.
    • Defina a distância máxima como 20.Set Max Distance to 20.
  • Na pasta scripts , crie um script chamado SphereSounds.In the Scripts folder, create a script named SphereSounds.
  • Arraste SphereSounds para os objetos Sphere1 e Sphere2 na hierarquia.Drag SphereSounds to the Sphere1 and Sphere2 objects in the Hierarchy.
  • Abra o SphereSounds no Visual Studio, atualize o código a seguir e Salve tudo.Open SphereSounds in Visual Studio, update the following code and Save All.
using UnityEngine;

public class SphereSounds : MonoBehaviour
{
    AudioSource impactAudioSource = null;
    AudioSource rollingAudioSource = null;

    bool rolling = false;

    void Start()
    {
        // Add an AudioSource component and set up some defaults
        impactAudioSource = gameObject.AddComponent<AudioSource>();
        impactAudioSource.playOnAwake = false;
        impactAudioSource.spatialize = true;
        impactAudioSource.spatialBlend = 1.0f;
        impactAudioSource.dopplerLevel = 0.0f;
        impactAudioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        impactAudioSource.maxDistance = 20f;

        rollingAudioSource = gameObject.AddComponent<AudioSource>();
        rollingAudioSource.playOnAwake = false;
        rollingAudioSource.spatialize = true;
        rollingAudioSource.spatialBlend = 1.0f;
        rollingAudioSource.dopplerLevel = 0.0f;
        rollingAudioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        rollingAudioSource.maxDistance = 20f;
        rollingAudioSource.loop = true;

        // Load the Sphere sounds from the Resources folder
        impactAudioSource.clip = Resources.Load<AudioClip>("Impact");
        rollingAudioSource.clip = Resources.Load<AudioClip>("Rolling");
    }

    // Occurs when this object starts colliding with another object
    void OnCollisionEnter(Collision collision)
    {
        // Play an impact sound if the sphere impacts strongly enough.
        if (collision.relativeVelocity.magnitude >= 0.1f)
        {
            impactAudioSource.Play();
        }
    }

    // Occurs each frame that this object continues to collide with another object
    void OnCollisionStay(Collision collision)
    {
        Rigidbody rigid = gameObject.GetComponent<Rigidbody>();

        // Play a rolling sound if the sphere is rolling fast enough.
        if (!rolling && rigid.velocity.magnitude >= 0.01f)
        {
            rolling = true;
            rollingAudioSource.Play();
        }
        // Stop the rolling sound if rolling slows down.
        else if (rolling && rigid.velocity.magnitude < 0.01f)
        {
            rolling = false;
            rollingAudioSource.Stop();
        }
    }

    // Occurs when this object stops colliding with another object
    void OnCollisionExit(Collision collision)
    {
        // Stop the rolling sound if the object falls off and stops colliding.
        if (rolling)
        {
            rolling = false;
            impactAudioSource.Stop();
            rollingAudioSource.Stop();
        }
    }
}
  • Salve o script e retorne ao Unity.Save the script, and return to Unity.
  • Exporte, compile e implante o aplicativo no emulador do HoloLens.Export, build and deploy the app to the HoloLens emulator.
  • Ouça os fones de ouvido para obter o efeito completo e avance mais de perto do palco para ouvir a alteração dos sons.Wear headphones to get the full effect, and move closer and further from the Stage to hear the sounds change.

Capítulo 6-mapeamento espacialChapter 6 - Spatial mapping

Agora vamos usar o mapeamento espacial para posicionar o tabuleiro em um objeto real no mundo real.Now we are going to use spatial mapping to place the game board on a real object in the real world.

ObjetivosObjectives

  • Traga seu mundo real para o mundo virtual.Bring your real world into the virtual world.
  • Coloque seus hologramas onde forem mais importantes para você.Place your holograms where they matter most to you.

InstruçõesInstructions

  • Clique na pasta hologramas no painel projeto.Click on the Holograms folder in the Project panel.
  • Arraste o ativo de mapeamento espacial para a raiz da hierarquia.Drag the Spatial Mapping asset into the root of the Hierarchy.
  • Clique no objeto de mapeamento espacial na hierarquia.Click on the Spatial Mapping object in the Hierarchy.
  • No painel Inspetor, altere as seguintes propriedades:In the Inspector panel, change the following properties:
    • Marque a caixa desenhar malhas visuais .Check the Draw Visual Meshes box.
    • Localize material de desenho e clique no círculo à direita.Locate Draw Material and click the circle on the right. Digite "wireframe" no campo de pesquisa na parte superior.Type "wireframe" into the search field at the top. Clique no resultado e feche a janela.Click on the result and then close the window.
  • Exporte, compile e implante o aplicativo no emulador do HoloLens.Export, build and deploy the app to the HoloLens emulator.
  • Quando o aplicativo é executado, uma malha de uma sala de vida real examinada anteriormente será renderizada em wireframe.When the app runs, a mesh of a previously scanned real-world living room will be rendered in wireframe.
  • Observe como uma esfera de rolagem ficará fora do palco e até o andar!Watch how a rolling sphere will fall off the stage, and onto the floor!

Agora, mostraremos como mover o Origamicollection para um novo local:Now we'll show you how to move the OrigamiCollection to a new location:

  • Na pasta scripts , crie um script chamado TapToPlaceParent.In the Scripts folder, create a script named TapToPlaceParent.
  • Na hierarquia, expanda o origamicollection e selecione o objeto Stage .In the Hierarchy, expand the OrigamiCollection and select the Stage object.
  • Arraste o script TapToPlaceParent para o objeto Stage.Drag the TapToPlaceParent script onto the Stage object.
  • Abra o script TapToPlaceParent no Visual Studio e atualize-o para o seguinte:Open the TapToPlaceParent script in Visual Studio, and update it to be the following:
using UnityEngine;

public class TapToPlaceParent : MonoBehaviour
{
    bool placing = false;

    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // On each Select gesture, toggle whether the user is in placing mode.
        placing = !placing;

        // If the user is in placing mode, display the spatial mapping mesh.
        if (placing)
        {
            SpatialMapping.Instance.DrawVisualMeshes = true;
        }
        // If the user is not in placing mode, hide the spatial mapping mesh.
        else
        {
            SpatialMapping.Instance.DrawVisualMeshes = false;
        }
    }

    // Update is called once per frame
    void Update()
    {
        // If the user is in placing mode,
        // update the placement to match the user's gaze.

        if (placing)
        {
            // Do a raycast into the world that will only hit the Spatial Mapping mesh.
            var headPosition = Camera.main.transform.position;
            var gazeDirection = Camera.main.transform.forward;

            RaycastHit hitInfo;
            if (Physics.Raycast(headPosition, gazeDirection, out hitInfo,
                30.0f, SpatialMapping.PhysicsRaycastMask))
            {
                // Move this object's parent object to
                // where the raycast hit the Spatial Mapping mesh.
                this.transform.parent.position = hitInfo.point;

                // Rotate this object's parent object to face the user.
                Quaternion toQuat = Camera.main.transform.localRotation;
                toQuat.x = 0;
                toQuat.z = 0;
                this.transform.parent.rotation = toQuat;
            }
        }
    }
}
  • Exportar, compilar e implantar o aplicativo.Export, build and deploy the app.
  • Agora você deve ser capaz de posicionar o jogo em um local específico por nuvens-lo, usando o gesto de seleção (uma barra de espaços) e, em seguida, movendo para um novo local e usando o gesto de seleção novamente.Now you should now be able to place the game in a specific location by gazing at it, using the Select gesture (A or Spacebar) and then moving to a new location, and using the Select gesture again.

FimThe end

E esse é o fim deste tutorial!And that's the end of this tutorial!

Você aprendeu a:You learned:

  • Como criar um aplicativo Holographic no Unity.How to create a holographic app in Unity.
  • Como fazer uso de olhar, gesto, voz, sons e mapeamento espacial.How to make use of gaze, gesture, voice, sounds, and spatial mapping.
  • Como criar e implantar um aplicativo usando o Visual Studio.How to build and deploy an app using Visual Studio.

Agora você está pronto para começar a criar seus próprios aplicativos Holographic!You are now ready to start creating your own holographic apps!

Confira tambémSee also