はじめに
「MusicEngine」を Unity プロジェクトに導入することで
音楽のリズムに合わせた演出を実装できるようになります
この記事では、MusicEngine でシンプルな演出を作る手順と、
MusicEngine の基本的な機能を紹介していきます
目次
使用例
クイックスタート
試しに上記の使用例のような演出を作ってみます
http://www.rengoku-teien.com/index.html
この記事では「煉獄庭園」さんのサウンドを使用させていただきます
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 プロジェクトに導入します
これでサウンドとスクリプトの準備が完了しました
次は Asset Store から上記の「DOTween」(無料)をダウンロードして
Unity プロジェクトに導入します
これで演出を作る準備が完了しました
Hierarchy の「Create>3D Object>Cube」を選択して Cube を作成します
そして、作成した Cube を選択して「Rotation」を上記のように設定します
また、Main Camera を選択して「Position」をこのように設定します
次に、Project ビューの「Create>C# Script」を選択して
作成したスクリプトに「Example」と名前をつけて
上記のコードを貼り付けます
そして、「Example」と「Music」を「Cube」オブジェクトに設定します
最後に、「am_white」を「AudioClip」の欄にドラッグして設定します
これで Unity を再生すると、前述した使用例のような
シンプルな演出が実装できていることが確認できると思います
基本的な使い方
準備
MusicEngine を使用する場合は、シーンのゲームオブジェクトに
「Music」と「Audio Source」をアタッチします
そして、再生したい音楽を「AudioClip」の欄に設定します
再生
ゲーム開始時に音楽を再生したい場合は「Play On Awake」をチェックしておきます
Music.Play( "【ゲームオブジェクトの名前】" );
スクリプトから再生したい場合は Music.Play 関数を呼び出します
引数には「Music」がアタッチされているゲームオブジェクトの名前を指定します
音楽のテンポや拍子の設定
「Music」の「Sections」の中で音楽のテンポや拍子を設定します
項目 | 内容 |
---|---|
Name | セクションの名前 複数のセクションを用意してスクリプトから切り替えたい場合は指定 |
Unit Per Beat | 何ユニットで1拍とするか |
Unit Per Bar | 何ユニットで1小節とするか |
Tempo | テンポ(= 拍数 / 1分) 1分間で何拍あるか |
使用したい音楽のテンポや拍子は自分で調べる必要があります
音楽のテンポや拍子を調べる
Hierarchy の「Create>3D Object>3D Text」を選択して、
作成した「New Text」を「Debug text」にドラッグして設定し、Unity を再生すると
音楽のタイミングや時間を確認することができます
例えば、「Music」の「Tempo(テンポ)」を「90」にすると
上記のように「Just」の数値の変わり方がゆっくりになります
「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