Activation et désactivation de Spatialization au moment de l’exécutionEnabling and disabling spatialization at run time

ObjectifsObjectives

Dans ce quatrième chapitre, vous allez :In this 4th chapter, you'll:

  • Ajouter un nouveau script pour contrôler Spatialization sur un objet de jeuAdd a new script to control spatialization on a game object
  • Piloter le script de contrôle Spatialization à partir d’actions ButtonDrive the spatialization control script from button actions

Ajouter un script de contrôle SpatializationAdd spatialization control script

Cliquez avec le bouton droit dans le volet projet et créez un script c# en choisissant créer > script c#.Right-click in the Project pane and create a new C# script by choosing Create -> C# Script. Nommez votre script « SpatializeOnOff ».Name your script "SpatializeOnOff".

Création du script

Double-cliquez sur le script dans le volet projet pour l’ouvrir dans Visual Studio.Double-click the script in the Project pane to open it in Visual Studio. Remplacez le contenu du script par défaut par ce qui suit :Replace the default script contents with the following:

Notes

Plusieurs lignes du script sont commentées. Ces lignes ne seront pas commentées dans le Chapitre 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;
    }

}

Notes

Pour activer ou désactiver Spatialization, le script ajuste uniquement la propriété spatialBlend , en laissant la propriété Spatialization activée.To enable or disable spatialization, the script only adjusts the spatialBlend property, leaving the spatialization property enabled. Dans ce mode, Unity applique toujours la courbe du volume .In this mode, Unity still applies the Volume curve. Dans le cas contraire, si l’utilisateur devait désactiver Spatialization en loin de la source, il entendrait l’augmentation soudaine du volume.Otherwise, if the user were to disable spatialization when far from the source, they would hear the volume increase abruptly.

Si vous préférez désactiver complètement Spatialization, modifiez le script pour ajuster également la propriété booléenne Spatialization de la variable ObjetSource .If you prefer to fully disable spatialization, modify the script to also adjust the spatialization boolean property of the SourceObject variable.

Joindre votre script et le piloter à partir du boutonAttach your script and drive it from the button

Dans le volet de l' inspecteur du Quad, cliquez sur Ajouter un composant et ajoutez le script spatial on off :On the Inspector pane of the Quad, click Add Component and add the Spatialize On Off script:

Ajouter un script à quatre cœurs

Sur le composant spatialiser on off du Quad:On the Spatialize On Off component of the Quad:

  1. Recherchez l’objet PressableButtonHoloLens2-> IconAndText-> TextMeshPro dans la hiérarchie:Find the PressableButtonHoloLens2 -> IconAndText -> TextMeshPro subject in the Hierarchy:

Rechercher l’objet PressableButtonHoloLens2 dans la hiérarchie

  1. Faites glisser le sujet TextMeshPro dans le champ ButtonTextObject du composant spatialiser sur OFF .Drag the TextMeshPro subject onto the ButtonTextObject field of the Spatialize On Off component

Une fois ces modifications effectuées, le composant spatial on off du Quad ressemble à ce qui suit :After these changes, the Spatialize On Off component of the Quad will look like this:

Spatialiser en dehors de la base

Pour définir le bouton pour appeler le script spatial on off lorsque le bouton est relâché, ouvrez le volet Inspector de l’objet PressableButtonHoloLens2 , recherchez le composant interactif et :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. Recherche la région OnClick () de la sous-section événementsFind the OnClick () region of the Events subsection
  2. Faites glisser le Quad de la hiérarchie dans l’emplacement de l’objet cible.Drag the Quad from the Hierarchy into the target object slot.
  3. Sélectionnez SpatializeOnOff. SwapSpatialization dans la zone de liste déroulante action.Select SpatializeOnOff.SwapSpatialization from the action drop-down box.

Une fois ces modifications effectuées, le composant interagissant peut se présenter comme suit :After these changes, the Interactable component will look like this:

Paramètres d’action du bouton

Étapes suivantesNext steps

Essayez votre application sur un HoloLens 2 ou dans l’éditeur Unity.Try out your app on a HoloLens 2 or in the Unity editor. Dans l’application, vous pouvez maintenant toucher le bouton pour activer et désactiver Spatialization sur la vidéo.In the app, you can now touch the button to activate and deactivate spatialization on the video. Lors du test dans l’éditeur Unity, appuyez sur la barre d’espace et faites défiler la molette pour activer la simulation manuelle.When testing in the Unity editor, press the space bar and scroll with the scroll wheel to activate hand simulation.