【学習】BGM と効果音(AudioSource、AudioClip)
これまでの学習では、
- タイトル、ゲーム、ゲームオーバーのシーン遷移を完成させた
- 横スクロールアクションとして1本のゲームが形になった
という形でゲームの流れを整えてきました。
しかし、音がなく、ゲームらしさに欠けます。
BGM と効果音
を追加して、ゲームを仕上げます。
今回は AudioSource と AudioClip を使った音の再生方法を学びます。
今日作るもの
- ジャンプ時の効果音
- 敵に当たった時の効果音(ゲームオーバー)
- ゲーム中の BGM(ループ再生)
- タイトル画面の BGM(任意)
必要なオブジェクト
| オブジェクト | 役割 |
|---|---|
| AudioSource | 音を再生するコンポーネント |
| AudioClip | 再生する音データ(WAV、MP3 など) |
手順1:音ファイルを用意する
- 効果音・BGM のファイル(WAV、MP3、OGG)を用意
- Project にドラッグしてインポート(Assets/Audio などに配置)
- インポート設定で Load Type を確認(小さい効果音は Decompress On Load など)
手順2:ジャンプ効果音を鳴らす
- Player に Audio Source コンポーネントを追加
- Audio Clip にジャンプ音を割り当て
- Play On Awake をオフにする
- PlayerController でジャンプ時に再生
[SerializeField] private AudioClip jumpSound;
private AudioSource audioSource;
void Start()
{
rb = GetComponent<Rigidbody2D>();
audioSource = GetComponent<AudioSource>();
}
void OnJump(InputValue value)
{
if (value.isPressed)
{
rb.AddForce(new Vector2(0, jumpForce), ForceMode2D.Impulse);
if (jumpSound != null)
audioSource.PlayOneShot(jumpSound);
}
}PlayOneShot は、再生中の音を止めずに重ねて再生できます。
手順3:ゲームオーバー効果音を鳴らす
- Player に被弾用の AudioClip を用意するか、GameOverManager で再生
- 敵に当たった瞬間に効果音を鳴らしてからシーン遷移
[SerializeField] private AudioClip gameOverSound;
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
if (gameOverSound != null)
AudioSource.PlayClipAtPoint(gameOverSound, transform.position);
SceneManager.LoadScene("GameOver");
}
}PlayClipAtPoint は、指定位置で一度だけ再生します(オブジェクトが Destroy されても再生される)。
手順4:BGM をループ再生する
- 空の GameObject を作成し、
BGMPlayerと名付ける - Audio Source を追加
- Audio Clip に BGM を割り当て
- Loop にチェックを入れる
- Play On Awake にチェックを入れる(シーン開始時に自動再生)
重要ポイント
- PlayOneShot … 効果音の重ね再生に使う
- PlayClipAtPoint … オブジェクトが消える直前に鳴らす音に使う
- Loop … BGM のループ再生に使う
- 音ファイルは WAV、MP3、OGG に対応
発展アイデア
- 音量を Slider で調整する
- シーンごとに BGM を切り替える