実行時の spatialization の有効化と無効化Enabling and disabling spatialization at run time

目標Objectives

この4番目の章では、次のことについて説明します。In this 4th chapter, you'll:

  • Game オブジェクトの spatialization を制御する新しいスクリプトを追加しますAdd a new script to control spatialization on a game object
  • ボタンの操作から spatialization コントロールスクリプトを駆動するDrive the spatialization control script from button actions

Spatialization コントロールスクリプトの追加Add spatialization control script

プロジェクト ペイン内を右クリックし、[ Create-> c# スクリプト] を選択して新しい c# スクリプトを作成します。Right-click in the Project pane and create a new C# script by choosing Create -> C# Script. スクリプトに "SpatializeOnOff" という名前を指定します。Name your script "SpatializeOnOff".

スクリプトの作成

プロジェクト ウィンドウでスクリプトをダブルクリックして、Visual Studio で開きます。Double-click the script in the Project pane to open it in Visual Studio. 既定のスクリプトの内容を次の内容に置き換えます。Replace the default script contents with the following:

注意

スクリプトのいくつかの行がコメントアウトされています。これらの行は、 5 章でコメント解除されます。Several lines of the script are commented out. These lines will be uncommented in Chapter 5.

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

}

注意

Spatialization を有効または無効にするために、スクリプトは spatialBlend プロパティを調整するだけで、 spatialization プロパティを有効のままにします。To enable or disable spatialization, the script only adjusts the spatialBlend property, leaving the spatialization property enabled. このモードでは、Unity でも ボリューム 曲線が適用されます。In this mode, Unity still applies the Volume curve. そうしないと、ユーザーがソースから遠くに spatialization を無効にした場合に、音量が急激に増加していることが聞こえます。Otherwise, if the user were to disable spatialization when far from the source, they would hear the volume increase abruptly.

Spatialization を完全に無効にする場合は、 SourceObject 変数の spatialization boolean プロパティも調整するようにスクリプトを変更します。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

クワッド の [インスペクター ] ウィンドウで、[コンポーネントの追加] をクリックし、 Spatialize On Off スクリプトを追加します。On the Inspector pane of the Quad, click Add Component and add the Spatialize On Off script:

スクリプトをクワッドに追加する

クワッドSpatialize on Off コンポーネントで、次のようにします。On the Spatialize On Off component of the Quad:

  1. 階層PressableButtonHoloLens2-> iconandtext-> TextMeshPro subject を見つけます。Find the PressableButtonHoloLens2 -> IconAndText -> TextMeshPro subject in the Hierarchy:

階層内の PressableButtonHoloLens2 オブジェクトを検索する

  1. TextMeshPro Subject を Spatialize On Off コンポーネントの buttontextobject フィールドにドラッグします。Drag the TextMeshPro subject onto the ButtonTextObject field of the Spatialize On Off component

これらの変更が完了すると、 QuadSpatialize コンポーネントは次のようになります。After these changes, the Spatialize On Off component of the Quad will look like this:

Spatialize on off basic

ボタンが離されたときに Spatialize On Off スクリプトを呼び出すようにボタンを設定するには、 PressableButtonHoloLens2 オブジェクトの [インスペクター ] ペインを開き、対話型 コンポーネントを見つけます。To set the button to call the Spatialize On Off script when the button is released, open the Inspector pane of the PressableButtonHoloLens2 object, find the Interactable component, and:

  1. Events サブセクションの OnClick () 領域を検索します。Find the OnClick () region of the Events subsection
  2. 階層 からターゲットオブジェクトスロットに クワッド をドラッグします。Drag the Quad from the Hierarchy into the target object slot.
  3. [アクション] ボックスの一覧から [ SpatializeOnOff ] を選択します。Select SpatializeOnOff.SwapSpatialization from the action drop-down box.

これらの変更が完了すると、 対話型 コンポーネントは次のようになります。After these changes, the Interactable component will look like this:

ボタンの操作の設定

次のステップNext steps

HoloLens 2 または Unity エディターでアプリを試してみてください。Try out your app on a HoloLens 2 or in the Unity editor. アプリで、ボタンをタッチして、ビデオの spatialization をアクティブ化および非アクティブ化できるようになりました。In the app, you can now touch the button to activate and deactivate spatialization on the video. Unity エディターでテストする場合は、スペースバーを押し、スクロールホイールを使用してスクロールし、ハンドシミュレーションをアクティブにします。When testing in the Unity editor, press the space bar and scroll with the scroll wheel to activate hand simulation.