【Unity基礎15】特定のタイミングで音楽を再生させる方法

Unity基礎

ゲーム制作において、攻撃時の効果音など、特定のタイミングで音楽を再生したい場面は多々あります。そこで今回はUnity基礎13及びUnity基礎14で学んだことの応用として、特定のタイミングで音楽を再生させる方法について、攻撃ボタンを押した際のSE(効果音)再生を例に説明します。

準備

イメージ

今回は上述のように攻撃時の演出を想定します。具体的には下図のように攻撃ボタンが押された時に予め指定したSE(効果音)が再生されるようにします。

各オブジェクトの配置

各オブジェクトの配置位置や名前については皆さんのお好みで問題ないと思います私は以下のようにボタン等のオブジェクトを配置しました。

なお、上図におけるオブジェクトの名前と役割は以下の通りです。

各オブジェクトの名前と役割
Panel:画面背景となるパネルオブジェクト
PlaySEButton:「攻撃」ボタン。攻撃用SEを再生させる処理を行うトリガーとなる(ボタンを押すことでSE再生を実施する)ボタン

 

SE(再生する効果音)の用意

音楽を再生させる方法を説明する前に今回設定するSEを用意しておきます。

今回も下記サイト様の無料素材を使用させていただきます。

音楽素材提供元:魔王魂様
URL:https://maou.audio/rule/
使用させて頂いた素材:戦闘03
URL:https://maou.audio/category/se/se-battle/page/2/

 

上記音楽の著作権は「魔王魂」様に帰属します。取り扱いについては上記サイト様のルールに則ってください。

素材がダウンロードできたら、下図のようにプロジェクトウィンドウのAssetsフォルダ直下に上記音楽素材をドラッグ&ドロップします。

特定のタイミングで音楽を再生させる方法

必要な準備が整ったので、特定のタイミングで音楽を再生させる方法について説明していきます。

STEP1:音楽再生をさせるコンポーネントを持たせるオブジェクトを作成する

Unity基礎13,Unity基礎14でも説明しましたが、音楽を再生させるためにはオブジェクトにAudioSourceコンポーネントを追加する必要があります。その前段階としてAudioSourceコンポーネントを付与させるオブジェクトが必要となりますので、先ずはオブジェクトを作成します。今回は下図のように空のオブジェクトを作成し、SEPlayerという名前でオブジェクトを作成することとします。

STEP2:作成したオブジェクトにAudioSourceコンポーネントを追加する

次にSTEP1で作成したオブジェクト(BGMPlayer)にAudioSourceコンポーネントを追加します。具体的には下図のようにヒエラルキーウィンドウでSEPlayerを選択し、インスペクターウィンドウでAddComponentボタンを押し、AudioSourceコンポーネントを検索して追加するという手順を踏みます。

STEP3:SEを認識・再生させるためのスクリプト作成する

次に再生させたいSEを認識・再生させるためのスクリプト作成します。今回は下図のようにPlaySEという名前でスクリプトを作成しました。

STEP4:SEにBGMを認識・再生させるための機能を実装する

スクリプトを作成したらそれを編集し、スクリプトにSEを認識・再生させるための機能を実装します。

先にスクリプトの内容を示すと下記の通りです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlaySE : MonoBehaviour
{
    [SerializeField] AudioClip AttackSE = null;//再生させる音楽であるAudioClipとの連携のために導入
    AudioSource Audio;//音楽を再生させるためにAudioSourceコンポーネントのPlayメソッドを使うために定義する
    //攻撃時のSEを再生させるメソッド
    public void PlayAttackSE() 
    {
        Audio = GetComponent<AudioSource>();//このスクリプトがアタッチされたオブジェクトに付与されているAudioSourceコンポーネントを認識させる
        Audio.PlayOneShot(AttackSE);//変数AttackSEが表す音楽を再生する
    }
}
スクリプトの解説

上記スクリプトもUnity基礎14と同様、大きく分けて以下の2つの機能で成り立っています。

①再生させたい音楽をスクリプトにより操作できるようにする機能

②指定したSEを再生させる機能

先ずは①に関連する部分から概要を説明すると以下の通りです。

6行目:再生させる音楽であるAudioClipとの連携のために導入。連携されたAudioClipをAttackSEという変数としてスクリプトで操作できるようになる。
7行目:音楽を再生させるため、AudioSourceコンポーネントのPlayメソッドを使うために定義。

次には②に関連する部分から概要を説明すると以下の通りです。

9~13行目:攻撃時のSEを再生させる機能(メソッド)
11行目:7行目で定義した変数Audioが表すものがなんであるかを認識させる構文。このスクリプトがアタッチされたオブジェクトに付与されているAudioSourceコンポーネントを認識させる。これにより変数AudioがSEPlayerオブジェクトに付与されたAudioSourceを表すことになる。
12行目:SEを再生させるための構文。変数AttackSEが表す音楽を再生する。

 

STEP 5:スクリプトをAudioSourceコンポーネントが付与されたオブジェクトにアタッチする

スクリプトが完成したので、続いて作成したスクリプトをAudioSourceコンポーネントが付与されたオブジェクトにアタッチします。今回の例では下図のようにSEPlayerオブジェクトにPlaySEスクリプトをアタッチします。

STEP6:スクリプトに操作したいAudioClip(音楽)を認識させる

STEP5でSEPlayerにスクリプトをアタッチすると下図のように、インスペクターウィンドウ上でAttackSEという箱ができます。そこに再生させたい音楽ファイルをドラッグ&ドロップします。

STEP7:ボタンオブジェクトのクリック時動作を設定する

次にボタンクリック時の動作をボタンオブジェクトに認識させます。設定を行うには具体的には下図のようにPlaySEButtonブジェクトのOnClick()に先に実装したPlayAttackSEメソッドを設定します。

ボタンクリック時の動作実装方法については下記「Unity基礎3」の「6.ボタンクリック時の機能実装」で詳しく説明していますので、必要に応じてご参照ください。

STEP8:AudioSourceの設定を変更する

最後にAudioSourceの設定を自分が再生させたい用途に合わせて変更します。具体的な方法としては、下図のようにSEPlayer(AudioSourceが付与されたオブジェクト)を選択し、インスペクターウィンドウにあるAudioSource内の各設定項目を変更するだけです。今回はゲーム再生時に音楽を再生させる機能不要なため、PlayOnAwake部分のチェックを外します。

機能テスト

ここまでできたらPlayボタンを押してゲームを起動させ、処理が想定どおりに行われているか確認しましょう。実際に起動させてみた結果、「攻撃」ボタンを押すことで設定したSEが再生されれば成功です。

今回は攻撃時のSE再生を例に、特定のタイミングで音楽を再生させる方法について説明しましたがいかがだったでしょうか。今回学んだ内容とUnity基礎12で学んだ内容を組み合わせると、「攻撃ボタンを押した際、アニメーションとSE演出が再生させる」といったより現実のゲームに近いことができるようになるはずですので、是非試してみてください。今回の内容が皆様のゲーム制作に少しでも役立てば幸いです。

以上。

コメント