Esercizio - Abilitare e disabilitare la spazializzazione in fase di esecuzione
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
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.
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
Selezionare Quad nella gerarchia. Nella finestra Inspector usare il pulsante Add Component per aggiungere SpatializeOnOff(Script)
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.
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 ().
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.
Selezionare l'elenco a discesa No Function, quindi selezionare SpatializeOnOff>SwapSpatialization () per attivare e disattivare l'audio spaziale.