Habilitando e desabilitando a espacial em tempo de execuçãoEnabling and disabling spatialization at run time

ObjetivosObjectives

Neste 4º Capítulo, você vai:In this 4th chapter, you'll:

  • Adicionar um novo script para controlar a espacialização em um objeto de jogoAdd a new script to control spatialization on a game object
  • Direcionar o script de controle de espacial de ações de botãoDrive the spatialization control script from button actions

Adicionar script de controle de espacialAdd spatialization control script

Clique com o botão direito do mouse no painel projeto e C# crie um novo script escolhendo criar C# -> script.Right-click in the Project pane and create a new C# script by choosing Create -> C# Script. Nomeie o seu script como "SpatializeOnOff".Name your script "SpatializeOnOff".

Criar script

Clique duas vezes no script no painel de projeto para abri-lo no Visual Studio.Double-click the script in the Project pane to open it in Visual Studio. Substitua o conteúdo do script padrão pelo seguinte:Replace the default script contents with the following:

Observação

Várias linhas do script são comentadas. Essas linhas não serão comentadas no capítulo 5.Several lines of the script are commented out. These lines will be uncommented in Chapter 5.

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 habilitar ou desabilitar a espacialização, o script ajusta apenas a propriedade spatialBlend , deixando a propriedade de espacial habilitada.To enable or disable spatialization, the script only adjusts the spatialBlend property, leaving the spatialization property enabled. Nesse modo, o Unity ainda aplica a curva de volume .In this mode, Unity still applies the Volume curve. Caso contrário, se o usuário tivesse de desabilitar a espacial quando estiver longe da origem, ele ouviria o volume aumentar abruptamente.Otherwise, if the user were to disable spatialization when far from the source, they would hear the volume increase abruptly.

Se você preferir desabilitar totalmente a espacialização, modifique o script para ajustar também a Propriedade booliana booleana da variável SourceObject .If you prefer to fully disable spatialization, modify the script to also adjust the spatialization boolean property of the SourceObject variable.

Anexe o script e o conduza do botãoAttach your script and drive it from the button

No painel Inspetor do Quad, clique em Adicionar componente e adicione o script Spatial-off :On the Inspector pane of the Quad, click Add Component and add the Spatialize On Off script:

Adicionar script ao Quad

No componente espacial em diante do Quad:On the Spatialize On Off component of the Quad:

  1. Localizar o subobjeto PressableButtonHoloLens2-> IconAndText-> TextMeshPro na hierarquiaFind the PressableButtonHoloLens2 -> IconAndText -> TextMeshPro subobject in the Hierarchy
  2. Arraste o TextMeshPro suboject para o campo ButtonTextObject do componente espacial on offDrag the TextMeshPro suboject onto the ButtonTextObject field of the Spatialize On Off component

Após essas alterações, o componente espacial ativado do Quad terá a seguinte aparência:After these changes, the Spatialize On Off component of the Quad will look like this:

Espacial desabilitada básica

Para definir o botão para chamar o script Spatial on off quando o botão for liberado, abra o painel Inspetor do objeto PressableButtonHoloLens2 , localize o componente interagindo e:To set the button to call the Spatialize On Off script when the button is released, open the Inspector pane of the PressableButtonHoloLens2 object, find the Interactable component, and:

  1. Localizar a região OnClick () da subseção de eventosFind the OnClick () region of the Events subsection
  2. Arraste o Quad da hierarquia para o slot do objeto de destino.Drag the Quad from the Hierarchy into the target object slot.
  3. Selecione SpatializeOnOff. SwapSpatialization na caixa suspensa ação.Select SpatializeOnOff.SwapSpatialization from the action drop-down box.

Após essas alterações, o componente interagindo terá a seguinte aparência:After these changes, the Interactable component will look like this:

Configurações de ação do botão

Próximas etapasNext steps

Experimente seu aplicativo em um HoloLens 2 ou no editor do Unity.Try out your app on a HoloLens 2 or in the Unity editor. No aplicativo, agora você pode tocar no botão para ativar e desativar a espacial no vídeo.In the app, you can now touch the button to activate and deactivate spatialization on the video. Ao testar no editor do Unity, pressione a barra de espaço e role com a roda de rolagem para ativar a simulação de mão.When testing in the Unity editor, press the space bar and scroll with the scroll wheel to activate hand simulation.

Continue no capítulo 5 para adicionar uma distância percebida às fontes de som usando o reverberar.Continue on to Chapter 5 to add perceived distance to sound sources using reverb.