音楽ゲーム制作入門

 この記事はSofme AdventCalendar 2020 2日目の記事となります。

 みなさんこんにちは。プログラム班3回生の鉄鉱石です。

 僕は音楽ゲームが好きでよく遊んでいるのですが、自分でも音楽ゲームを作ってみたい!と思い、現在音楽ゲームの制作をしています。昨年度のアドベントカレンダーでは同じような書き出しで音楽ゲームのデザインについての記事を書きましたが、今回は「はじめて音楽ゲームを作る」という状況において、最初にどのような音楽ゲームを作るべきかを既存の音楽ゲームを分析していくことで考えていきます。

 音楽ゲームをこれから作っていきたいという人には少しは参考になるかなと思います。なお、この記事では音楽ゲーム制作に関わるアルゴリズム(判定アルゴリズム、ノーツ表示アルゴリズムなど)については少しだけ話しますが、実際のプログラミングについては触れません。ご了承のほどよろしくお願いします。

音楽ゲームの本質

 既存の音楽ゲーム、世の中に多く出ていますよね。昔は音楽ゲームといえばアーケードゲーム*1でしたが、最近はスマートフォン向けの音楽ゲームも非常に流行しています。 実は、これらの音楽ゲームすべてに共通するのは

  • ある設定された時間(以下「入力時間」)にできるだけ近い時間で、プレイヤーがある決められた操作を入力する

 という要素だけなのです。

 もちろん、これだけだとゲームとして面白くありません。いつ動き出したのか分からないストップウォッチを持たされて、「目を閉じたままx秒で止めてね。x秒が何秒なのかは教えないけどね。」と言われているようなものです。 そのため、ほとんどの音楽ゲームは

  • 音楽のリズムに合わせて入力時間が設定されている
  • 入力時間に合わせて画面が変化する

 などの演出を行うことで、ユーザーが入力時間を認識できるように、そして「音楽のリズムに合わせて入力をする」という音楽ゲームの楽しみを提供できるようにしています。 そして、この演出の方法で音楽ゲームは様々なパターンに分類することができるのです。

音楽ゲームの演出を分類してみよう

 今回は「入力時間に合わせて画面が変化する」という音楽ゲームの基本となる演出について、その方法別に分類をしていきたいと思います。 (分類の名称は筆者が命名したもので、一般的な名称ではありません。)

ノーツ落下型

 音楽に合わせて処理するべきオブジェクト(以下「ノーツ」)が落下してきて、判定ラインとノーツが重なったタイミングで操作を行うというタイプの音楽ゲームとなります。 入力や表現方法の違いによってさらに「固定レーン式」「自由レーン式」「その他」の3タイプに分けられます。なお、あまり初心者の制作の参考にはならないため、今回は「その他」のタイプの説明は省略します。

固定レーン式

 固定レーン式は1つのレーンに1種類のノーツが流れてくるタイプの音楽ゲームです。 1つのレーンに対して1つの入力デバイスが割り当てられるのが基本となります。それぞれのレーンの処理が独立しており重複が発生しないため、アルゴリズム的にも作りやすいタイプの音楽ゲームとです。 音楽ゲームの代名詞である『beatmania』シリーズや、社会現象にもなった『Dance Dance Revolution』がこのタイプのゲームの代表作となります。また、『太鼓の達人』のような、見た目上は複数のレーンが重なっているがそれぞれの処理が独立しているゲームも固定レーン式となります。

図1:『beatmania IIDX』。8つのレーンにノーツが降ってくる。 (画像引用:遊び方 | beatmania IIDX INFINITAS)

図2:『Dance Dance Revolution』。4つのレーンに降ってきたノーツに合わせて足元のパネルを踏む。 (画像引用:HOW TO PLAY | DanceDanceRevolution A20 PLUS)

図3:『太鼓の達人』。太鼓型のデバイスで入力を行う。 (画像引用:遊び方 │ 太鼓の達人)

自由レーン式

 自由レーン式は1つの広いレーンにさまざまな形状・種類のノーツが流れてくるタイプの音楽ゲームです。 1つのレーンの中でさらに入力位置を取得する必要があることから、入力デバイスはタッチパネルとなることが多いです。また、ジョイスティック*2やマウスなどアナログ入力のできる機器を用いる場合もあります。固定レーン式と比較するとハードウェアの条件が厳しく実装も難しいですが、ノーツの幅の変更やスライドノーツの追加などができるようになるため、譜面の表現の幅はかなり広がります。 アーケード音楽ゲームであれば『チュウニズム』、スマートフォン音楽ゲームであれば『Deemo』がこのタイプのゲームとして有名ですね。

図4:『チュウニズム』。通常のタップや長押しのほかに「手を上げる/下ろす」という動作も必要な珍しいゲーム。 (画像引用:キホンのあそび方 | CHUNITHM CRYSTAL PLUS)

図5:『Deemo』。降ってくるノーツに合わせてスマートフォンの画面をタップする。 (画像引用:DEEMO~ラスト・リサイタル~)

ノーツ拡大型

音楽に合わせてノーツが拡大し、ある大きさになったタイミングで操作を行うというタイプの音楽ゲームとなります。 ノーツ落下型はノーツが移動するスペースが必要な都合上、画面全体に対してノーツを処理するエリアが狭くなりがちですが、ノーツ拡大型はノーツが移動するスペースが必要ないため、画面全体をノーツ出現エリアとして使用することができるという利点があります。そのため、ノーツ拡大型はタッチパネルでの操作に適しており、スマートフォン向けの音楽ゲームに適しています。 一方、ノーツ落下型はノーツどうしのタイミング差をノーツ間隔という形で直感的に理解できますが、ノーツ拡大型はノーツどうしのタイミング差が認識しづらく、比較的覚えゲーになってしまいやすいという欠点もあります。 アーケード音楽ゲームであれば『jubeat』、スマートフォン音楽ゲームであれば『Cytus』が代表作でしょうか。

図6:『jubeat』。16枚のパネルに浮かび上がるノーツをタップする。 (画像引用:jubeat saucer fulfill | KONAMI コナミアーケードゲーム製品・サービス情報サイト)

図7:『Cytus』。浮かび上がるノーツが移動している判定ラインと重なるタイミングでタップする、ノーツ落下型の特徴も取り入れたゲーム。 (画像引用:Cytus α ダウンロード版 | My Nintendo Store)

その他

いわゆる「音楽ゲーム」の大半はノーツ落下型とノーツ拡大型の2通りの演出となっていますが、様々なリズム系ゲームに視野を広げると他にも多くの演出があります。 例えば『リズム天国』はゲーム全体がアニメーションのような演出になっており、演出の開始から入力までの時間が他の音楽ゲームと比べて短くなっています。それでも成立する理由は「リズムに合わせてボタンを押すだけ」というこのゲームのコンセプトにあります。このゲームは楽曲のリズムに合わせたシンプルな譜面デザインになっており、画面を見ずに音だけ聞いていても操作ができるようなゲームデザインになっているため、音楽ゲーム部分における画面の重要度が低く、特殊な演出をしても問題ないのです。 このように、ゲームのコンセプトがしっかりしていれば、それに合わせて通常から外した演出を取るという選択肢を取ることもできます。

図8:『リズム天国』。リズムに合わせてボタンを押すシンプルなミニゲームの集まりで構成されている。 (画像引用:リズムでゲーム!? | ゲームボーイアドバンス)

どの方法がいいのか

 ということで、音楽ゲームの画面変化演出についていくつかの方法を挙げてみました。では、実際にはじめて音楽ゲームを作る場合にはどの方法を取るのがいいのでしょうか。 それを決めるために、それぞれの方法を実装するにあたってどのようなことを考える必要があるのかを比較してみましょう。

 まず、固定レーン式と自由レーン式の比較をしてみます。 固定レーン式と自由レーン式の基本的なシステムに違いはありません。しかし、自由レーンには固定レーンには存在しない「ノーツの幅」の概念が発生します。また、ノーツの幅が可変であることによって、ノーツ決定アルゴリズムの変更*3や可変幅に対応した各種画像の作成*4などの問題も発生します。 一方、固定レーン式に必要で自由レーン式には不要な要素というのは基本存在しません。そのため、自由レーン式は固定レーン式の拡張版だと言うことができます。先述の通り自由レーンにするとハード的な面での制約もかかることを考えると、音楽ゲームを最初に制作する際は固定レーン式と自由レーン式であれば固定レーン式を選択するのが無難といえるでしょう。

 次に、ノーツ落下型とノーツ拡大型の比較をしてみます。 ノーツ落下型もノーツ拡大型も、実装するにあたり考える表示アルゴリズムは「ノーツ時間と現在時間を比較し、その差に応じてノーツの位置or拡大率を設定する」ということになります。つまり、ノーツ落下型とノーツ拡大型で考えることはそう変わりないことになります。 ただし、ノーツ拡大型は落下型と比べてアニメーション作成が比較的難しい*5ことを考えると、基本的にはノーツ落下型を選んだほうが無難といえるのではないでしょうか。 ただ、ここは好みの範疇だと思うので、ノーツ拡大型のゲームに興味がある場合は最初にノーツ拡大型に取り組んでみるのも十分いいと思います。

 以上より、初めて音楽ゲームを制作する際は、固定レーン式のノーツ落下型音楽ゲームの制作に取り組むのが最も無難だと言えるでしょう。このタイプは様々な音楽ゲームのタイプに発展させることができる基本的な形であり、理解しておくことは今後音楽ゲームを作っていくうえでも重要です。また、ノーツ拡大型は落下型と基本的なシステムに違いはないため、拡大型に興味がある場合は拡大型を作ってみてもいいかもしれません。自由レーン式のゲームを作るのは、一度固定レーン式のゲームを作ってみて経験を積んでからにすることをおすすめします。

 もちろんコンセプトなどがしっかり決まっている場合はそれに合わせた方法を取るのが一番望ましいですが、とりあえず音楽ゲームを作ってみたいという人は固定レーン式のノーツ落下型音楽ゲームに挑戦してみましょう。

ここまでのまとめ

  • 音楽ゲームの本質は「ノーツ時間にできるだけ近い時間でプレイヤーが決められた操作を入力する」という点のみ
  • 大半の音楽ゲームでは、時間に合わせて画面を変化させることで遊びやすくしている
  • 最初に作る場合、こだわりがなければ固定レーン式のノーツ落下型音楽ゲームを作るのがおすすめ

 以降の内容では、固定レーン式のノーツ落下型音楽ゲームで製作することを念頭に置きます。

スクロールシステムを考える

 ノーツ落下型音楽ゲームを制作するにあたり大事なのが「スクロールシステム」です。 スクロールシステムとは、ノーツ落下型の音楽ゲームにおいてノーツを落下させる方法のことです。

 一般的なノーツ落下型音楽ゲームは、主に2種類のスクロールシステムで表現することができます。この2つのスクロールシステムは譜面の表現(特にBPMが変化する譜面の表現)において大きな違いを持ちます。そのため、この2つのスクロールシステムを知っておいた上で、自分の作りたい音楽ゲームがどちらの方法で実現できるのかを考えておくと、自分の理想通りの譜面表現ができると思います。

 (「スクロールシステム」及び各システムの名称は筆者が命名したもので、一般的な名称ではありません。)

時間基準型

 時間基準型は、ノーツ時間と現在の楽曲時間を比較してノーツを移動させるシステムです。『太鼓の達人』などがこのシステムで動いていると考えられています*6。一番直感的でわかりやすいスクロールシステムなのではないでしょうか。 時間基準型におけるノーツ位置は次の式で求められます。

  • [ノーツ位置] = ( [現在の楽曲時間] – [ノーツ時間] ) * [スクロール定数]

 この値はジャストタイミングで0となり、ジャストタイミングより早い時間だとマイナス、遅い時間だとプラスの値をとります。

 このシステムでは、BPMの違いによってスクロール速度が変化しません。しかし、BPMが変化すると同じ4分音符でもその間隔の時間が変化するため、それに依存しているノーツ間隔も同様に変化します。そのため、このシステムではBPMの変化に応じてスクロール速度が変わらずにノーツ間隔のみが変化します。 『太鼓の達人』プレイヤーであれば、この文章に「ん?」と違和感を感じた人もいるでしょう。その通り、実際の『太鼓の達人』では、BPMが違う楽曲でも4分音符の見た目の間隔は基本的に等しくなっており、その分スクロール速度が違っています。これは、上の式の[スクロール定数]が譜面によって異なっており*7、BPMが違う楽曲でも同じ間隔の音符であれば見た目の間隔が一致するようになっているためです。

 なお、ノーツの移動中にスクロール定数を変更することはできません。なぜなら、スクロール定数を変更するとノーツが瞬間移動してしまうためです*8。 そこで、このタイプの音楽ゲームでは各ノーツごとに速度倍率を格納する変数(以下「速度変数」)を持たせておき、各ノーツのスクロール速度を([譜面全体のスクロール定数] * [そのノーツの速度変数])に設定していると考えられます。これにより、ある時間の範囲に存在するノーツ全体の速度倍率を変更することで、譜面の見た目上の速度の変化が可能となっています。(この動画(注:非公式)の0:43-が分かりやすいです。)

 この形式を取ることで発生する特徴的な現象として、「譜面の追い越し」があります。先述の通り各ノーツは独立して速度変数を持っています。そのため、各ノーツごとにスクロール速度が違うという現象が発生します。そのため、速度変数の高いノーツAの後に速度変数の低いノーツBがあると、先に画面内に現れるのは遅いノーツBだが、途中で速いノーツAがノーツBを追い抜かすという現象が発生する場合があります。 譜面の追い越しというギミックを使いたい場合はこのスクロールシステム(というより「各ノーツに速度変数を設けるシステム」)を採用するといいでしょう。(ただし、やりすぎるとこうなる(注:非公式)のでご注意を。)

小節位置基準型

 小節位置基準型は、時間ではなく「楽譜における現在の位置」を比較対象とするシステムです。その値が4/4拍子の楽譜の1小節を基準にしているケースが多いことから筆者は個人的に「小節位置」と呼んでいます。この小節位置はBPMによらず楽譜上の位置が同じであれば同じ値になるという特徴があります*9。 改めて説明すると、小節位置基準型はそのノーツの設置されている小節位置と現在の楽曲の小節位置を比較してノーツを移動させるシステムです。『beatmania』シリーズなどがこのシステムで動いていると考えられています。 小節位置基準型におけるノーツ位置は次の式で求められます。

  • [ノーツ位置] = ( [現在の楽曲の小節位置] – [ノーツの小節位置] ) * [スクロール定数]

 時間基準型と同様に、この値はジャストタイミングで0となり、ジャストタイミングより早い時間だとマイナス、遅い時間だとプラスの値をとります。

 このシステムでは、小節位置の特徴よりBPMの違いによってノーツ間隔が変化しません。しかし、[現在の楽曲の小節位置]の時間当たりの変化量はそのときのBPMに比例します。そのため、BPMが変化すると[現在の楽曲の小節位置]の変化量も変化し、結果として見た目のスクロール速度が変化します。そのため、この形式は譜面間隔が変化せずにスクロール速度が変化する時間基準型とは正反対の仕様となります。

 この形式を取ることで発生する特徴的な現象として、スクロール速度の変化が可能になることが挙げられます。時間基準型でもノーツごとに速度変数を設定することで疑似的な速度変化はできていましたが、このシステムではBPMの変わる瞬間に見た目のスクロール速度が切り替わるという動作になります。これによりノーツの意図せぬワープや追い抜きを起こさずにBPMを切り替えることができます。 時間基準型と同様に、スクロール定数を変化させると譜面はワープしてしまいます。しかし、そもそもBPMを変化させれば見た目のスクロール速度は適した値に変化するため、譜面側からゲーム中にスクロール定数を変化させる必要がないというのがこのシステムの面白いポイントといえるでしょう。

 このシステムの特徴として、「時間」という音楽ゲームの本質に関わる(=安易に変更できない)パラメータではなく「小節位置」というひとつ噛ませたパラメータを用いることで、譜面制作に幅を持たせることができるようになることが挙げられます。例えば、「○秒間だけ小節位置を変化させない」というコマンドを用意してあげれば、譜面停止を実装することができます。また、極短時間だけ異常に速いBPMの区間を用意することで、譜面のワープを実装することもできるでしょう。このように、譜面の整合性を保ちつつ様々なギミックも入れることのできる自由さがあるのが小節位置基準型の大きな特徴です。

図9:各スクロールシステムにおけるBPM変化のイメージ。時間基準では各ノーツごとに速度が違うため追い越しが発生しているが、小節位置基準では追い越しが発生せず、BPM変化時にスクロール速度が一律で変化している。

各スクロールシステムの利点と欠点

 2つのスクロールシステムそれぞれの利点と欠点をまとめます。

時間基準型

  • 利点
    • 時間に直接依存するため直感的
    • 実装が容易
    • ノーツごとにスクロール速度を設定する手法と相性がいい
  • 欠点
    • 全体のスクロール速度を変更するとノーツのワープが発生する
    • 譜面停止などのギミックを入れることは難しい
  • 両方の性質を持つ特徴
    • ノーツの追い抜きが発生する
      • 利点:追い抜きギミックを実装したい場合は簡単に実装できる
      • 欠点:音楽の譜面として考えたときに不自然

小節位置基準型

  • 利点
    • 譜面のワープや追い抜きが発生しない
    • 譜面の整合性を守ったまま様々なギミックを実装できる
  • 欠点
    • 時間に直接依存しないため理解が難しい
    • 実装が難しい

これらの利点と欠点からそれぞれの手法をどのように使えばいいかを考えると、

  • 時間基準型:初めて音楽ゲームを作る場合、譜面の追い越しを許容する場合
  • 小節位置基準型:BPM変化やギミックを用いた譜面を作る場合、譜面の追い越しを許容しない場合

といった感じに分類できるのではないでしょうか。 時間基準型は音楽ゲーム制作初心者向け、小節位置基準型は音楽ゲーム制作経験者や音楽ゲームにこだわりを持っている人向けと言えそうです。

ちなみに、筆者が過去の津田沼祭や文化の祭典で公開していたスマートフォン向け音楽ゲーム『aspros.echo』は、2019年の文化の祭典における初公開時は時間基準型で製作していました。しかし、2019年の津田沼祭に向けた2回目の公開時に、BPMが大きく変化する楽曲を収録するのに合わせて小節位置基準型に作り直しました。当時の技術ではシステム全体を小節位置基準型で作り直すのはなかなか難しかったのですが、結果その楽曲のBPM変化の演出がかなりハマったので、取り組んでよかったと安堵した思い出があります。 (その楽曲はゲームのラスボス曲として曲・譜面共に強い存在感を放ちました。)

ここまでのまとめ

  • ノーツ落下式音楽ゲームでは「時間基準型」と「小節位置基準型」の2つのスクロールシステムでおおむね表現可能
  • 2つのスクロールシステムはBPM変化時の譜面の表現方法などが異なる
  • こだわりがなければ音楽ゲーム制作初心者は時間基準型システムがおすすめ

おわりに

 以上、既存の音楽ゲームのシステムを分析・分類して、どのような音楽ゲームがあるのか、そして音楽ゲーム制作初心者はどのような音楽ゲームを作ってみるのがいいのかを見てきました。

 結論としては、こだわりがなければ1つのレーンに1種類のノートが降ってくるタイプのノーツ落下式音楽ゲームの制作が経験を積むのに適しており、そのスクロールは時間を基準にしておくととりあえず扱いやすいといった感じになりました。 もちろんコンセプトが決まっているのであればそれを実現するための手法を選択するべきですが(この記事がその手法の選択肢を増やすきっかけになっていれば嬉しいです)、とりあえず何か音楽ゲームを作ってみたい!という方はこのようなゲームを作ってみるといいと思います。

 なお、今回は実際にゲームを作るところについては触れませんでしたが、ここについては別の機会にやりたいと思います。先述の通り、音楽ゲームの本質はその入力時間とノーツ時間との差を小さくすることにあり、音楽ゲームのアルゴリズムはその判定アルゴリズムが大半を占めています。つまり、判定アルゴリズムさえ作れてしまえばあとはだいたいなんとかなります。ぜひ判定アルゴリズムを調べてみたり、自作してみたりしてください。ソフメの音楽ゲーム制作勢が増えてくれるととても嬉しいですし、そのためにできる限りはサポートしますので、質問・相談等あれば気軽にどうぞ。

 かなり長い記事となってしまいましたが、楽しんでいただけたなら幸いです。

 明日はLen Dilemmaくんの記事です! みんなもクイズをやろう!

脚注

*1 : 業務用ゲーム機。ゲームセンターに置いてあるやつ。

*2 : スティック(レバー)を傾けることで方向入力を行う機器。

*3 : ある位置で入力を行った際、固定レーン式ではその入力に対応するレーンが1つしかなく、そのレーンのノーツの中から最も近いノーツを検索すればいい。しかし、自由レーン式では全ノーツからその入力位置に対応するノーツを検索し、その中からさらに最も近いノーツを検索する必要がある。

*4 : ノーツ画像のほかにも、ノーツを処理した際のエフェクトなども可変幅に対応する必要がある。

*5 : ノーツ落下型はただ移動させるだけでいいが、拡大型の場合、ノーツの透明度やエフェクトなども調整しないと画面全体の視認性が悪くなってしまう。

*6 : 内部システムは公開されていないため確定はできず、「このシステムであればそのゲームの仕様を再現できる」という程度に留まる。

*7 : BPMが低い楽曲ほどこの値は高くなり、BPMが高い楽曲ほどこの値は低くなる。

*8 : 例えば現在時間=0[s]、ノーツ時間=1[s]、スクロール定数=100[px/s]のときのノーツ位置は-100[px]だが、この瞬間にスクロール定数を50[px/s]にすると、式が再計算されノーツ位置が-50[px]にワープしてしまう。

*9 : 例えば4/4拍子の楽譜の1小節の長さを1として、1小節目の1拍目の小節位置を0とする。このとき、4/4拍子の楽曲の5小節目の3拍目にあるノーツの小節位置は、BPMが128であっても192であっても256であっても等しく5.5となる。

コメント

タイトルとURLをコピーしました