Overridingメイキング第2回: Unity製音楽ゲームのプログラミング

こんにちは、Boltzです。

今回は音楽ゲーム「Overriding」制作過程を連載する企画の第2回目!

いよいよ音楽ゲームを成り立たせる、
演奏画面のプログラミングの話に入ります。

Overridingとは、Unityで制作したPC用音楽ゲームです。

6レーンそれぞれに1つのボタンが対応しており、
音楽に合わせてタイミングよくボタンを押すことによってスコアを獲得します。

 

Youtubeの動画に助けられた話

前回の記事で、音楽ゲームを制作するという企画を通したはいいものの、
Unity/C#の体験がほとんどない私は、
どうプログラミングしたものかと悩んでいました。

当時の私は、音楽ゲームといえどもスマートフォン向けのゲームや
太鼓デバイスを使って達人になるゲームくらいしか知りませんでした。

 

また、プログラミング経験も多くはなかったため、
「6レーンに沿って音符が流れてきて、叩いたら得点が上がる」
というゲームをどう実現させることができるのかわかりませんでした。

 

企画が通ったばかりの5月頃は、「Unity 音ゲー制作」などと
Google先生に問い合わせ続けていたような気がします。

ヒットするWebページはよくわからないQ&Aや概念的なものばかりで、
実践的な方法を教えてくれ!と言いながらモニターをたたき割っていました。

 

そんな中、何を思ったかYoutubeに対して「unity 音ゲー」で
サーチを掛けました。

そこで、まさかのYoutubeにてUnityでの音楽ゲームの作り方動画を
見つけたのです!!

 

アニミングさんの「Unityで音ゲーを作ってみた」です。

 

この動画では、Unityのあたり判定などをうまく利用した
リズムゲームの制作方法が細かく説明されています。

初期のころは動画を数十回視聴して、設計方法の理解に努めていました。

音楽ゲームを成立させるロジックを理解する意味で、動画が完璧すぎます。
Unityで音楽ゲームを作りたい方はとりあえずPart.11くらいまで
見るといいと思います。

 

この動画で重要なのは、
Unityでノーツが生成される始点と判定ライン、終点を決めること

そして、ノーツを始点から判定点、判定点から終点まで同じ秒数で移動させることによってノーツが流れている感じを出すことです。

 

動画をみて、音楽ゲームをプログラムするにあたっての基本的な考え方がわかりました。

 

そして、動画で得た設計方法を元に一度組んでみました。

そこで気づいたのですが、
この動画の方法をそのままPC向け音楽ゲームにするには
少し問題がありました。
(スマートフォン向け音楽ゲーム制作の動画なので、それもそうなのですが……)

 


 

1. ロングノーツの実装方法を新たに思いつく必要がある(Part.11までの動画で制作しているゲームにはロングノーツの概念がない)

 

2. 音楽にノーツの到着が遅れる(2つ原因があります)

 

3. 譜面作りをもっと楽にしたい

 

4.ノーツの流れる早さ(BeatmaniaIIDXでいうFHS)をいじると判定が理不尽になるので、判定を動的に変えたい

 


 

これらに関しては、ひとつひとつ解決を試みていきました。

日々の生活を送っていればふと解決策が思いつくこともあれば、プログラマーの方に直接質問して教えていただいたこともあります。

 

以下にそれぞれの問題に対してどう解決を試みたかを書いておきます。

 

1. ロングノーツの実装方法を新たに思いつく必要がある。

とりあえず考えた解決策が以下の通りです。

ノーツが流れるスピードをnotesSpeedとします。

ロングノーツの押し終わりの時間から、
ロングノーツの押し始めの時間を引くと、
ロングノーツのためにボタンを押下している時間になります。

これをlongNotesTimeとします。

notesSpeedとlongNotesTimeを掛けるとロングノーツの長さになります。

これをUnityのScaleに換算してUnity空間の「ノーツ生成地点」に召喚してやればいいという考えに至りました。

中学校に「道のり速さ時間」の考え方をロングノーツ生成に利用した考え方です。

 

座標はデフォルトでロングノーツの中央を指しているので
(positionはオブジェクトの中心を指しているというUnityの仕様に基づきます)
正常に判定が行われません。

判定するときには、ロングノーツの長さを2で割った値を
判定ライン方向に足して伸ばしてやりましょう。

 

2. 音楽にノーツの到着が遅れる

1つめの原因はCSVデータを配列に格納した上で、「ノーツが流れるべき時間にノーツを生成していること」です。

事前にノーツをすべて生成しておいて、
決まった時間に流れ出すようにプログラムしておくと
動作が速いかもしれません。

聞くところによるとInstantiateは重い処理らしいので、
演奏中に使いたくないですね。

最初のロード時間あたりで、使用するノーツを
すべて生成すればいいんじゃないでしょうか。

 

2つめの原因はノーツの移動に線形補間: lerp関数を使っていることです。

生成地点から判定ラインまで何秒で動くと指定すること自体はいいのですが
(今後ギミック譜面などをつくるのであればよくないですが)
線形補間は到着時間に厳密性を求められる音楽ゲームで
使用すべきではありません。

そのため、今回は「生成地点から判定ラインまでx秒で流れるとして、いまノーツはどの地点にいるべきか」という情報を、音楽の再生時間に基づいて計算しました。

これを全ノーツ分やったらかなり重いゲームになったので(14fpsくらい?)
直近x秒分だけ演算させておくとよいのではないかと思います。
これでそこそこのグラフィックボードを積んでいるPCでは60fpsで動作しました。

 

3. 譜面作りをもっと楽にしたい

音楽に合わせてボタンを叩き、CSVデータにするのもいい方法ではあります。

この方法をより厳密にするプログラムもネットのどこかで
公開されていた気がします。
(BPMを利用して、8分音符の感覚にスナップするやつ)

しかし、これでは人間の指が追いつかない譜面
ノーツが逆流してくるマイナス・テンポの譜面は作れません。

(……Overridingにはそのような譜面は実装しておりませんので、安心してプレイしてください!)

BMSエディタなど、譜面制作専用ツールで作った譜面を読む機能
搭載すると幸せになれる気がします。

 

4. ノーツの流れる早さをいじると判定が理不尽になるので、判定を動的に変えたい

Perfect判定ゾーンやGood判定ゾーンが固定されているため、
ノーツの流れが速くなればなるほど判定が理不尽に(狭く)なってしまいます。

これを解消するために、距離をベースとした判定システムを考えました。

あらかじめ、1フレームに進むノーツの距離を算出しておきます。これをyとします。
yに任意の数字を掛けると、それが判定の誤差として許容されるフレームの数です。
例えば、y*2 = perfect; y*11 = good;とします。

ボタンが押されたとき、判定ラインと最も近い距離にある
ノーツの距離を算出
します。
これがperfectに収まっていれば判定をperfectとして処理し、
goodに収まっていればgoodとして処理します。

 

こうしてあらかたの演奏画面の設計とプログラミングが終わりました。

ただし、この方法にも問題があります。

BPM(音楽の時間に習った四分音符イコールいくらみたいなの)に応じて
ノーツが流れてくる速さが変わるわけではありません。

BPM80を基準としてノーツが流れてくる速さを調整したら、
BPM300とかになったとたんノーツが詰まって流れてきたりします。
(判定には問題ないはずですが、視認性がとても悪いです)

要するに、まだまだ改善点はあります。

一応、今回出展する範囲ではBPMが変動する楽曲はないので、
そのようなことは起こらないとは思いますが……。

次回作を作るとなれば真っ先に改善したいのはそこですね。

 

2019/11/8 追記 / リズムゲーム制作本を作成します。

この度、当サークルはC97という同人誌即売会にて
「Unityで作るリズムゲーム」という本を頒布します!!

この本は、Unityでリズムゲームを制作する際のプログラミングや譜面制作、UIデザインについて読めばまるっとわかる本を目指して作っています!

この記事の課題点にもあった点に関する補足や、さらなる解説も加えます(現在100ページを超えました)

内容は、基本的なリズムゲームの作り方に加え

・どうやってノーツの生成(レベルデザイン)を簡単にするか?
・BMSも読み方と作り方
・ソフラン(テンポ変化のある曲)にどうやって対応するか?
・実装はどうするのか
・UIデザインの考え方
・譜面制作のパターン
・付録「サンプルゲーム」と「Unityのプロジェクト」

現在、100ページを超えてきたので、とてもお買い得だと思います。

ぜひ会場(火曜日南地区 “ユ “ 26a)でお買い求めください!

※今後の情報発信はこちらのTwitterアカウントをご覧ください

2020/1/1 追記 / 頒布を始めました!

この記事で紹介している本をboothで頒布開始しました!よろしくお願いします!

ダウンロード版
https://ecml.booth.pm/items/1739359

書籍版
https://ecml.booth.pm/items/1739286

(追記ここまで)

 

さて、企画通りに、ゲームの核となる部分のプログラミングは終わりました。
この時点で、7月が終わろうとしていました。

 

さて、企画とプログラミングが終わればゲームはもう遊べるのでしょうか?
まだですね。ノーツは流れてくるものの譜面ができあがっていません。

 

ということで、次回は音楽ゲーム制作におけるレベルデザイン「譜面制作」や、
市販・市場のゲームをプレイして、ゲーム開発にフィードバックしていく体験について書いていきたいと思います。

私が初めてゲームセンターの音楽ゲームに触れたりする話です。

 

ここまで読んでいただきありがとうございました!
次回もどうぞよろしくお付き合いください!!

 

今回メイキング記事で紹介しているゲーム「Overriding」は
長大祭ゲームセンターで遊ぶことができます!!

Overridingメイキング第1回: 企画がはじまるまで

こんにちは、Boltzです。今回はPC音ゲーであるOverriding制作過程を連載する企画の第1回目ということで、企画を始めた時の様子を書いていきたいと思います。

 

Overridingとは、Unityで制作したPC用音ゲーです。6レーンそれぞれに1つのボタンが対応しており、音楽に合わせてタイミングよくボタンを押すことによってスコアを獲得します。

 

今回はこのOverridingが制作されるきっかけとなった流れを順を追って説明していけたらと思います。

このゲームには、去年のサークル活動とつながる部分もあるので、話は去年のサークル設立時に遡ります。

このサークル「経済マルチメディア研究会」は、去年7月に私とけい、ナゾノクサの3人で立ち上げたサークルです。
去年は「PCを用いた創作活動による問題解決」をテーマに、デザインの学習やプレゼン手法の研究、観光学、郷土研究などをしていました。

ただ、新入生を迎えるにあたって、サークルとしてひとつの芯を持った活動をできているか?(諸活動からサークル像が見えてくるか)という疑問がありました。3人で相談した結果、サークルの活動内容から変えてみようということになりました。

 

話は変わりますが、私は高校の頃からQpic(九大で物理を研究しているサークル)やKMC(京大でマイコンを研究しているサークル)、traP(東工大でデジタル創作をしているサークル)などの団体に憧れがありました。
外から見て、メンバー各々の得意分野(企画、レベルデザイン、グラフィック、音楽など)を組み合わせてひとつのゲームをつくるという体験が楽しそうに思えたからです。

高校の頃、大学に入ったら是非そのような創作系団体に所属したい!と思っていました。

長崎大学に入学して、そんな創作のできる団体があるのか調べてみたところ、残念ながら私のサーチには引っかかりませんでした。
そのため、前々から長崎大学にゲーム制作のサークルを自分でつくりたい!または誰か作ってくれ!と考えていました。
ようするに、今回の転機はちょうどいい部分があったのです。

 

ゲーム制作の活動を軸に置くとなると、これまでのサークルの活動とは整合性がとれるかという疑問もありました。
仮に活動内容をゲーム制作に変更しても各々の得意分野を生かして、PCで「マルチメディアコンテンツ」を制作し、発表するというサークルの活動とも矛盾するものにはならないと考えられます。
そのため、活動内容を思い切ってゲーム制作に変更しました。

大学主催のサークル勧誘の機会や、仮入会イベントなどを行った後に6人くらい新入部員が来てくれました。

ゲーム制作サークルとなった「経済マルチメディア研究会」はメンバーを増強しつつ制作力を鍛えていかなければなりません。
そのために、内製のゲームを制作して対外的に発表する必要があります。

対外的に発表する場として長大祭を選べば、それまでに内製の開発もいくらかできるのではないかと考えられました。

斯くして4月に団体ツイッターアカウントで「長大祭にゲームセンターを出展する」と宣言。新入部員の有志にはプログラミングについて学んでもらいながら、発表するゲームの企画を立ててもらうことになりました。一通り講座が終わった後は、各々の考えたゲームの企画プレゼン会をすることにしました。

 

一方で、後輩にばかりプランを作らせるわけにはいかず、自分も何かゲームの案を持ってこなければと思っていました。

今年度の長大祭で発表するゲームは、当サークルにとっても初めての作品となるので、サークルのあり方や活動に関わるものなどを、何らかの形でゲームに入れられないかと思いました。

そのため、4月時点では情報やコンピュータ、プログラミングを連想させるゲームをつくりたいと考えていました。

当時のメモです。迷走していた感じがあります。

やがてパリティチェックとかメモリ領域の確保を題材にしたシューティングゲームを作ろうと思いつきました。

しかしあまりにもコアな内容になる感じがして、それは誰にヒットするんだ、などとセルフ突っ込みをやっていました。

 

なかなかこれと言った案が出ずに悶々とした日々を送っていました。そして、あるとき(その当時新しい音楽ゲームだったCytus2を遊んでいる時だったかな)音楽ゲームをつくろ〜と閃きました

閃くと同時に、音ゲーをこのタイミングにつくることで得られるメリットがいくつか浮かんできました。

まず、長崎大学の他のサークルの方々とつながりが持てること。4月の新入生勧誘の時点で、サークルに作曲家はいませんでした。ゲーム制作サークルを続けるにあたって、フリー音源に頼り続けるのもどうかと思っていました。音楽ゲームを作れば、楽曲の募集などで学内の作曲家と繋がれると考えられます。

また、長大祭に展示するアーケードゲームとして、ある手法をとれば来場者に音楽ゲームの楽しさを伝えられるのではないかと思ったからでもあります。

当時ハマっていたゲームはスマートフォンアプリのCytus2でした。高校生の頃からRayarkのゲームはプレイしており、一見新しいタイプの音楽ゲームに見えるけれども、一般的な音ゲーの核となる部分を持っており、音ゲー(というジャンル)の楽しさを十分感じられるゲームデザインにとても惹かれていました。

この設計思想(新しさを感じさせつつ、音楽を聴かせてノーツを叩かせるゲームデザイン)をアーケードゲームに生かすことで、プレイヤーによりダイレクトにアーケード音楽ゲームの楽しさを伝えられるのではないかと思いました。

最初に書いたとおり、Overridingは6レーンの音ゲーです。
中央4レーンに対応する4ボタンは一般の音ゲーと同じく上を向いています(SoundVoltexなどを想像していただけるとわかりやすいと思います)
新しい部分としては、両サイド2レーンは操作デバイスの側面についているところです。

 

Cytusシリーズは譜面配置から、曲のどのパートを叩かせているのかプレイヤーに考えさせるゲームデザインをしていました。

Deemoはピアノパートを聴かせて、基本的にピアノパートをプレイヤーに演奏させるゲームデザインでした。

Overridingでは側面ボタンはリズムパート、4ボタンはメロディパートを基本的に当てています。プレイヤーにそれぞれのパート(メロディ、リズム)を聞き分けてもらいながら、それぞれ異なるボタンで演奏してもらえば、「音楽を聴いてプレイする」という音ゲー上達の一歩を踏み出してもらうことにもつながるのではないかと考えています。

 

……というような主旨でプレゼン資料を作り、5月の企画プレゼンで企画を通しました。

そのあとの専らの課題は作曲家探しでした。同じサークル棟を使用している音楽サークルにプレゼン資料を持ってお邪魔させていただいたり、部員の友達をあたったりして作曲を依頼する中で、長大生の作曲家さんにプレイ可能な楽曲を4曲前後制作していただける見通しが立ち、制作が本格的に始まりました。

 

いま思い返してみると、かなり見切り発車で無茶な計画だったと思います。今年度のはじめから付き合ってくれた作曲家の方、グラフィック担当の方、本当にありがとうございます!!この連載中にもう何回かお礼をいうことになるだろうけど……。

 

さて、企画が通って実現の見通しが立ったところで、第1回企画編はおしまいです。実現の見通しが立ってよかったですね!!!

 

……アーティストの方をみつけてくるだけで実現の見通しが立つのでしょうか?立ちませんね。これから、Unityで音楽ゲームを成立させるためにプログラミングをしていかなければなりません。第2回はプログラム編の予定です!

第2回では、どのサイトを参考にして、どうアルゴリズムを組んでいったか書いていこうと思います。

 

この記事で紹介している音楽ゲーム「Overriding」は、
11/23, 24に行われる長崎大学の学祭で遊べます。

教育学部棟2階23番講義室にて展示しています!
ぜひ遊びに来てください!!

音楽ゲームをYoutubeで紹介していただきました!

こんにちは、Boltzです。今回はひとつお知らせがあります!

以前から当サークルを中心に制作を進めていた
音楽ゲーム「Overriding」を

Youtubeで紹介していただきました!

(ここで歓声の効果音が流れる)

……長く動画編集をやっていたので、Youtuberのノリになってしまいました。

この動画では、Youtuberの「きちまる」さんが、
ゲームとそのコントローラを遊びながら紹介してくれています。

遊び方説明のモードから始めてくれているので、どんなゲームかもわかりやすい動画になっていると思います。
ぜひご覧ください!

きちまるさんと、動画に携わってくれた方々、この場をお借りしてお礼申し上げます。
ありがとうございました!

 

現在、サークルではさらなるクオリティアップのために開発を続けているところです。

一番わかりやすいところとして、楽曲の追加が挙げられます。

この動画の選曲画面をよく見てみると、4つの楽曲が選べるようになっています。
本番では楽曲の選択肢が増えるとか、開発をしていてそんな雰囲気を感じますね…!!

きちまるさんは動画の中でとても楽しそうに遊んでくれていますが、
長大祭ではもっと楽しいゲームになっていると思います。

 

以下、告知です。

2018年11月23日(金) – 24日(土)
長崎大学文教キャンパス教育学部棟2階 23番講義室にて
「ゲームセンター」というイベントを行います。

今回動画で紹介されたゲームの他にも企画があります!
ぜひ当日、ゲームセンターに足をお運びください!