4. Включение и отключение функции пространственности во время выполнения4. Enabling and disabling spatialization at run time

ОбзорOverview

В этом руководстве вы узнаете, как включить и отключить пространственное выполнение во время выполнения и проверить это в редакторе Unity и HoloLens 2.In this tutorial, you will learn how to Enable and disable spatialization at run time and test this in the unity editor and HoloLens 2.

ЗадачиObjectives

  • Добавление нового скрипта для управления пространственностью игрового объектаAdd a new script to control spatialization on a game object
  • Использование сценария управления пространственными из действий кнопкиDrive the spatialization control script from button actions

Добавление скрипта управления пространственнымиAdd spatialization control script

Щелкните правой кнопкой мыши в окне проекта и выберите создать > Скрипт c# , чтобы создать новый скрипт c#, введите подходящее имя для скрипта, например спатиализеонофф:Right-click in the Project window and choose Create > C# Script to create a new C# script, enter a suitable name for the script, for example, SpatializeOnOff:

Создать скрипт

Дважды щелкните скрипт в окне проекта, чтобы открыть его в Visual Studio.Double-click the script in the Project window to open it in Visual Studio. Замените содержимое скрипта по умолчанию следующим:Replace the default script contents with the following:

Примечание

Несколько строк сценария заносятся в комментарий. Эти строки будут раскомментироваться в следующей главе: использование переглагола для добавления расстояния к пространственному аудио.Several lines of the script are commented out. These lines will be uncommented in Next Chapter: Using reverb to add distance to spatial audio.

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

}

Примечание

Чтобы включить или отключить пространственность, скрипт настраивает только свойство спатиалбленд , а свойство пространственное включено.To enable or disable the spatialization, the script only adjusts the spatialBlend property, leaving the spatialization property enabled. В этом режиме Unity по-прежнему применяет кривую тома .In this mode, Unity still applies the Volume curve. В противном случае, если пользователю пришлось отключить пространственное расстояние от источника, он будет слышать внезапное увеличение объема данных.Otherwise, if the user were to disable spatialization when far from the source, they would hear the volume increase abruptly. Если вы предпочитаете полностью отключить пространственность, измените скрипт, чтобы также настроить логическое свойство пространственности для переменной объект SourceObject .If you prefer to fully disable spatialization, modify the script to also adjust the spatialization boolean property of the SourceObject variable.

Присоединение сценария и его добавление с помощью кнопкиAttach your script and drive it from the button

Выберите « четыре » в иерархии и в окне инспектора нажмите кнопку Добавить компонент, чтобы добавить спатиализеонофф (сценарий) .Select Quad in the Hierarchy and in the Inspector window, use the Add Component button to add SpatializeOnOff(Script)

Добавить сценарий к четырем

В иерархии откройте PressableButtonHoloLens2 > иконандтекст > текстмешпро.In the Hierarchy locate PressableButtonHoloLens2 > IconAndText > TextMeshPro.

Если объект Quad по-прежнему выбран в иерархии, в окне инспектора выберите компонент спатиализе On Off (скрипт) и перетащите компонент текстмешпро в PressableButtonHoloLens2.With the Quad object still selected in the Hierarchy, in the Inspector window, locate the Spatialize On Off (Script) component and Drag and drop TextMeshPro Component of the PressableButtonHoloLens2.

Поиск объекта PressableButtonHoloLens2 в иерархии

Чтобы установить для кнопки вызов скрипта спатиализеонофф при отпускании кнопки, необходимо настроить взаимодействующий скрипт.To set the button to call the SpatializeOnOff script when the button is released You need to configure interactable script.

В окне Иерархия выберите PressableButtonHoloLens2.In the Hierarchy window, select the PressableButtonHoloLens2. В окне инспектора выберите компонент " взаимодействие (скрипт) " и щелкните значок "+" под событием OnClick ().In the Inspector window, locate the Interactable (Script) component and click on + icon under OnClick () event.

  • Когда объект PressableButtonHoloLens2 все еще выбран в окне Иерархия, щелкните и перетащите объект Quad из окна Иерархия в пустое поле нет (объект) события, которое вы только что добавили, чтобы объект буттонпарент прослушивает событие нажатия кнопки мыши на этой кнопке:With the PressableButtonHoloLens2 object still selected in the Hierarchy window, click-and-drag the Quad object from the Hierarchy window into the empty None (Object) field of the event you just added to make the ButtonParent object listen for button click event from this button:

  • Откройте раскрывающийся список No Function (Нет функции) того же события.Click the No Function dropdown of the same event. Затем выберите спатиализеонофф > свапспатиализатион () , чтобы включить и отключить Пространственный звук.Then select SpatializeOnOff > SwapSpatialization () to turn on and off the Spatial audio

Параметры действия кнопки

Поздравляем!Congratulations

В этом руководстве вы узнали, как включать и отключать пространственные во время выполнения, тестировать приложение на HoloLens 2 или в редакторе Unity.In this tutorial, you have learned how to enable and disable spatialization at run time, test out the app on a HoloLens 2 or in the Unity editor. Теперь в приложении можно нажать кнопку, чтобы активировать и деактивировать пространственность звука.In the app, you can now click the button to activate and deactivate spatialization of the audio.

В следующем учебном курсе вы добавите действие с переглаголом, чтобы дать звуковое представление о расстоянии.In the next tutorial you'll add a reverb effect to give sounds a sense of distance.

Совет

Сведения о том, как правильно скомпилировать проект Unity и развернуть его в HoloLens 2, см. в разделе Создание приложения для HoloLens 2.For a reminder on how to build and deploy your Unity project to HoloLens 2, you can refer to the Building your app to your HoloLens 2 instructions.