Exercício - Ativar e desativar a espacialização em tempo de execução

Concluído

Nesta unidade, você aprenderá como habilitar e desabilitar a espacialização em tempo de execução e testar a espacialização no editor Unity e no HoloLens 2.

Adicionar script de controle de espacialização

  1. Clique com o botão direito do mouse na janela do Projeto e escolha Criar >script C# para criar um novo script C#. Insira um nome adequado para o script; por exemplo, SpatializeOnOff.

    Captura de tela da criação de um script.

  2. Clique duas vezes no script na janela Project para abri-lo no Visual Studio. Substitua o conteúdo do script padrão pelo seguinte:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Audio;
    
    [RequireComponent(typeof(AudioSource))]
    public class SpatializeOnOff : MonoBehaviour
    {
        public GameObject ButtonTextObject;
        //public AudioMixerGroup RoomEffectGroup;
        //public AudioMixerGroup MasterGroup;
    
        private AudioSource m_SourceObject;
        private bool m_IsSpatialized;
        private TMPro.TextMeshPro m_TextMeshPro;
    
        public void Start()
        {
            m_SourceObject = gameObject.GetComponent<AudioSource>();
            m_TextMeshPro = ButtonTextObject.GetComponent<TMPro.TextMeshPro>();
            SetSpatialized();
        }
    
        public void SwapSpatialization()
        {
            if (m_IsSpatialized)
            {
                SetStereo();
            }
            else
            {
                SetSpatialized();
            }
        }
    
        private void SetSpatialized()
        {
            m_IsSpatialized = true;
            m_SourceObject.spatialBlend = 1;
            m_TextMeshPro.SetText("Set Stereo");
            //m_SourceObject.outputAudioMixerGroup = RoomEffectGroup;
        }
    
        private void SetStereo()
        {
            m_IsSpatialized = false;
            m_SourceObject.spatialBlend = 0;
            m_TextMeshPro.SetText("Set Spatialized");
            //m_SourceObject.outputAudioMixerGroup = MasterGroup;
        }
    }
    

    Observação

    Para ativar ou desativar a espacialização, o script ajusta apenas a propriedade spatialBlend, deixando a propriedade espacialização habilitada. Neste modo, Unity ainda aplica a curva Volume. Caso contrário, se o usuário desabilitasse a espacialização quando estivesse longe da fonte, ouviria o aumento de volume abruptamente.

    Se preferir desabilitar totalmente a espacialização, modifique o script para também ajustar a propriedade booleana da variável SourceObjectSpatialization.

Anexe o seu script e execute-o a partir do botão

  1. Selecione Quad na Hierarquia. Na janela do Inspetor, use o botão Adicionar Componente para adicionar SpatializeOnOff(Script)

    Captura de ecrã de Adicionar script ao quad.

  2. Na janela Hierarquia, localize PressableButton_32x32mm_IconAndTextUnder>TextLabelUnder. Com o objeto Quad ainda selecionado na Hierarquia, na janela Inspetor, localize o componente Spatialize On Off (Script) e arraste e solte o componente TextLabelUnder para o campo Button Text Object.

    Captura de tela de localização do objeto Quad na hierarquia, com o componente SpatialierOnOff.

  3. Para definir o botão para chamar o script SpatializeOnOff quando o botão for liberado, você precisa configurar o script interativo. Na janela Hierarquia, selecione a PressableButton_32x32mm_IconAndTextUnder. Na janela do Inspetor, localize o componente Pressable Button e selecione o ícone + no evento OnClicked ().

    1. Com o objeto PressableButton_32x32mm_IconAndTextUnder ainda selecionado na janela Hierarquia, clique e arraste o objeto Quad da janela Hierarquia para o campo vazio Nenhum (Objeto) do evento que acabou de adicionar, para que o objeto ButtonParent ouça o evento de clique deste botão.

    2. Selecione a lista suspensa Sem Função e, em seguida, selecione SpatializeOnOff>SwapSpatialization () para ativar e desativar o áudio espacial.

    Captura de tela das configurações de ação do botão.