Ćwiczenie — włączanie i wyłączanie przestrzennych w czasie wykonywania

Ukończone

W tej lekcji dowiesz się, jak włączyć i wyłączyć przestrzenność w czasie wykonywania oraz przetestować przestrzenność w edytorze aparatu Unity i urządzeniu HoloLens 2.

Dodawanie skryptu kontrolki przestrzennej

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

    Screenshot of creating a script.

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

    Uwaga

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

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

Dołącz skrypt i wyjmij go z przycisku

  1. Wybierz pozycję Czworokąt w hierarchii. W oknie Inspector (Inspektor) użyj przycisku Dodaj składnik , aby dodać element SpatializeOnOff(Script)

    Screenshot of Add script to quad.

  2. W oknie Hierarchia znajdź PressableButton_32x32mm_IconAndTextUnder >TextLabelUnder. Po wybraniu obiektu Quad w hierarchii w oknie Inspector (Inspektor) znajdź składnik Spatialize On Off (Script) i przeciągnij i upuść składnik TextLabelUnder do pola Obiekt tekstowy przycisku.

    Screenshot of finding the Quad object in the hierarchy, with the SpatialierOnOff component.

  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 Inspector (Inspektor) znajdź składnik Pressable Button i wybierz ikonę + w zdarzeniu OnClicked ().

    1. Po wybraniu obiektu PressableButton_32x32mm_IconAndTextUnder w oknie Hierarchia kliknij i przeciągnij obiekt Czworokątz okna Hierarchia do pustego pola Brak (obiekt) właśnie dodanego zdarzenia, aby obiekt ButtonParent nasłuchiwał z tego przycisku.

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

    Screenshot of Button action settings.