36歩目 BGMを実装! Unityで1日1ステップ!ノンフィールドRPG開発日記

1日1歩開発日記

ふりかえり

前回は「会心の一撃」の強化機能を実装し、より強敵に挑めるようになりました!

前回の投稿はこちら↓

BGMを実装!

今回は、はじまりの草原やまよいの森など各ステージごとのBGMを実装して、より没入感のあるゲームにしていきます!

スクリプトの変更

AudioManager.cs

BGMの再生・停止・フェードアウト機能を追加します。

    [Header("BGM Audio Source")]
    public AudioSource bgmAudioSource; // BGM用

    [Header("BGM Audio Clips")]
    public AudioClip titleBGM; // タイトルBGM
    public AudioClip stage1BGM; // ステージ1 BGM(はじまりの草原)
    public AudioClip stage2BGM; // ステージ2 BGM(まよいの森)
    public AudioClip stage3BGM; // ステージ3 BGM
    public AudioClip stage4BGM; // ステージ4 BGM
    public AudioClip stage5BGM; // ステージ5 BGM
    public AudioClip bossBGM; // ボス戦BGM

    // BGMを再生
    public void PlayBGM(AudioClip bgmClip)
    {
        if (bgmClip != null && bgmAudioSource != null)
        {
            bgmAudioSource.clip = bgmClip;
            bgmAudioSource.loop = true; // BGMはループ再生
            bgmAudioSource.Play();
            Debug.Log($"BGMを再生しました: {bgmClip.name}");
        }
    }

    // BGMを停止
    public void StopBGM()
    {
        if (bgmAudioSource != null)
        {
            bgmAudioSource.Stop();
            Debug.Log("BGMを停止しました");
        }
    }

    // BGMをフェードアウト
    public void FadeOutBGM(float duration = 1.0f)
    {
        if (bgmAudioSource != null)
        {
            StartCoroutine(FadeOutBGMCoroutine(duration));
        }
    }

    // BGMフェードアウトのコルーチン
    private System.Collections.IEnumerator FadeOutBGMCoroutine(float duration)
    {
        float startVolume = bgmAudioSource.volume;
        float currentTime = 0;

        while (currentTime < duration)
        {
            currentTime += Time.deltaTime;
            bgmAudioSource.volume = Mathf.Lerp(startVolume, 0, currentTime / duration);
            yield return null;
        }

        bgmAudioSource.Stop();
        bgmAudioSource.volume = startVolume; // 音量を元に戻す
        Debug.Log("BGMをフェードアウトしました");
    }

StageManager.cs

ステージに応じて適切なBGMを再生します。

    // ステージに応じたBGMを再生
    private void PlayStageBGM(int stage)
    {
        if (audioManager == null) return;

        AudioClip bgmClip = GetBGMForStage(stage);
        if (bgmClip != null)
        {
            audioManager.PlayBGM(bgmClip);
        }
    }

    // ステージに応じたBGMを取得
    private AudioClip GetBGMForStage(int stage)
    {
        switch (stage)
        {
            case 1:
                return audioManager.stage1BGM;
            case 2:
                return audioManager.stage2BGM;
            case 3:
                return audioManager.stage3BGM;
            case 4:
                return audioManager.stage4BGM;
            case 5:
                return audioManager.stage5BGM;
            default:
                // ステージ5以降はステージ5のBGMを再生
                return audioManager.stage5BGM;
        }
    }

    // タイトルBGMを再生
    public void PlayTitleBGM()
    {
        if (audioManager != null && audioManager.titleBGM != null)
        {
            audioManager.PlayBGM(audioManager.titleBGM);
        }
    }

    // BGMを停止
    public void StopBGM()
    {
        if (audioManager != null)
        {
            audioManager.StopBGM();
        }
    }

    // BGMをフェードアウト
    public void FadeOutBGM(float duration = 1.0f)
    {
        if (audioManager != null)
        {
            audioManager.FadeOutBGM(duration);
        }
    }

Unityでの設定

  • AudioManagerに新しく追加したbgmAudioSourceをアタッチ
  • 各BGMファイルをAudioClipに設定

動作確認

しっかりBGMが流れていることが確認できました!

またはじまりの草原から迷いの森に移動したらBGMも変更されました!

まとめ

今回はステージごとのBGMを実装しました!

音があるだけでゲームの雰囲気が一気にアップしますね!

次回予告

次回は「設定画面」を実装していきます!

お楽しみに!

タイトルとURLをコピーしました