Unityで音楽ゲームを作る際に、ノーツの生成タイミングをMIDIファイルから取得したのですが、色々と困ったため情報をまとめておきます。
はじめに
UnityではMIDIファイルは標準でサポートしていないため、 MIDI Animation Track for Unity Timelineというimporterを用いてMIDIファイルから情報を受け取っていきます。keijuroさんありがとうございます。
また今回の実装環境は以下になります。
- macOS Venture v13.4
- Unity 2021.3.23f1
importerのシステム要件とGitHubリポジトリは以下になります。
- Unity 2019.1以降
MIDI Animation Trackの導入
1.新規で空のプロジェクトを作成
Unityのバージョンは前述したとおりUnity 2021.3.23f1です。
3dでも2dでもどちらでもいいです。
また既存のプロジェクトでも導入可能です。
2.manifest.jsonに書き込む
Packagesフォルダの中にあるmanifest.jsonに書き込んでいきます。
以下を追加することでimporterがnpmjsレジストリを介して配布されます。
リポジトリをダウンロードする必要はありません。
{
"scopedRegistries": [
{
"name": "Keijiro",
"url": "https://registry.npmjs.com",
"scopes": [
"jp.keijiro"
]
}
],
"dependencies": {
"jp.keijiro.klak.timeline.midi": "1.0.5",
...
}
}
Package Managerを見てみるとMIDI Animation Trackが導入されているのがわかると思います。
MIDI Animation Trackを使ってみる
1.Timelineを作成する
ProjectビューのCreateメニューから「タイムライン」を選択すると、タイムラインアセットが作成されます。
またこのTimelineをSceneに追加してください。
2.MidiSignalReceiver.csの設定を行う
Scene内に空のオブジェクトを生成し、MidiSignalReceiver.csと実行したいC#のソースコードをアタッチしてください。
次にNoteOnEvent()の + を押しイベントを追加し、実行したいC#のソースコードをセットしてください。
最後に実行したい関数を選択してください。
以下のようになると思います。
3.Timelineの設定を行う
最後にTimelineにMIDIファイルと先ほど生成した空オブジェクトをセットしたら実装完了です。
結果
以下のようにMIDIファイルから実行することが可能になります。
MIDIファイルを変更したい場合は、MIDIファイルのみを置き換えれば大丈夫です。
最後に
MIDI Animation Track for Unity Timelineの導入から簡単な実装までをまとめました。
音楽ゲームを作る際や、音楽に合わせた処理を実装したいときに重宝するなと感じました。