Esercizio - Abilitare e disabilitare la spazializzazione in fase di esecuzione

Completato

In questa unità si apprenderà come abilitare e disabilitare la spazializzazione in fase di esecuzione e testarla nell'editor Unity e in HoloLens 2.

Aggiungere lo script di controllo della spazializzazione

  1. Fare clic con il pulsante destro del mouse nella finestra Project e scegliere Create>C# Script per creare un nuovo script C#. Immettere un nome appropriato per lo script; ad esempio SpatializeOnOff.

    Screenshot of creating a script.

  2. Nella finestra Project fare doppio clic sullo script per aprirlo in Visual Studio. Sostituire il contenuto dello script predefinito con quanto segue:

    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;
        }
    }
    

    Nota

    Per abilitare o disabilitare la spazializzazione, lo script regola solo la proprietà spatialBlend, lasciando abilitata la proprietà spatialization. In questa modalità Unity applica comunque la curva Volume. In caso contrario, se l'utente dovesse disabilitare la spazializzazione lontano dall'origine, il volume aumenterebbe bruscamente.

    Se si preferisce disabilitare completamente la spazializzazione, modificare lo script per regolare anche la proprietà booleana Spatialization della variabile SourceObject.

Collegare lo script ed eseguirlo dal pulsante

  1. Selezionare Quad nella gerarchia. Nella finestra Inspector usare il pulsante Add Component per aggiungere SpatializeOnOff(Script)

    Screenshot of Add script to quad.

  2. Nella finestra Hierarchy individuare PressableButton_32x32mm_IconAndTextUnder>TextLabelUnder. Con l'oggetto Quad ancora selezionato nella finestra Hierarchy, individuare nella finestra Inspector il componente Spatialize On Off (Script) e trascinare il componente TextLabelUnder nel campo Button Text Object.

    Screenshot of finding the Quad object in the hierarchy, with the SpatialierOnOff component.

  3. Per impostare il pulsante per chiamare lo script SpatializeOnOff quando viene rilasciato il pulsante, è necessario configurare uno script Interactable. Selezionare l'oggetto PressableButton_32x32mm_IconAndTextUnder nella finestra Gerarchia. Nella finestra Inspector individuare il componente Pressable Button e selezionare l'icona + sotto l'evento OnClicked ().

    1. Con l'oggetto PressableButton_32x32mm_IconAndTextUnder ancora selezionato nella finestra Hierarchy, fare clic e trascinare l'oggetto Quad dalla finestra Hierarchy nel campo None (Object) vuoto dell'evento appena aggiunto per fare in modo che l'oggetto ButtonParent rimanga in ascolto dell'evento clic del pulsante attivato a partire da questo pulsante.

    2. Selezionare l'elenco a discesa No Function, quindi selezionare SpatializeOnOff>SwapSpatialization () per attivare e disattivare l'audio spaziale.

    Screenshot of Button action settings.