练习 - 启用和禁用运行时空间化

已完成

在本单元中,你将了解如何在运行时启用和禁用空间化,以及如何在 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 属性,使空间化属性保留为启用。 在此模式下,Unity 仍应用音量曲线。 否则,如果用户在远离源时禁用空间化,他们将听到音量突然增加。

    如果你希望完全禁用空间化,请修改脚本以同时调整 SourceObject 变量的 Spatialization 布尔属性。

附加脚本并通过按钮驱动

  1. 在“层次结构”中选择“四边形”。 在“检查器”窗口中,使用“添加组件”按钮添加 SpatializeOnOff(脚本)

    Screenshot of Add script to quad.

  2. 在“层次结构”窗口中,找到“PressableButton_32x32mm_IconAndTextUnder”>“TextLabelUnder”。 在“层次结构”中仍选中“四边形”对象的情况下,在“检查器”窗口中找到“启用/禁用空间化(脚本)”组件,然后将“TextLabelUnder”组件拖放到“按钮文本对象”字段。

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

  3. 若要设置按钮以在按钮释放时调用 SpatializeOnOff 脚本,你需要配置可交互脚本。 在“层次结构”窗口中选择 PressableButton_32x32mm_IconAndTextUnder。 在“检查器”窗口中,找到“可按按钮”组件,然后选择“OnClicked ()”事件下的 + 图标。

    1. 在“层次结构”窗口中仍选中“PressableButton_32x32mm_IconAndTextUnder”对象的情况下,单击“四边形”对象并将其从“层次结构”窗口拖动到刚刚添加的事件的空“无(对象)”字段中,使 ButtonParent 对象侦听来自此按钮的按钮单击事件:

    2. 选择“无函数”下拉列表,然后选择“SpatializeOnOff”>“SwapSpatialization ()”以打开或关闭空间音频。

    Screenshot of Button action settings.