0
0

【Unity】BGM・SEの鳴らし方と切り替え方

Last updated at Posted at 2024-08-12

まえがき

BGM・SEの鳴らし方について説明していきます。

ゲームには音楽がないと寂しいので。

音声データの用意

フリー素材を配布しているサイトなどで音声ファイルをダウンロードして下さい。
いくつかサイトを掲載しておきます。

もちろん、音声ファイルを用意できるなら別の方法でもいいです。

魔王魂
効果音ラボ
Dova
OtoLogic
Springin

Unityに実装

インストールした音声ファイルを鳴らせるようにしていきます。

フォルダの追加

ProjectのAssetsフォルダにAudioという名前のフォルダを作成して下さい。
その後、中に先ほど用意した音声データを入れます。今回は、BGMとSEの2種類を再生してみます。

スクリーンショット 2024-08-12 133950.png

BGMの再生

BGMという名前のAudio Sourceを作成して下さい。

スクリーンショット 2024-08-12 134202.png

InspectorからAudioClipに先ほどAudioフォルダに追加した音声データを入れて下さい。

Play On Awakeにチェックが入っていることを確認して下さい。また、Loopにチェックを入れると文字通りBGMがループ再生されるようになります。

スクリーンショット 2024-08-12 134710.png

これでBGMの実装は終了です。

実際にPlayしてBGMが再生されるか確認して下さい。もしBGMが聞こえない場合はToggle Audioがoffになっていないか確認してみて下さい。

スクリーンショット 2024-08-12 134432.png

BGMの切り替え

ゲームオーバー時などにBGMを切り替える方法について説明していきます。

まず、切り替えるBGMについて、先ほどと同様にしてBGMの実装を行って下さい。今回はGameOverBGMとします。
この際、Play On Awakeのチェックは外しておいて下さい。そうすることで最初はGameOverBGMを鳴らさない事ができます。

続いて、GameManagerのScriptに変更を加えていきます。もし無ければ作成して下さい。

以下、追加したプログラムの説明です。

まず、bgmとgameoverbgmというGameObjectとAudioSourceの変数を用意します。その後、Start関数でGameObjectとComponentをそれぞれ取得します。

GameOverBGMの部分は、作成したAudioSourceの名前と一致させて下さい。

続いて、BGMを切り替えたいトリガー部分にBGMを切り替えるプログラムを追加します。現在流れているBGMをStopし、次に流したいBGMを再生することで実現しています。

今回はゲームオーバー時に実行されるGameOver関数の中に追加します。

GameManager
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Assertions.Must;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    private GameObject bgm;
    private GameObject gameoverbgm;
    private AudioSource audioSource = null;
    // Start is called before the first frame update
    void Start()
    {
        bgm = GameObject.Find("BGM");
        gameoverbgm = GameObject.Find("GameOverBGM");
        audioSource = GetComponent<AudioSource>();
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void GameOver()
    {
        audioSource = bgm.GetComponent<AudioSource>();
        audioSource.Stop();
        audioSource = gameoverbgm.GetComponent<AudioSource>();
        audioSource.Play();
    }
}

これで任意のタイミングでBGMを切り替えることが出来るように鳴りました。BGMの種類を更に追加したい場合も同様です。

SEの再生

BGMはゲーム中常に再生されるのに対して、SEは何かトリガーがあったときに再生される音声なので、Scriptで制御していきます。

GameManagerのScriptがなければ作成し、GameManagerという空のオブジェクトを生成してアタッチして下さい。
SEを鳴らす処理をGameManagerのScriptに追加していきます。

以下、プログラムの説明です。

AudioSourceとAudioClipの変数を用意します。Start関数でAudioSourceのComponentを取得します。(AudioClipのSEについては後ほどInspectorから追加します。)

PlaySE関数を追加します。SEを鳴らしたいときにこの関数を呼び出すことでSEを再生することができます。今回はゲームオーバー時に呼び出されるGameOver関数の中でPlaySE関数を呼び出すことで、ゲームオーバーしたらSEが再生されるコードになっています。

GameManager
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Assertions.Must;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    private AudioSource audioSource = null;
    public AudioClip SE;
    // Start is called before the first frame update
    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    // Update is called once per frame
    void Update()
    {
    
    }

    public void PlaySE(AudioClip clip)
    {
        if (audioSource != null)
        {
            audioSource.PlayOneShot(clip);
        }
        else
        {
            Debug.Log("audiosource=null");
        }
    }

    public void GameOver()
    {
        PlaySE(SE);
    }
}

最後にGameManagerのInspectorからSEの部分にAudioフォルダ内の音声ファイルを入れて下さい。

スクリーンショット 2024-08-12 142329.png

以上でSEが再生されるようになりました。

確認のためにUpdate関数の中にWが押されたらGameOver関数を呼び出す処理を追加して、SEが鳴るか確認してみましょう。

GameManagerのUpdate関数
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            GameOver();
        }
    }

実際にWを押してSEが再生されることを確認できれば実装は終了です。

あとがき

今回はUnityでBGMとSEを再生する方法について説明しました。

音が鳴るだけでゲーム感が増しますね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0