rarilog

主にゲーム制作に関することを書いていきます

2015/10/08 : UnrealEngine

第 4 回 UE4 ぷちコン応募作『Reflective Great Beam』について色々と (2) サウンド・リズム編

前回 に引き続き、今回はサウンド・リズム編です。サウンドにはかなり力を入れたのですが、ブルーマンのインパクトがデカかったためか、注目してくれている人があまりいなくて悲しい…。

目次

BGM とロジックの同期処理

このゲームには、BGM のリズムに合わせてビームが発射されたり、そのタイミングに合わせてボタンを押したりする要素があるため、BGM のリズムとロジックを完全に同期させる必要があります。これは UE4 の標準機能ではできそうになかったため、オーディオミドルウェアの FMOD のプラグインを利用することにしました。

FMOD の詳細についてはまたの機会に解説することにしますが、FMOD を利用すれば、

FMOD Studio Authoring Tool で曲に Tempo Marker を仕込んだ FMOD Event を…

…FMOD Plugin 経由で UE4 に読み込み…

FMOD Audio ComponentSet Event して Play することで…

…曲の拍のタイミングで OnTimelineBeat を発火させることができるようになります。

OnTimelineBeatBarBeat で何小節目の何拍目かを把握することができるので、「5 小節目の 1 拍目でブロックを Spawn させる」といった処理が可能です。

Reflective Great Beam においては、BeatKeeper というクラスのインスタンスが FMOD Audio Component を管理しています。BeatKeeper は、OnTimelineBeat が呼ばれるとイベントディスパッチャー Tick Beat を Call します。

リズムに合わせて何かを行わせたいクラスでは、BeetKeeperTick Beat を自身のイベントと Bind させています。これにより、各クラスのインスタンスは拍のタイミングを検知し、それぞれの処理を行うことができるようになっています。

新しいクラスを作る度に Tick Beat との Bind 処理を書くのは面倒なので、Bind 処理を書いた基底クラスを用意し、他のクラスはそこから派生させるようにしています。

なお、イベントディスパッチャーを使わずに Get All Actors with Interface ノードを利用して各インスタンスのイベント・関数を呼び出すという方法もあり、こちらの方がノードはスッキリするのですが、ドキュメント によると処理が遅いとのことなので避けました。

リズムに合わせて処理されるもの一覧

  • プレイヤー
    • ビームのチャージ・発射
    • ジャストプッシュ判定
    • 上下移動 (ホバーでふわふわしているアレ)
  • ブロック
    • Spawn
    • 移動
    • 点滅
    • タッピーチキンのはばたき
    • ブルーマンの踊り
    • 点滅
    • 色の変更
  • その他
    • Matinee の再生開始
    • カウントダウンの表示
    • クイズの表示
    • クイズの回答タイミング判定
    • 凧の Spawn

とにかく様々なものをリズムに合わせて処理させ、画と音の一体感を生ませようと試みました。リズムに対する反応が同じようなものばかりだと単調に思えるので、ブロックの点滅は表拍で、壁の点滅は裏拍で明るくなるようにバラしたりもしています。

ジャストプッシュ判定と処理のタイミング

ジャストプッシュ判定を図式化すると以下のようになります。

ジャストプッシュの判定自体は「判定時間内に対応するボタンが押されたかどうか」を見るだけでよいのですが、ジャストプッシュの処理 (Great! を表示させたり、追加効果を発生させたり) のタイミングに関しては、ビーム発射タイミングの前後で分ける必要がありました。

ビーム発射タイミング前にジャストプッシュに成功した場合、ジャストプッシュ処理はビーム発射タイミングで行われるようになっています。まだビームを発射していないタイミングで先に追加ダメージ処理が行われるのは不自然ですし、ジャストプッシュ判定成功時に狙っているブロックと、実際にビームがヒットするブロックが同一である保証は無いからです。

一方、ビーム発射タイミング後にジャストプッシュに成功した場合は、ボタンを押したタイミングで即座にジャストプッシュ処理が行われるようになっています。

BGM 制作に関する能書き

通常、BGM はゲーム開発の終盤で制作しても問題ないことがほとんどですし、ぷちコンのような開発期間の短いコンテストでは、BGM の無い作品も多いです。

が、Reflective Great Beam においては BGM とゲーム展開をリンクさせよう と欲張ったため、BGM 制作 = レベルデザイン となってしまい、早い段階で完成させなければならないものになってしまいました。

以下、BGM の各構成毎に、工夫した点などを説明していきます。音楽用語の使い方が間違っていたり、自分にしかわからない感覚を話していたりする可能性があるので、よくわからない文章になっているかもしれませんが、まとめると「これでも色々考えて作っているんだ!」と言いたいだけなので、流してください。

聴きながら読めるように近くに動画を置いておきます。

イントロ (動画 1:08~)

調は A Major です。これはカイトデモモチーフ部を原曲と同じ C Major にするため、逆算して決定しました。

A メロ (動画 1:22~)

まだまだ序盤の A メロなので、I → I on III としてもいいところで III♭dim に落としたり、IIm → V としてもいいところで IVm6 に落としたりと、アガり切らない感じのコード進行 にしてみました。

B メロ (動画 1:48~)

E♭ Major に転調します。後半では初めて裏拍打ち以外のリズムパターンが出てきて、ビームの発射タイミングが変わるので、リズムパターンとメロディーを一致させ、わかりやすくしました

サビ (動画 2:15~)

C Major に転調します。短いフレーズを別々の楽器で繰り返したり、パンを左右に振りながら繰り返したりすることで、今回のぷちコンのテーマである『反射』を表現しようと試みました

音楽で『反射』というとまずディレイやリバーブが思い浮かんだのですが、ディレイやリバーブを全く使っていない曲の方が珍しいですし、特色が感じられるほど強くかけると耳障りになるだけなのでやめました。

インタールード (動画 2:48~)

イントロと大体同じですが、調は C Major で、サビを引きずっています。クイズが始まる前に 8bit サウンドを前面に出すことで「何かこれから変なことが起こる」感を出そうとしました。最後に出題効果音っぽくオケヒを鳴らしているのですが、あんま聴こえないですね…。

クイズ (動画 3:05~)

クイズのシンキングタイムの曲ってこういうイメージなんですがどうなんでしょう…。もう 8 年くらい TV 見てないのでよくわからないですが…。C Major の調性を失わない程度に音をバラけさせました。

ブルーマンタイム (動画 3:12~)

Minor 感を出したり声を入れたり、とにかく雰囲気をガラッと変えようとしました。音の動きではなくリズムに集中してもらいたかったので、コードは Gm 一発、メロディーも同じ音の繰り返しにしました

B’ メロ (動画 4:05~)

2 回目の B メロです。サビの C Major をずっと引きずってきたため、C Major → F# Major への転調になっていて、1 回目の B メロの E♭ Major とは異なる調になっているのですが、次に控える 2 回目のサビ (1 回目と同じ C Major) には違和感なく繋がるようになっています

理論的には

  • 1 回目 : サブドミナント → ドミナント → トニック
  • 2 回目 : (C Minor 転調) → サブドミナントマイナー代理 → ドミナントマイナー代理 → (同主調転調) → トニック

という進行になっているかと思います。

サビ’ (動画 4:32~)

1 回目のサビと同じです。

カイトデモモチーフ部 (動画 5:05~)

ここからはUE4 のカイトデモ (A Boy and His Kite) の曲の 4 拍子アレンジ版が流れるのですが、まず、これがカイトデモの曲だと気づいた人は一体どれくらいいるんでしょうか…?Twitter で自分の動画に対する感想を見ると「ブルーマンワロタ」みたいなのばかりなので、皆さんが気づいてくれているのか本当に不安です。一応最初のピアノの部分は完コピしているはずなんですが…。

そもそもカイトデモの曲をアレンジして BGM の一部として使うのがアリなのか不明瞭だったのですが、大好きなデモの曲でどうしても入れたかったため『許可を求めるな謝罪せよ』の方針でやってしまいました。これがダメなら 3D タッピーの時点でアウトだと思うので、多分大丈夫だと思うのですが…。

カイトデモの曲は同じコード進行を繰り返しつつ毎回異なるフレーズを奏でるという構成なのですが、アレンジでは色々な楽器が同時に異なる原曲フレーズを奏でるようにしています。

途中 (動画 5:58~) から onG なコードが連続する展開になりますが、これは Gm 一発コードだったブルーマンタイムの再来を予感させるための進行です。

ブルーマンタイム再び (動画 6:12~)

メロディーは違うけどリズムは同じ」というのがやりたくて、ブルーマンを再登場させました。

任天堂の『リズム天国』というゲームにはリミックスという要素があり、今まで遊んできた複数のリズムゲームが新しい曲の中でごちゃまぜになって出てくるというモードなんですが、「聴いたことがない曲で遊んでいるのに、リズムゲーム部分は遊んだことがあるからリズムが取れる」という「知らないのに知ってる」体験が新鮮で面白いと思ったので、これを真似してみました。

アウトロ (動画 6:25~)

インタールードとほぼ同じ感じで〆です。

次回はグラフィック・アニメーション周りについて書こうと思います。