読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

リズムに合わせてオブジェクトを動かすMusicEngineとUnity5で少し遊ぶ日記

画面効果 アセット紹介、AssetStore おもしろ演出、演出の強化 Unity Audio

昨日書いたMusicEngineについて、もっと色々と触ってみました。やはり音楽に合わせてキャラクターや物を動かすというのは中毒性高いですね。

f:id:tsubaki_t1:20150507091746g:plain

github.com

できる事

こんな感じのことが出来るみたいです。

  • 「今何小節目の何拍目のどこ?」を取得する
  • 「音楽に合わせてこう動かして!」が簡単にできる
  • 「単体でセクションからセクションへの音楽に同期した遷移」が可能に
  • 「セクションごとにループ」を設定可能
    (設定はループ・スルー・終了・Noneの4つ)

f:id:tsubaki_t1:20150507091052p:plain

 使い方

使い方はプロジェクトにマニュアルが添付されている内容が使いやすいです。AboutMusicEngine.pdfがマニュアルです。

f:id:tsubaki_t1:20150507002421p:plain

Exampleにはピンポン(ボールを下に落とさないようにするゲーム)と単純なサンプルの2種類のコンテンツが入っています。ピンポンはどんな事ができるのか、単純なサンプルはどうやれば出来るのかを把握するのに便利です。

f:id:tsubaki_t1:20150507002806g:plain

メモ

  • ビートのタイミングは各々のUpdateでやらせるのではなく、マネージャーを用意してそこからイベントなりコールバック経由で呼び出すほうが良さそうです。特にオブジェクトが一杯ある場合や呼び出し順が重要な場合。
  • もしくはタイミングを得る事だけを考えて、音ゲーみたいにするのも良いかもしれません。
  • 巻き戻しや早送りをした場合もちゃんとリズムを刻んでくれます。難易度調整に早送りは面白いかもしれません。
  • ノコギリ波的な奴の取り方が分からなかったので、自分で式を書きました。AnimationCurveや他の式と組み合わせることで、リズムに合わせた動きを作りやすくなります。正しいかは不明。

float cycle = 4;
float time = Music.MusicalTime;
float x = Mathf.Lerp(minmax, (time % cycle) / cycle);

  •  実際やるときはタイミングはコールバック、波はプロパティとして公開し各々に取得してもらうのが良さそうです。タイミングを単純な開始点としても良いのですが、リズムがあわなくて気持ち悪い事がありました。

あまり音をいじった事が無いので詳しいことは正直わかりませんが、リズムに合わせて動くというのは予想以上にコスパ高い印象です。強いて問題を上げるとすれば、他から持ってきた音楽を設定する方法がサッパリわからんという。