【Unity】RhythmTimeline、MusicTimelineを作った
Timelineにて音楽と同期した演出を作りたい場合に役に立つRhythmTimeline・MusicTimelineを制作しました。
両者は名前がすごく似てるのですが、おおまかに以下の違いがあります。
RhythmTimeline:メトロノームのようにBPMを指定してイベントを発火するもの
MusicTimeline:じーくどらむすさんのMusicEngineをTimeline上で扱うようにしたもの(ざっくり)
RhythmTimelineの方は音源そのものを必要としませんが、MusicTimelineの方はAudioClipからTimelineClipを作成します。
両方に共通する機能は、Timeline上での拍の可視化と、1小節(Bar)・1拍子(Beat)のタイミングでイベントを発火させる機能です。
これらの機能だけで、音楽に合わせた演出というのが簡単に制作することが可能になります。
github.com
github.com
MusicTimelineの方は修正が困難なバグがいくつかあってver0.1としています;;
このアセットを使ったサンプルをUnityPlayにアップロードしてみました。(RhythmTimelineがWebGLでは使えないので、以下はMusicTimelineを使っています)
play.unity.com
RhythmTimeline
こちらの制作にあたっては、Unity公式のメトロノームのサンプルを利用しました。
docs.unity3d.com
それで使われているOnAudioFilterRead関数は、WebGLでは動かすことができないようです。なのでRhythmTimelineはWebGL向けの制作の場合は使うことができないので注意が必要です。
また、使用するときはUniRxも一緒に入れてください。OnAudioFilterRead関数は別スレッドで呼ばれるものであるため、UnityEventを使うためにはメインスレッドで呼ぶ必要があるため、この処理を行うためにUniRxを使っています。
使い方
RhythmEngineComponentがついたGameObjectをシーン上に作成し、RhythmTimelineTrackにバインドします。
Clipを作成し、ClipのInspectorでBPMの指定・拍子などの設定を行います。
Barは何拍子にするか、Beatは4ビートか8ビートを選択できます。
RhythmEngineのOnBar()、OnBeat()にイベントを登録すればそのタイミングでイベントが発火されるシステムが作れます。
再生や停止はPlayableDirectorの方で操作してください。
MusicTimeline
じーくどらむすさんが公開しているMusicEngineのアルゴリズムを用いてTimelineで扱えるようにしたものです。音楽系ド素人が移植したのでアルゴリズムが合ってるのかどうか正直わかりません…
github.com
基本的な機能に加えてMusicEngineの機能である曲をセクションごとに区切る機能・セクション内ループ・セクション移動などのMusicEngineの基本的な機能を移植しました。
使い方
MusicEngineComponentがついたGameObjectシーン上に作成し、MusicTimelineTrackにバインドします。
Clipを作成し、セクションを設定します。セクションごとに何拍子かなどを個別に設定できるので理論上は変拍子に対応できるはずです。
MusicEngineのOnBar()、OnBeat()関数などにイベントを登録すればそのタイミングでイベントが発火されるシステムが作れます。
再生や停止はPlayableDirectorの方で操作してください。