Ćwiczenie — włączanie i wyłączanie przestrzennego dźwięku podczas działania programu

Ukończone

W tej jednostce dowiesz się, jak włączyć i wyłączyć przestrzenność w czasie działania oraz przetestować przestrzenność w edytorze Unity i na urządzeniu HoloLens 2.

Dodawanie skryptu kontrolki przestrzennej

  1. Kliknij prawym przyciskiem myszy okno Project (Projekt) i wybierz pozycję Create>C# Script (Utwórz skrypt języka C#), aby utworzyć nowy skrypt języka C#. Wprowadź odpowiednią nazwę skryptu; na przykład SpatializeOnOff.

    Zrzut ekranu przedstawiający tworzenie skryptu.

  2. Kliknij dwukrotnie skrypt w oknie Projekt, aby otworzyć go w programie Visual Studio. Zastąp domyślną zawartość skryptu następującym kodem:

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

    Notatka

    Aby włączyć lub wyłączyć spatializację, skrypt dostosowuje tylko właściwość spatialBlend, pozostawiając właściwość spatialization włączoną. W tym trybie Unity nadal stosuje krzywą woluminu . W przeciwnym razie, jeśli użytkownik wyłączy przestrzenność, będąc daleko od źródła, nagle usłyszy zwiększenie głośności.

    Jeśli wolisz całkowicie wyłączyć spacjalizację, zmodyfikuj skrypt, aby również dostosować właściwość logiczną SourceObject zmiennej Spatialization.

Dołącz skrypt i uruchom go za pomocą przycisku

  1. Wybierz Quad w Hierarchii. W oknie Inspector (Inspektor) użyj przycisku Dodaj element, aby dodać SpatializeOnOff(Script)

    Zrzut ekranu przedstawiający dodawanie skryptu do czworokąta.

  2. W oknie Hierarchia (Hierarchy) znajdź PressableButton_32x32mm_IconAndTextUnder>TextLabelUnder. Gdy obiekt Quad jest nadal zaznaczony w Hierarchii, w oknie Inspektor znajdź komponent Spatialize On Off (Script) i przeciągnij oraz upuść komponent TextLabelUnder do pola Button Text Object.

    Zrzut ekranu przedstawiający znajdowanie obiektu Quad w hierarchii ze składnikiem SpatialierOnOff.

  3. Aby ustawić przycisk w celu wywołania skryptu SpatializeOnOff po zwolnieniu przycisku, należy skonfigurować skrypt umożliwiający interakcję. W oknie Hierarchia wybierz PressableButton_32x32mm_IconAndTextUnder. W oknie Inspektora znajdź składnik Pressable Button i wybierz ikonę + pod zdarzeniem OnClicked ().

    1. Po wybraniu obiektu PressableButton_32x32mm_IconAndTextUnder w oknie Hierarchii, kliknij i przeciągnij obiekt Czworokąt z okna Hierarchii do pustego None (Obiekt) pola zdarzenia, które właśnie dodano, aby obiekt ButtonParent nasłuchiwał zdarzenia kliknięcia przycisku z tego przycisku.

    2. Wybierz listę rozwijaną Brak funkcji, a następnie wybierz SpatializeOnOff>SwapSpatialization (), aby włączyć i wyłączyć dźwięk przestrzenny.

    zrzut ekranu przedstawiający ustawienia akcji przycisku.