Unity_Lesson

1. 基本的な音の鳴らし方:AudioSourceを使う

最も基本的な音の鳴らし方は、UnityのAudioSourceコンポーネントを使う方法です。AudioSourceは、オーディオクリップ(音源)を再生するためのコンポーネントです。

ステップ:

  1. 音を再生したいオブジェクトに AudioSource コンポーネントを追加。
  2. 再生したい AudioClipAudioSource に設定。
  3. スクリプトで AudioSource.Play() を呼び出して音を再生。

サンプルプログラム:

using UnityEngine;

public class SoundPlayer : MonoBehaviour
{
    public AudioClip soundClip;  // 音声ファイルをインスペクターで設定
    private AudioSource audioSource;

    void Start()
    {
        // AudioSource コンポーネントを取得
        audioSource = GetComponent<AudioSource>();
        
        // 再生したい AudioClip を設定
        audioSource.clip = soundClip;
        
        // 音を再生
        audioSource.Play();
    }
}

このスクリプトでは、AudioSourceコンポーネントがアタッチされているオブジェクトで指定されたAudioClipを再生します。audioSource.Play()で音を鳴らすことができます。




2. 特定のタイミングで音を鳴らす

音を再生するタイミングを指定する場合、AudioSource.PlayOneShot() メソッドを使います。これは、同じ音を繰り返し鳴らす際に便利です。

サンプルプログラム:

using UnityEngine;

public class SoundTrigger : MonoBehaviour
{
    public AudioClip soundClip;  // インスペクターで設定可能
    private AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    void Update()
    {
        // スペースキーを押したら音を再生
        if (Input.GetKeyDown(KeyCode.Space))
        {
            audioSource.PlayOneShot(soundClip);
        }
    }
}

このスクリプトでは、プレイヤーがスペースキーを押したときに音が再生されます。PlayOneShot() は一度に複数の音を再生できるので、短い効果音に適しています。




3. 位置に基づく音の再生(3Dサウンド)

Unityでは、3Dサウンドを簡単に扱うことができます。オーディオの再生位置を設定すると、プレイヤーがその音源に近づいたり遠ざかったりすることで、音の強さが変化します。

サンプルプログラム:

using UnityEngine;

public class PositionalSound : MonoBehaviour
{
    public AudioClip soundClip;
    public Vector3 soundPosition;
    private AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    void Update()
    {
        // クリックで指定した位置に音を再生
        if (Input.GetMouseButtonDown(0))
        {
            // クリックした位置に音を鳴らす
            AudioSource.PlayClipAtPoint(soundClip, soundPosition);
        }
    }
}

AudioSource.PlayClipAtPoint() を使うことで、特定の座標に音を発生させることができます。この方法は、爆発音や遠くから聞こえる音などに適しています。




4. BGMをループ再生する

背景音楽(BGM)をループ再生する場合、AudioSource.looptrue に設定します。

サンプルプログラム:

using UnityEngine;

public class BackgroundMusic : MonoBehaviour
{
    public AudioClip bgmClip;
    private AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
        audioSource.clip = bgmClip;
        audioSource.loop = true;  // ループを有効にする
        audioSource.Play();  // BGMを再生
    }
}

このスクリプトは、シーン開始時に指定されたBGMを無限ループで再生します。




5. 音量やピッチを制御する

音の再生中にAudioSourceのプロパティを使って、音量(volume)やピッチ(pitch)をリアルタイムで変更することが可能です。

サンプルプログラム:

using UnityEngine;

public class DynamicSoundControl : MonoBehaviour
{
    private AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    void Update()
    {
        // 上矢印キーで音量を上げ、下矢印キーで音量を下げる
        if (Input.GetKey(KeyCode.UpArrow))
        {
            audioSource.volume = Mathf.Clamp(audioSource.volume + Time.deltaTime, 0f, 1f);
        }
        else if (Input.GetKey(KeyCode.DownArrow))
        {
            audioSource.volume = Mathf.Clamp(audioSource.volume - Time.deltaTime, 0f, 1f);
        }

        // 左矢印キーでピッチを下げ、右矢印キーでピッチを上げる
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            audioSource.pitch = Mathf.Clamp(audioSource.pitch - Time.deltaTime, 0.5f, 2f);
        }
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            audioSource.pitch = Mathf.Clamp(audioSource.pitch + Time.deltaTime, 0.5f, 2f);
        }
    }
}

このプログラムは、音の音量やピッチをリアルタイムで変更できるようにしています。Mathf.Clamp() は音量やピッチを指定した範囲内に制限します。




6. AudioMixerを使用して音を管理する

UnityのAudioMixerを使うことで、複数の音の管理や音量の調整が簡単に行えます。ゲーム内で音のカテゴリ(BGM、SEなど)を分けて管理したい場合に便利です。

ステップ:

  1. UnityエディタでAudioMixerを作成し、グループを作っておきます。
  2. AudioSource に対して作成したAudioMixerを設定し、スクリプトで音量を調整します。

サンプルプログラム:

using UnityEngine;
using UnityEngine.Audio;

public class MixerControl : MonoBehaviour
{
    public AudioMixer audioMixer;

    void Update()
    {
        // 上矢印キーでBGMの音量を上げ、下矢印キーで下げる
        if (Input.GetKey(KeyCode.UpArrow))
        {
            audioMixer.SetFloat("BGMVolume", Mathf.Lerp(-80f, 0f, Time.deltaTime));
        }
        else if (Input.GetKey(KeyCode.DownArrow))
        {
            audioMixer.SetFloat("BGMVolume", Mathf.Lerp(0f, -80f, Time.deltaTime));
        }
    }
}

ここでは、AudioMixerSetFloat()メソッドを使用して、特定のグループの音量を変更しています。AudioMixerを使用することで、音のバランス調整やエフェクトの適用が簡単に行えます。




7. マイク入力を利用する

Unityでは、マイク入力を利用してリアルタイムで音を取得することができます。これは、マイクを使ったインタラクティブな体験や音声認識機能を実装する際に役立ちます。

サンプルプログラム:

using UnityEngine;

public class MicrophoneInput : MonoBehaviour
{
    private AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();

        // マイク入力をAudioClipとして設定
        string microphone = Microphone.devices[0];
        audioSource.clip = Microphone.Start(microphone, true, 10, 44100);
        
        // 音の再生
        audioSource.loop = true;
        audioSource.Play();
    }
}

このプログラムでは、Microphoneクラスを使って、接続されているマイクの音声をリアルタイムで取得し、AudioSourceを介して再生します。