まえがき
BGM・SEの鳴らし方について説明していきます。
ゲームには音楽がないと寂しいので。
音声データの用意
フリー素材を配布しているサイトなどで音声ファイルをダウンロードして下さい。
いくつかサイトを掲載しておきます。
もちろん、音声ファイルを用意できるなら別の方法でもいいです。
魔王魂
効果音ラボ
Dova
OtoLogic
Springin
Unityに実装
インストールした音声ファイルを鳴らせるようにしていきます。
フォルダの追加
ProjectのAssetsフォルダにAudioという名前のフォルダを作成して下さい。
その後、中に先ほど用意した音声データを入れます。今回は、BGMとSEの2種類を再生してみます。
BGMの再生
BGMという名前のAudio Sourceを作成して下さい。
InspectorからAudioClipに先ほどAudioフォルダに追加した音声データを入れて下さい。
Play On Awakeにチェックが入っていることを確認して下さい。また、Loopにチェックを入れると文字通りBGMがループ再生されるようになります。
これでBGMの実装は終了です。
実際にPlayしてBGMが再生されるか確認して下さい。もしBGMが聞こえない場合はToggle Audioがoffになっていないか確認してみて下さい。
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フォルダ内の音声ファイルを入れて下さい。
以上でSEが再生されるようになりました。
確認のためにUpdate関数の中にWが押されたらGameOver関数を呼び出す処理を追加して、SEが鳴るか確認してみましょう。
GameManagerのUpdate関数
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
GameOver();
}
}
実際にWを押してSEが再生されることを確認できれば実装は終了です。
あとがき
今回はUnityでBGMとSEを再生する方法について説明しました。
音が鳴るだけでゲーム感が増しますね。