AudioSource
を使う最も基本的な音の鳴らし方は、UnityのAudioSource
コンポーネントを使う方法です。AudioSource
は、オーディオクリップ(音源)を再生するためのコンポーネントです。
AudioSource
コンポーネントを追加。AudioClip
を AudioSource
に設定。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()
で音を鳴らすことができます。
音を再生するタイミングを指定する場合、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()
は一度に複数の音を再生できるので、短い効果音に適しています。
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()
を使うことで、特定の座標に音を発生させることができます。この方法は、爆発音や遠くから聞こえる音などに適しています。
背景音楽(BGM)をループ再生する場合、AudioSource.loop
を true
に設定します。
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を無限ループで再生します。
音の再生中に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()
は音量やピッチを指定した範囲内に制限します。
UnityのAudioMixer
を使うことで、複数の音の管理や音量の調整が簡単に行えます。ゲーム内で音のカテゴリ(BGM、SEなど)を分けて管理したい場合に便利です。
AudioMixer
を作成し、グループを作っておきます。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));
}
}
}
ここでは、AudioMixer
のSetFloat()
メソッドを使用して、特定のグループの音量を変更しています。AudioMixer
を使用することで、音のバランス調整やエフェクトの適用が簡単に行えます。
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
を介して再生します。