学習記事一覧 · Unity横スクロールアクション

【学習】BGM と効果音(AudioSource、AudioClip)

これまでの学習では、

  • タイトル、ゲーム、ゲームオーバーのシーン遷移を完成させた
  • 横スクロールアクションとして1本のゲームが形になった

という形でゲームの流れを整えてきました。

しかし、がなく、ゲームらしさに欠けます。

BGM と効果音

を追加して、ゲームを仕上げます。

今回は AudioSourceAudioClip を使った音の再生方法を学びます。

今日作るもの

  • ジャンプ時の効果音
  • 敵に当たった時の効果音(ゲームオーバー)
  • ゲーム中の BGM(ループ再生)
  • タイトル画面の BGM(任意)

必要なオブジェクト

オブジェクト 役割
AudioSource 音を再生するコンポーネント
AudioClip 再生する音データ(WAV、MP3 など)

手順1:音ファイルを用意する

  1. 効果音・BGM のファイル(WAV、MP3、OGG)を用意
  2. Project にドラッグしてインポート(Assets/Audio などに配置)
  3. インポート設定で Load Type を確認(小さい効果音は Decompress On Load など)

手順2:ジャンプ効果音を鳴らす

  1. Player に Audio Source コンポーネントを追加
  2. Audio Clip にジャンプ音を割り当て
  3. Play On Awake をオフにする
  4. 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:ゲームオーバー効果音を鳴らす

  1. Player に被弾用の AudioClip を用意するか、GameOverManager で再生
  2. 敵に当たった瞬間に効果音を鳴らしてからシーン遷移
[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 をループ再生する

  1. 空の GameObject を作成し、BGMPlayer と名付ける
  2. Audio Source を追加
  3. Audio Clip に BGM を割り当て
  4. Loop にチェックを入れる
  5. Play On Awake にチェックを入れる(シーン開始時に自動再生)

重要ポイント

  • PlayOneShot … 効果音の重ね再生に使う
  • PlayClipAtPoint … オブジェクトが消える直前に鳴らす音に使う
  • Loop … BGM のループ再生に使う
  • 音ファイルは WAV、MP3、OGG に対応

発展アイデア

  • 音量を Slider で調整する
  • シーンごとに BGM を切り替える