コガネブログ

平日更新を目標にUnityやC#、Visual Studioなどのゲーム開発アレコレを書いていきます

【Unity】音楽のリズムに合わせた演出を実装できる「MusicEngine」紹介

はじめに

「MusicEngine」を Unity プロジェクトに導入することで
音楽のリズムに合わせた演出を実装できるようになります

この記事では、MusicEngine でシンプルな演出を作る手順と、
MusicEngine の基本的な機能を紹介していきます

目次

使用例

クイックスタート

試しに上記の使用例のような演出を作ってみます

この記事では「煉獄庭園」さんのサウンドを使用させていただきます

http://www.rengoku-teien.com/mp3/pop.html

まず、上記のページの「AM WHITE」というサウンドの「MP3 DL」ボタンを押して
ダウンロードした「am_white.zip」を展開し、
展開したフォルダ内の「am_white.mp3」を Unity プロジェクトに導入します

https://github.com/geekdrums/MusicEngine/blob/master/Music.cs

次に、上記のページで公開されている「Music.cs」を Unity プロジェクトに導入します

f:id:baba_s:20180601172943p:plain

これでサウンドとスクリプトの準備が完了しました

 
次は Asset Store から上記の「DOTween」(無料)をダウンロードして
Unity プロジェクトに導入します

f:id:baba_s:20180603192852p:plain

これで演出を作る準備が完了しました

f:id:baba_s:20180603193024p:plain

Hierarchy の「Create>3D Object>Cube」を選択して Cube を作成します

f:id:baba_s:20180603193137p:plain

そして、作成した Cube を選択して「Rotation」を上記のように設定します

f:id:baba_s:20180603193218p:plain

また、Main Camera を選択して「Position」をこのように設定します

f:id:baba_s:20180603193501p:plain

次に、Project ビューの「Create>C# Script」を選択して

f:id:baba_s:20180603193508p:plain

作成したスクリプトに「Example」と名前をつけて

上記のコードを貼り付けます

f:id:baba_s:20180603193857p:plain

そして、「Example」と「Music」を「Cube」オブジェクトに設定します

f:id:baba_s:20180603194014p:plain

最後に、「am_white」を「AudioClip」の欄にドラッグして設定します

これで Unity を再生すると、前述した使用例のような
シンプルな演出が実装できていることが確認できると思います

基本的な使い方

準備

f:id:baba_s:20180603195515p:plain

MusicEngine を使用する場合は、シーンのゲームオブジェクトに
「Music」と「Audio Source」をアタッチします

f:id:baba_s:20180603195700p:plain

そして、再生したい音楽を「AudioClip」の欄に設定します

再生

f:id:baba_s:20180603195729p:plain

ゲーム開始時に音楽を再生したい場合は「Play On Awake」をチェックしておきます

Music.Play( "【ゲームオブジェクトの名前】" );

スクリプトから再生したい場合は Music.Play 関数を呼び出します
引数には「Music」がアタッチされているゲームオブジェクトの名前を指定します

音楽のテンポや拍子の設定

f:id:baba_s:20180603200041p:plain

「Music」の「Sections」の中で音楽のテンポや拍子を設定します

項目 内容
Name セクションの名前
複数のセクションを用意してスクリプトから切り替えたい場合は指定
Unit Per Beat 何ユニットで1拍とするか
Unit Per Bar 何ユニットで1小節とするか
Tempo テンポ(= 拍数 / 1分)
1分間で何拍あるか

使用したい音楽のテンポや拍子は自分で調べる必要があります

音楽のテンポや拍子を調べる

f:id:baba_s:20180603200954p:plain

Hierarchy の「Create>3D Object>3D Text」を選択して、

f:id:baba_s:20180603201003p:plain

作成した「New Text」を「Debug text」にドラッグして設定し、Unity を再生すると

f:id:baba_s:20180603201405g:plain

音楽のタイミングや時間を確認することができます

f:id:baba_s:20180603201735g:plain

例えば、「Music」の「Tempo(テンポ)」を「90」にすると
上記のように「Just」の数値の変わり方がゆっくりになります

f:id:baba_s:20180603202309p:plain

「Just」のこの2つの数値は左から順に「何小節目か」「何拍目か」になります

使用したい音楽のテンポや拍子がわからない場合は
上記の手順でデバッグ用のテキストを画面に表示しながら
「Music」の「Tempo」などのパラメータを調整することで確認できます

音楽のリズムを検出

using UnityEngine;

public class Example : MonoBehaviour
{
    private void Update()
    {
        // ユニットが変わったフレームで true になる
        if ( Music.IsJustChanged )
        {
            print( "IsJustChanged" );
        }
        // 小節に来たフレームで true になる
        if ( Music.IsJustChangedBar() )
        {
            print( "IsJustChangedBar" );
        }
        // 拍に来たフレームで true になる
        if ( Music.IsJustChangedBeat() )
        {
            print( "IsJustChangedBeat" );
        }
        // 指定した小節、拍、ユニットに来たフレームで true になる
        if ( Music.IsJustChangedAt( 1, 2, 3 ) )
        {
            print( "IsJustChangedAt" );
        }
    }
}

MusicEngine では上記のプロパティや関数を使用することで、
音楽のリズムを検出することができます

なので、これらの if 文の中で、オブジェクトの位置や大きさ、
背景の色などを変更するだけで、音楽のリズムに合わせた演出を実装できます

さいごに

この記事では、MusicEngine でシンプルな演出を作る手順と、
MusicEngine の基本的な機能を紹介してきました

MusicEngine には他にもセクションやクオンタイズなどの機能も豊富に用意されています
MusicEngine の機能は下記の PDF でも詳細に紹介されていますので、
そちらも併せて参考にして頂ければと思います

https://github.com/geekdrums/MusicEngine/blob/master/AboutMusicEngine.pdf