Abilitazione e disabilitazione della spazializzazione in fase di esecuzioneEnabling and disabling spatialization at run time

ObiettiviObjectives

In questo quarto capitolo, verranno illustrate le operazioni seguenti:In this 4th chapter, you'll:

  • Aggiungere un nuovo script per controllare la spazializzazione in un oggetto giocoAdd a new script to control spatialization on a game object
  • Unità dello script di controllo della spazializzazione dalle azioni dei pulsantiDrive the spatialization control script from button actions

Aggiungi script di controllo di spazializzazioneAdd spatialization control script

Fare clic con il pulsante destro del mouse nel riquadro progetto e creare un nuovo script c# scegliendo Crea-> script c#.Right-click in the Project pane and create a new C# script by choosing Create -> C# Script. Denominare lo script "SpatializeOnOff".Name your script "SpatializeOnOff".

Crea script

Fare doppio clic sullo script nel riquadro progetto per aprirlo in Visual Studio.Double-click the script in the Project pane to open it in Visual Studio. Sostituire il contenuto dello script predefinito con il codice seguente:Replace the default script contents with the following:

Nota

Diverse righe dello script sono impostate come commento. Queste righe verranno annullate come commento nel capitolo 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;
    }

}

Nota

Per abilitare o disabilitare la spazializzazione, lo script regola solo la proprietà spatialBlend , lasciando abilitata la proprietà di spazializzazione .To enable or disable spatialization, the script only adjusts the spatialBlend property, leaving the spatialization property enabled. In questa modalità, Unity applica comunque la curva del volume .In this mode, Unity still applies the Volume curve. In caso contrario, se l'utente dovesse disabilitare la spazializzazione quando si è distante dall'origine, l'incremento del volume verrà improvvisamente interrotto.Otherwise, if the user were to disable spatialization when far from the source, they would hear the volume increase abruptly.

Se si preferisce disabilitare completamente la spazializzazione, modificare lo script in modo da regolare anche la proprietà Boolean di spazializzazione della variabile SourceObject .If you prefer to fully disable spatialization, modify the script to also adjust the spatialization boolean property of the SourceObject variable.

Alleghi lo script e lo guidi dal pulsanteAttach your script and drive it from the button

Nel riquadro Inspector del Quad fare clic su Add Component e aggiungere lo script Spatialize on off :On the Inspector pane of the Quad, click Add Component and add the Spatialize On Off script:

Aggiungi script a Quad

Sul componente Spatialize on off del Quad:On the Spatialize On Off component of the Quad:

  1. Trovare l'oggetto PressableButtonHoloLens2-> IconAndText-> TextMeshPro nella gerarchia:Find the PressableButtonHoloLens2 -> IconAndText -> TextMeshPro subject in the Hierarchy:

Trovare l'oggetto PressableButtonHoloLens2 nella gerarchia

  1. Trascinare l'oggetto TextMeshPro nel campo ButtonTextObject del componente Spatialize on offDrag the TextMeshPro subject onto the ButtonTextObject field of the Spatialize On Off component

Una volta apportate queste modifiche, il componente Spatialize on of the Quad sarà simile al seguente:After these changes, the Spatialize On Off component of the Quad will look like this:

Spatialize on Basic

Per impostare il pulsante per chiamare lo script Spatialize on off quando si rilascia il pulsante, aprire il riquadro Inspector dell'oggetto PressableButtonHoloLens2 , trovare il componente interactable 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. Trovare l'area OnClick () della sottosezione EventsFind the OnClick () region of the Events subsection
  2. Trascinare il Quad dalla gerarchia nello slot dell'oggetto di destinazione.Drag the Quad from the Hierarchy into the target object slot.
  3. Selezionare SpatializeOnOff. SwapSpatialization nella casella di riepilogo a discesa azione.Select SpatializeOnOff.SwapSpatialization from the action drop-down box.

Una volta apportate queste modifiche, il componente interagisce sarà simile al seguente:After these changes, the Interactable component will look like this:

Impostazioni azione pulsante

Passaggi successiviNext steps

Provare l'app in un HoloLens 2 o nell'editor di Unity.Try out your app on a HoloLens 2 or in the Unity editor. Nell'app è ora possibile toccare il pulsante per attivare e disattivare la spazializzazione nel video.In the app, you can now touch the button to activate and deactivate spatialization on the video. Quando si esegue il test nell'editor di Unity, premere la barra spaziatrice e scorrere con la rotellina di scorrimento per attivare la simulazione manuale.When testing in the Unity editor, press the space bar and scroll with the scroll wheel to activate hand simulation.