練習 - 在執行階段時啟用和停用空間化

已完成

在本單元中,您將了解如何在執行階段時啟用和停用空間化並在 Unity 編輯器和 HoloLens 2 中測試空間化。

新增空間化控制指令碼

  1. 以滑鼠右鍵按一下 [專案] 視窗,然後選擇 [建立]>[C# 指令碼] 以建立新的 C# 指令碼。 輸入指令碼的適當名稱;例如 SpatializeOnOff

    Screenshot of creating a script.

  2. 按兩下 [專案] 視窗中的指令碼,以在 Visual Studio 中開啟。 將預設指令碼內容取代為下列項目:

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

    注意

    若要啟用和停用空間化,指令碼僅會調整 spatialBlend 屬性並將 spatialization 屬性保持啟用。 在本課程模組中,Unity 仍會套用 Volume (音量) 曲線。 否則,如果使用者在遠離來源時停用空間化,則就會突然聽到音量變大。

    如果您偏好完全停用空間化,請修改指令碼並同時調整 SourceObject 變數的空間化布林值屬性。

附加指令碼並透過按鈕進行驅動

  1. 在 [階層] 中選取 [四邊形]。 在 [偵測器] 視窗中,使用 [新增元件] 按鈕來新增 SpatializeOnOff(Script)

    Screenshot of Add script to quad.

  2. 在 [階層] 視窗中,找出 PressableButton_32x32mm_IconAndTextUnder>TextLabelUnder。 在 [階層] 中仍保持選取 [四邊形] 物件時,在 [偵測器] 視窗中找出 SpatializeOnOff(Script) 元件,然後將 TextLabelUnder 元件拖放至 [按鈕文字物件] 欄位。

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

  3. 若要在放開按鈕時,將按鈕設定為呼叫 SpatializeOnOff 指令碼,則您必須設定可互動的指令碼。 在 [階層] 視窗中,選取 [PressableButton_32x32mm_IconAndTextUnder]。 在 [偵測器] 視窗中,找出 Pressable Button 元件並選取 OnClick () 事件下的 + 圖示。

    1. 在 [階層] 視窗中仍保持選取 [PressableButton_32x32mm_IconAndTextUnder] 物件時,將 [四邊形] 物件從 [階層] 視窗按住並拖曳至剛才所新增事件的空白 [無 (物件)] 欄位,讓 ButtonParent 物件可以從此按鈕接聽按鈕點擊事件。

    2. 選取 [無函式] 下拉式列表,然後選取 [SpatializeOnOff]>[SwapSpatialization ()],以開啟和關閉空間音訊。

    Screenshot of Button action settings.